feat: Quiz 사진 등록, 목록 조회 추가
This commit is contained in:
parent
10ef02eaf4
commit
97c25fff13
@ -12,9 +12,8 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/quiz")
|
||||
@ -30,13 +29,14 @@ public class QuizController {
|
||||
|
||||
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public ResponseEntity<?> createQuizSet(@RequestHeader("Authorization") String accessToken, @RequestPart QuizSetCreateRequest quizSetCreateRequest
|
||||
, @RequestPart(value = "image", required = false) MultipartFile image) throws IOException {
|
||||
, @RequestPart(value = "images", required = false) List<MultipartFile> images) throws IOException {
|
||||
Long userId = Long.parseLong(jwtUtil.getUserId(accessToken));
|
||||
|
||||
QuizSet quizSet = quizSetService.createQuizSet(userId, quizSetCreateRequest.getTitle());
|
||||
|
||||
int imageIdx = 0;
|
||||
for (QuizCreateRequest quizCreateRequest : quizSetCreateRequest.getQuizzes()) {
|
||||
quizService.createQuiz(quizSet, quizCreateRequest);
|
||||
quizService.createQuiz(quizSet, quizCreateRequest, images.get(imageIdx++));
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
@ -46,6 +46,28 @@ public class QuizController {
|
||||
public ResponseEntity<?> getQuizzes(@PathVariable Long quizsetId) {
|
||||
QuizSetResponse quizSet = quizSetService.findQuizSetResponse(quizsetId);
|
||||
|
||||
if (quizSet == null) {
|
||||
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(quizSet, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@DeleteMapping("/{quizsetId}")
|
||||
public ResponseEntity<?> deleteQuizSet(@RequestHeader("Authorization") String accessToken, @PathVariable Long quizsetId) {
|
||||
Long userId = Long.parseLong(jwtUtil.getUserId(accessToken));
|
||||
|
||||
if (!quizSetService.deleteQuizSet(userId, quizsetId)) {
|
||||
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<?> getQuizSets(@RequestHeader("Authorization") String accessToken) {
|
||||
Long userId = Long.parseLong(jwtUtil.getUserId(accessToken));
|
||||
|
||||
return new ResponseEntity<>(quizSetService.findMyQuizSetResponses(userId), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package com.edufocus.edufocus.quiz.entity;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MyQuizSetResponse {
|
||||
|
||||
private Long quizSetId;
|
||||
|
||||
private String title;
|
||||
}
|
@ -33,7 +33,7 @@ public class Quiz {
|
||||
@Column
|
||||
private String answer;
|
||||
|
||||
@OneToMany(mappedBy = "quiz")
|
||||
@OneToMany(mappedBy = "quiz", orphanRemoval = true, cascade = CascadeType.ALL)
|
||||
@JsonManagedReference
|
||||
private List<Choice> choices;
|
||||
|
||||
|
@ -27,12 +27,9 @@ public class QuizSet {
|
||||
@Column
|
||||
private String title;
|
||||
|
||||
@Column
|
||||
private String image;
|
||||
|
||||
@OneToMany(mappedBy = "quizSet")
|
||||
@OneToMany(mappedBy = "quizSet", orphanRemoval = true)
|
||||
@JsonManagedReference
|
||||
private List<Quiz> quizzes = new ArrayList<Quiz>();
|
||||
private List<Quiz> quizzes = new ArrayList<Quiz>();
|
||||
|
||||
public void addQuiz(Quiz quiz) {
|
||||
this.quizzes.add(quiz);
|
||||
|
@ -2,7 +2,6 @@ package com.edufocus.edufocus.quiz.entity;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@ -14,7 +13,5 @@ public class QuizSetResponse {
|
||||
|
||||
private String title;
|
||||
|
||||
private String image;
|
||||
|
||||
private List<QuizResponse> quizzes;
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
package com.edufocus.edufocus.quiz.repository;
|
||||
|
||||
import com.edufocus.edufocus.quiz.entity.Choice;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface ChoiceRepository extends JpaRepository<Choice, Long> {
|
||||
|
||||
}
|
@ -3,6 +3,9 @@ package com.edufocus.edufocus.quiz.repository;
|
||||
import com.edufocus.edufocus.quiz.entity.QuizSet;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface QuizSetRepository extends JpaRepository<QuizSet, Long> {
|
||||
|
||||
List<QuizSet> findQuizSetsByUserId(Long userId);
|
||||
}
|
||||
|
@ -1,7 +0,0 @@
|
||||
package com.edufocus.edufocus.quiz.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public interface ChoiceService {
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
package com.edufocus.edufocus.quiz.service;
|
||||
|
||||
import com.edufocus.edufocus.quiz.entity.Choice;
|
||||
import com.edufocus.edufocus.quiz.entity.ChoiceCreateRequest;
|
||||
import com.edufocus.edufocus.quiz.repository.ChoiceRepository;
|
||||
import jakarta.transaction.Transactional;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
@RequiredArgsConstructor
|
||||
public class ChoiceServiceImpl implements ChoiceService {
|
||||
|
||||
private final ChoiceRepository choiceRepository;
|
||||
|
||||
public void createChoice(ChoiceCreateRequest choiceCreateRequest) {
|
||||
Choice choice = new Choice().builder()
|
||||
.num(choiceCreateRequest.getNum())
|
||||
.content(choiceCreateRequest.getContent())
|
||||
.build();
|
||||
|
||||
choiceRepository.save(choice);
|
||||
}
|
||||
}
|
@ -3,13 +3,14 @@ package com.edufocus.edufocus.quiz.service;
|
||||
import com.edufocus.edufocus.quiz.entity.QuizCreateRequest;
|
||||
import com.edufocus.edufocus.quiz.entity.QuizSet;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public interface QuizService {
|
||||
|
||||
void createQuiz(QuizSet quizSet, QuizCreateRequest quizCreateRequest);
|
||||
void createQuiz(QuizSet quizSet, QuizCreateRequest quizCreateRequest, MultipartFile quizImage) throws IOException;
|
||||
|
||||
boolean deleteQuiz(long quizId);
|
||||
}
|
||||
|
@ -1,15 +1,17 @@
|
||||
package com.edufocus.edufocus.quiz.service;
|
||||
|
||||
import com.edufocus.edufocus.quiz.entity.*;
|
||||
import com.edufocus.edufocus.quiz.repository.ChoiceRepository;
|
||||
import com.edufocus.edufocus.quiz.repository.QuizRepository;
|
||||
import com.edufocus.edufocus.quiz.repository.QuizSetRepository;
|
||||
import jakarta.transaction.Transactional;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
@Service
|
||||
@ -17,14 +19,10 @@ import java.util.List;
|
||||
@RequiredArgsConstructor
|
||||
public class QuizServiceImpl implements QuizService {
|
||||
|
||||
private final ChoiceRepository choiceRepository;
|
||||
|
||||
private final QuizRepository quizRepository;
|
||||
|
||||
private final QuizSetRepository quizSetRepository;
|
||||
|
||||
@Override
|
||||
public void createQuiz(QuizSet quizSet, QuizCreateRequest quizCreateRequest) {
|
||||
public void createQuiz(QuizSet quizSet, QuizCreateRequest quizCreateRequest, MultipartFile quizImage) throws IOException {
|
||||
Quiz quiz = new Quiz().builder()
|
||||
.quizSet(quizSet)
|
||||
.question(quizCreateRequest.getQuestion())
|
||||
@ -40,23 +38,28 @@ public class QuizServiceImpl implements QuizService {
|
||||
.content(choiceCreateRequest.getContent())
|
||||
.build();
|
||||
choices.add(choice);
|
||||
choiceRepository.save(choice);
|
||||
}
|
||||
|
||||
quiz.setChoices(choices);
|
||||
|
||||
if (quizImage != null && !quizImage.isEmpty()) {
|
||||
String uid = UUID.randomUUID().toString();
|
||||
|
||||
String currentPath = "backend/src/main/resources/images/quizzes/";
|
||||
File checkPathFile = new File(currentPath);
|
||||
if (!checkPathFile.exists()) {
|
||||
checkPathFile.mkdirs();
|
||||
}
|
||||
|
||||
File savingImage = new File(currentPath + uid + "_" + quizImage.getOriginalFilename());
|
||||
quizImage.transferTo(savingImage.toPath());
|
||||
String savePath = savingImage.toPath().toString();
|
||||
|
||||
quiz.setImage(savePath);
|
||||
}
|
||||
|
||||
quizRepository.save(quiz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteQuiz(long quizId) {
|
||||
// 유저 아이디 정보 조회 후 검증 로직 추가 예정
|
||||
// jwt -> 로그인 유저 정보 조회
|
||||
// quizId -> 퀴즈 정보 조회 -> 퀴즈셋 정보 조회
|
||||
// 퀴즈셋 생성자와 로그인 유저의 id값이 일치하는지 확인 -> 불일치시 삭제 실패
|
||||
|
||||
quizRepository.deleteById(quizId);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
package com.edufocus.edufocus.quiz.service;
|
||||
|
||||
import com.edufocus.edufocus.quiz.entity.MyQuizSetResponse;
|
||||
import com.edufocus.edufocus.quiz.entity.QuizSet;
|
||||
import com.edufocus.edufocus.quiz.entity.QuizSetResponse;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public interface QuizSetService {
|
||||
|
||||
@ -11,10 +14,11 @@ public interface QuizSetService {
|
||||
|
||||
void updateQuizSet(QuizSet quizSet);
|
||||
|
||||
void deleteQuizSet(long quizSetId);
|
||||
boolean deleteQuizSet(Long userId, Long quizSetId);
|
||||
|
||||
QuizSet findQuizSet(long quizSetId);
|
||||
QuizSet findQuizSet(Long quizSetId);
|
||||
|
||||
QuizSetResponse findQuizSetResponse(long quizSetId);
|
||||
QuizSetResponse findQuizSetResponse(Long quizSetId);
|
||||
|
||||
List<MyQuizSetResponse> findMyQuizSetResponses(Long userId);
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.edufocus.edufocus.quiz.service;
|
||||
|
||||
import com.edufocus.edufocus.quiz.entity.*;
|
||||
import com.edufocus.edufocus.quiz.repository.QuizRepository;
|
||||
import com.edufocus.edufocus.quiz.repository.QuizSetRepository;
|
||||
import com.edufocus.edufocus.user.model.entity.User;
|
||||
import com.edufocus.edufocus.user.model.repository.UserRepository;
|
||||
@ -11,6 +10,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
@ -38,36 +38,65 @@ public class QuizSetServiceImpl implements QuizSetService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteQuizSet(long quizSetId) {
|
||||
public boolean deleteQuizSet(Long userId, Long quizSetId) {
|
||||
Optional<QuizSet> quizSet = quizSetRepository.findById(quizSetId);
|
||||
|
||||
if (quizSet.isEmpty() || userId != quizSet.get().getUser().getId()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
quizSetRepository.deleteById(quizSetId);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuizSet findQuizSet(long quizSetId) {
|
||||
public QuizSet findQuizSet(Long quizSetId) {
|
||||
return quizSetRepository.findById(quizSetId).get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuizSetResponse findQuizSetResponse(long quizSetId) {
|
||||
QuizSet quizSet = findQuizSet(quizSetId);
|
||||
public QuizSetResponse findQuizSetResponse(Long quizSetId) {
|
||||
Optional<QuizSet> quizSet = quizSetRepository.findById(quizSetId);
|
||||
|
||||
if (quizSet.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
List<QuizResponse> quizResponses = new ArrayList<>();
|
||||
for (Quiz quiz : quizSet.getQuizzes()) {
|
||||
for (Quiz quiz : quizSet.get().getQuizzes()) {
|
||||
QuizResponse quizResponse = new QuizResponse().builder()
|
||||
.question(quiz.getQuestion())
|
||||
.image(quiz.getImage())
|
||||
.choices(quiz.getChoices())
|
||||
.build();
|
||||
quizResponses.add(quizResponse);
|
||||
}
|
||||
|
||||
QuizSetResponse quizSetResponse = new QuizSetResponse().builder()
|
||||
.title(quizSet.getTitle())
|
||||
.image(quizSet.getImage())
|
||||
.title(quizSet.get().getTitle())
|
||||
.quizzes(quizResponses)
|
||||
.build();
|
||||
|
||||
return quizSetResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MyQuizSetResponse> findMyQuizSetResponses(Long userId) {
|
||||
List<QuizSet> quizSetList = quizSetRepository.findQuizSetsByUserId(userId);
|
||||
|
||||
List<MyQuizSetResponse> myQuizSetResponses = new ArrayList<>();
|
||||
for (QuizSet quizSet : quizSetList) {
|
||||
MyQuizSetResponse myQuizSetResponse = new MyQuizSetResponse().builder()
|
||||
.quizSetId(quizSet.getId())
|
||||
.title(quizSet.getTitle())
|
||||
.build();
|
||||
|
||||
myQuizSetResponses.add(myQuizSetResponse);
|
||||
}
|
||||
|
||||
return myQuizSetResponses;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user