Skip to content

Commit

Permalink
feat: Add Exam Features
Browse files Browse the repository at this point in the history
  • Loading branch information
KellyKimHyeJin committed Aug 6, 2023
1 parent 7b8a612 commit ad21ac5
Show file tree
Hide file tree
Showing 9 changed files with 188 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.khureturn.community.controller;

import com.khureturn.community.domain.exam.Exam;
import com.khureturn.community.dto.ExamRequestDto;
import com.khureturn.community.dto.ExamResponseDto;
import com.khureturn.community.service.ExamService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.Principal;
import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/exam")
public class ExamController {

private final ExamService examService;

@PostMapping("")
public ResponseEntity<ExamResponseDto.CreateExamDto> createExam(Principal principal, @RequestPart(value = "fileList", required= false) List<MultipartFile> fileList,
@RequestPart(value="data") ExamRequestDto.CreateExamDto data) throws IOException{
Exam exam = examService.create(fileList, data, principal);
return ResponseEntity.ok(ExamResponseDto.CreateExamDto.builder().examId(exam.getId()).build());
}

@PutMapping("/{examId}")
public ResponseEntity<ExamResponseDto.UpdateExamDto> updateExam(@PathVariable(name = "examId") Long examId, @RequestBody ExamRequestDto.UpdateExamDto request){
Exam exam = examService.update(examId, request);
return ResponseEntity.ok(ExamResponseDto.UpdateExamDto.builder().examId(exam.getId()).build());
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/khureturn/community/domain/exam/Exam.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class Exam extends BaseEntity {
private Long id;
private String examTitle;
private String examContent;
private Boolean isAnonymous;

@Column(columnDefinition = "INT DEFAULT 0")
private int examLikeCount;
Expand All @@ -40,4 +41,10 @@ public class Exam extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name ="member_id")
private Member member;

public void update(String examTitle, String examContent, Boolean isAnonymous){
this.examTitle=examTitle;
this.examContent=examContent;
this.isAnonymous=isAnonymous;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ public class ExamFile extends BaseEntity{
@Column(name = "exam_file_id")
private Long id;

private String examFileName;
private String examFileUrl;
private String examFileSize;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="exam_id")
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/khureturn/community/dto/ExamRequestDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.khureturn.community.dto;

import lombok.*;

public class ExamRequestDto {
@Builder
@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class CreateExamDto{
private String title;
private String content;
private Boolean isAnonymous;

}

@Builder
@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class UpdateExamDto{
private String title;
private String content;
private Boolean isAnonymous;

}

}
24 changes: 24 additions & 0 deletions src/main/java/com/khureturn/community/dto/ExamResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.khureturn.community.dto;

import lombok.*;

public class ExamResponseDto {

@Builder
@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class CreateExamDto{
private Long examId;

}

@Builder
@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class UpdateExamDto{
private Long examId;

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,4 @@ public interface MemberRepository extends JpaRepository<Member, Long> {

Member findByName(String name);

Member findByDiaryComments(Long diaryCommentId);

}
30 changes: 30 additions & 0 deletions src/main/java/com/khureturn/community/service/ExamFileService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.khureturn.community.service;

import com.khureturn.community.domain.exam.ExamFile;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service
@NoArgsConstructor
public class ExamFileService {

public static String fileUpload(MultipartFile file) throws IOException {

String rootPath = System.getProperty("user.dir") + "/src/main/webapp/WEB-INF";
String fileDir = rootPath + "/static/examFiles";
UUID uuid = UUID.randomUUID();
String savedFileName = uuid.toString() + "_" + file.getOriginalFilename();
File saveFile = new File(fileDir, savedFileName);
if(!saveFile.exists()){
saveFile.mkdir();
}
file.transferTo(saveFile);
return saveFile.getPath();

}
}
63 changes: 63 additions & 0 deletions src/main/java/com/khureturn/community/service/ExamService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.khureturn.community.service;

import com.khureturn.community.domain.Member;
import com.khureturn.community.domain.exam.Exam;
import com.khureturn.community.domain.exam.ExamFile;
import com.khureturn.community.dto.ExamRequestDto;
import com.khureturn.community.exception.NotFoundException;
import com.khureturn.community.repository.ExamFileRepository;
import com.khureturn.community.repository.ExamRepository;
import com.khureturn.community.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.Principal;
import java.util.List;

@Service
@RequiredArgsConstructor
public class ExamService {

private final ExamRepository examRepository;

private final MemberRepository memberRepository;
private final ExamFileRepository examFileRepository;

@Transactional
public Exam create(List<MultipartFile> fileList, ExamRequestDto.CreateExamDto request, Principal principal) throws IOException {
Member member = memberRepository.findByName(principal.getName());
Exam exam = Exam.builder()
.examTitle(request.getTitle())
.examContent(request.getContent())
.isAnonymous(request.getIsAnonymous())
.member(member)
.build();
examRepository.save(exam);

if(fileList != null){
for(MultipartFile file: fileList){
ExamFile examFile = ExamFile.builder()
.examFileUrl(ExamFileService.fileUpload(file))
.exam(exam)
.build();
examFileRepository.save(examFile);

}
}
return exam;
}

@Transactional
public Exam update(Long examId, ExamRequestDto.UpdateExamDto request){
Exam exam = examRepository.findById(examId)
.orElseThrow(()-> new NotFoundException("족보를 찾을 수 없습니다."));
exam.update(request.getTitle(), request.getContent(), request.getIsAnonymous());
return exam;
}



}

0 comments on commit ad21ac5

Please sign in to comment.