From 2ea69e6049c7c14235948df782820f313aec4995 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sat, 10 Aug 2024 16:15:41 +0900 Subject: [PATCH 01/27] =?UTF-8?q?feat:=20TemplateController=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=A6=AC=EB=B7=B0=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=EC=9D=91=EB=8B=B5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TemplateController.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 backend/src/main/java/reviewme/template/controller/TemplateController.java diff --git a/backend/src/main/java/reviewme/template/controller/TemplateController.java b/backend/src/main/java/reviewme/template/controller/TemplateController.java new file mode 100644 index 000000000..b51c19409 --- /dev/null +++ b/backend/src/main/java/reviewme/template/controller/TemplateController.java @@ -0,0 +1,22 @@ +package reviewme.template.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import reviewme.template.dto.response.TemplateResponse; +import reviewme.template.service.TemplateService; + +@RestController +@RequiredArgsConstructor +public class TemplateController { + + private final TemplateService templateService; + + @GetMapping("/reviews/write") + public ResponseEntity findReviewTemplate(@RequestParam String reviewRequestCode) { + TemplateResponse response = templateService.findDefaultTemplate(); + return ResponseEntity.ok(response); + } +} From c424c06b1085f3baafeda034a6d63276ca6e12af Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sat, 10 Aug 2024 16:34:17 +0900 Subject: [PATCH 02/27] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=9D=91=EB=8B=B5=EC=9D=84=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20dto=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/dto/response/OptionGroupResponse.java | 12 ++++++++++++ .../template/dto/response/OptionItemResponse.java | 8 ++++++++ .../template/dto/response/QuestionResponse.java | 13 +++++++++++++ .../template/dto/response/SectionResponse.java | 13 +++++++++++++ .../template/dto/response/TemplateResponse.java | 12 ++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java create mode 100644 backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java create mode 100644 backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java create mode 100644 backend/src/main/java/reviewme/template/dto/response/SectionResponse.java create mode 100644 backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java diff --git a/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java b/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java new file mode 100644 index 000000000..7fe5732ed --- /dev/null +++ b/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java @@ -0,0 +1,12 @@ +package reviewme.template.dto.response; + +import java.util.List; + +public record OptionGroupResponse( + + long optionGroupId, + int minCount, + int maxCount, + List options +) { +} diff --git a/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java b/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java new file mode 100644 index 000000000..a96160598 --- /dev/null +++ b/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java @@ -0,0 +1,8 @@ +package reviewme.template.dto.response; + +public record OptionItemResponse( + + long optionId, + String content +) { +} diff --git a/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java new file mode 100644 index 000000000..055e0e711 --- /dev/null +++ b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java @@ -0,0 +1,13 @@ +package reviewme.template.dto.response; + +public record QuestionResponse( + + long questionId, + boolean required, + String content, + String questionType, + OptionGroupResponse optionGroup, + boolean hasGuideline, + String guideline +) { +} diff --git a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java new file mode 100644 index 000000000..9752e7c11 --- /dev/null +++ b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java @@ -0,0 +1,13 @@ +package reviewme.template.dto.response; + +import java.util.List; + +public record SectionResponse( + + long sectionId, + String visible, + Integer onSelectedOptionId, + String header, + List questions +) { +} diff --git a/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java new file mode 100644 index 000000000..8df16a786 --- /dev/null +++ b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java @@ -0,0 +1,12 @@ +package reviewme.template.dto.response; + +import java.util.List; + +public record TemplateResponse( + + long formId, + String revieweeName, + String projectName, + List sections +) { +} From 5abbf9213c0506237636474467d6c9873fb107ee Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sat, 10 Aug 2024 23:24:38 +0900 Subject: [PATCH 03/27] =?UTF-8?q?refactor:=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/domain/exception/InvalidAnswerLengthException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/reviewme/review/domain/exception/InvalidAnswerLengthException.java b/backend/src/main/java/reviewme/review/domain/exception/InvalidAnswerLengthException.java index abf6ffe60..e2f7db775 100644 --- a/backend/src/main/java/reviewme/review/domain/exception/InvalidAnswerLengthException.java +++ b/backend/src/main/java/reviewme/review/domain/exception/InvalidAnswerLengthException.java @@ -7,7 +7,7 @@ public class InvalidAnswerLengthException extends BadRequestException { public InvalidAnswerLengthException(int answerLength, int minLength, int maxLength) { - super("답변의 길이는 %d자 이상 %d자 이하여야 합니다.".formatted(minLength, maxLength)); + super("답변의 길이는 %d자 이상 %d자 이하여야 해요.".formatted(minLength, maxLength)); log.info("AnswerLength is out of bound - answerLength:{}, minLength: {}, maxLength: {}", answerLength, minLength, maxLength); } From 8d101013a8a33d03269818bd98b47033e7a36eb1 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sun, 11 Aug 2024 01:01:08 +0900 Subject: [PATCH 04/27] =?UTF-8?q?refactor:=20onSelectedOptionId=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/template/dto/response/SectionResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java index 9752e7c11..e2616ab74 100644 --- a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java @@ -6,7 +6,7 @@ public record SectionResponse( long sectionId, String visible, - Integer onSelectedOptionId, + Long onSelectedOptionId, String header, List questions ) { From d532c2b51c90fa9a002d0c6a5cc3dac431a47994 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sun, 11 Aug 2024 01:43:16 +0900 Subject: [PATCH 05/27] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20id=20=EC=A0=9C=EC=99=B8=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/question/domain/OptionGroup.java | 6 ++++++ .../java/reviewme/question/domain/OptionItem.java | 6 ++++++ .../java/reviewme/question/domain/Question2.java | 12 ++++++++++++ .../main/java/reviewme/template/domain/Section.java | 9 +++++++++ .../main/java/reviewme/template/domain/Template.java | 4 ++++ 5 files changed, 37 insertions(+) diff --git a/backend/src/main/java/reviewme/question/domain/OptionGroup.java b/backend/src/main/java/reviewme/question/domain/OptionGroup.java index 330ff963a..4cab80b43 100644 --- a/backend/src/main/java/reviewme/question/domain/OptionGroup.java +++ b/backend/src/main/java/reviewme/question/domain/OptionGroup.java @@ -28,4 +28,10 @@ public class OptionGroup { @Column(name = "max_selection_count", nullable = false) private int maxSelectionCount; + + public OptionGroup(long questionId, int minSelectionCount, int maxSelectionCount) { + this.questionId = questionId; + this.minSelectionCount = minSelectionCount; + this.maxSelectionCount = maxSelectionCount; + } } diff --git a/backend/src/main/java/reviewme/question/domain/OptionItem.java b/backend/src/main/java/reviewme/question/domain/OptionItem.java index bd318b945..4b4548e3b 100644 --- a/backend/src/main/java/reviewme/question/domain/OptionItem.java +++ b/backend/src/main/java/reviewme/question/domain/OptionItem.java @@ -28,4 +28,10 @@ public class OptionItem { @Column(name = "position", nullable = false) private int position; + + public OptionItem(String content, long optionGroupId, int position) { + this.content = content; + this.optionGroupId = optionGroupId; + this.position = position; + } } diff --git a/backend/src/main/java/reviewme/question/domain/Question2.java b/backend/src/main/java/reviewme/question/domain/Question2.java index 55ae48c2a..f1903ed4d 100644 --- a/backend/src/main/java/reviewme/question/domain/Question2.java +++ b/backend/src/main/java/reviewme/question/domain/Question2.java @@ -37,4 +37,16 @@ public class Question2 { @Column(name = "position", nullable = false) private int position; + + public Question2(boolean required, QuestionType questionType, String content, String guideline, int position) { + this.required = required; + this.questionType = questionType; + this.content = content; + this.guideline = guideline; + this.position = position; + } + + public boolean hasGuideline() { + return !guideline.isEmpty(); + } } diff --git a/backend/src/main/java/reviewme/template/domain/Section.java b/backend/src/main/java/reviewme/template/domain/Section.java index fec4f84d6..f9f49ae43 100644 --- a/backend/src/main/java/reviewme/template/domain/Section.java +++ b/backend/src/main/java/reviewme/template/domain/Section.java @@ -42,4 +42,13 @@ public class Section { @Column(name = "position", nullable = false) private int position; + + public Section(VisibleType visibleType, List questionIds, Long onSelectedOptionId, String header, + int position) { + this.visibleType = visibleType; + this.questionIds = questionIds; + this.onSelectedOptionId = onSelectedOptionId; + this.header = header; + this.position = position; + } } diff --git a/backend/src/main/java/reviewme/template/domain/Template.java b/backend/src/main/java/reviewme/template/domain/Template.java index 310e51ced..3a8c733b1 100644 --- a/backend/src/main/java/reviewme/template/domain/Template.java +++ b/backend/src/main/java/reviewme/template/domain/Template.java @@ -26,4 +26,8 @@ public class Template { @ElementCollection @CollectionTable(name = "section_ids", joinColumns = @JoinColumn(name = "template_id")) List sectionIds; + + public Template(List sectionIds) { + this.sectionIds = sectionIds; + } } From 8cdaabee6d0b892fc5ee07bbe22a8b5265e1aef7 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sun, 11 Aug 2024 01:44:33 +0900 Subject: [PATCH 06/27] =?UTF-8?q?feat:=20TemplateService=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=EC=9D=91=EB=8B=B5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TemplateController.java | 2 +- .../NoRegisteredTemplatesException.java | 13 ++++++++ .../template/service/TemplateService.java | 32 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/reviewme/template/domain/exception/NoRegisteredTemplatesException.java create mode 100644 backend/src/main/java/reviewme/template/service/TemplateService.java diff --git a/backend/src/main/java/reviewme/template/controller/TemplateController.java b/backend/src/main/java/reviewme/template/controller/TemplateController.java index b51c19409..c687161b3 100644 --- a/backend/src/main/java/reviewme/template/controller/TemplateController.java +++ b/backend/src/main/java/reviewme/template/controller/TemplateController.java @@ -16,7 +16,7 @@ public class TemplateController { @GetMapping("/reviews/write") public ResponseEntity findReviewTemplate(@RequestParam String reviewRequestCode) { - TemplateResponse response = templateService.findDefaultTemplate(); + TemplateResponse response = templateService.findDefaultTemplate(reviewRequestCode); return ResponseEntity.ok(response); } } diff --git a/backend/src/main/java/reviewme/template/domain/exception/NoRegisteredTemplatesException.java b/backend/src/main/java/reviewme/template/domain/exception/NoRegisteredTemplatesException.java new file mode 100644 index 000000000..d02136f93 --- /dev/null +++ b/backend/src/main/java/reviewme/template/domain/exception/NoRegisteredTemplatesException.java @@ -0,0 +1,13 @@ +package reviewme.template.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.NotFoundException; + +@Slf4j +public class NoRegisteredTemplatesException extends NotFoundException { + + public NoRegisteredTemplatesException() { + super("서버 내부에서 문제가 발생했어요. 서버에 문의해주세요."); + log.warn("NoRegisteredTemplatesException is occurred"); + } +} diff --git a/backend/src/main/java/reviewme/template/service/TemplateService.java b/backend/src/main/java/reviewme/template/service/TemplateService.java new file mode 100644 index 000000000..6a9a66c81 --- /dev/null +++ b/backend/src/main/java/reviewme/template/service/TemplateService.java @@ -0,0 +1,32 @@ +package reviewme.template.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import reviewme.review.domain.exception.ReviewGroupNotFoundByRequestReviewCodeException; +import reviewme.reviewgroup.domain.ReviewGroup; +import reviewme.reviewgroup.repository.ReviewGroupRepository; +import reviewme.template.domain.Template; +import reviewme.template.domain.exception.NoRegisteredTemplatesException; +import reviewme.template.dto.response.TemplateResponse; +import reviewme.template.repository.TemplateRepository; + +@Service +@RequiredArgsConstructor +public class TemplateService { + + private final ReviewGroupRepository reviewGroupRepository; + private final TemplateRepository templateRepository; + private final TemplateMapper templateMapper; + + @Transactional + public TemplateResponse findDefaultTemplate(String reviewRequestCode) { + ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) + .orElseThrow(() -> new ReviewGroupNotFoundByRequestReviewCodeException(reviewRequestCode)); + + Template defaultTemplate = templateRepository.findTopByOrderByIdDesc() + .orElseThrow(NoRegisteredTemplatesException::new); + + return templateMapper.mapToTemplateResponse(reviewGroup, defaultTemplate); + } +} From 9039ec80d8b72b384133673148cd77df2aafd93a Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Sun, 11 Aug 2024 01:46:05 +0900 Subject: [PATCH 07/27] =?UTF-8?q?feat:=20TemplateMapper=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NoOptionItemsInOptionGroupException.java | 13 +++ ...ptionGroupNotFoundByQuestionException.java | 13 +++ .../repository/OptionGroupRepository.java | 18 ++++ .../repository/OptionItemRepository.java | 12 +++ .../repository/Question2Repository.java | 17 ++++ .../exception/SectionNotFoundException.java | 13 +++ .../repository/SectionRepository.java | 17 ++++ .../repository/TemplateRepository.java | 12 +++ .../template/service/TemplateMapper.java | 99 +++++++++++++++++++ 9 files changed, 214 insertions(+) create mode 100644 backend/src/main/java/reviewme/question/domain/exception/NoOptionItemsInOptionGroupException.java create mode 100644 backend/src/main/java/reviewme/question/domain/exception/OptionGroupNotFoundByQuestionException.java create mode 100644 backend/src/main/java/reviewme/question/repository/OptionGroupRepository.java create mode 100644 backend/src/main/java/reviewme/question/repository/OptionItemRepository.java create mode 100644 backend/src/main/java/reviewme/question/repository/Question2Repository.java create mode 100644 backend/src/main/java/reviewme/template/domain/exception/SectionNotFoundException.java create mode 100644 backend/src/main/java/reviewme/template/repository/SectionRepository.java create mode 100644 backend/src/main/java/reviewme/template/repository/TemplateRepository.java create mode 100644 backend/src/main/java/reviewme/template/service/TemplateMapper.java diff --git a/backend/src/main/java/reviewme/question/domain/exception/NoOptionItemsInOptionGroupException.java b/backend/src/main/java/reviewme/question/domain/exception/NoOptionItemsInOptionGroupException.java new file mode 100644 index 000000000..fe4111a81 --- /dev/null +++ b/backend/src/main/java/reviewme/question/domain/exception/NoOptionItemsInOptionGroupException.java @@ -0,0 +1,13 @@ +package reviewme.question.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.NotFoundException; + +@Slf4j +public class NoOptionItemsInOptionGroupException extends NotFoundException { + + public NoOptionItemsInOptionGroupException(long optionGroupId) { + super("서버 내부에서 문제가 발생했어요. 서버에 문의해주세요."); + log.warn("OptionGroup has no OptionItems - optionGroupId: {}", optionGroupId); + } +} diff --git a/backend/src/main/java/reviewme/question/domain/exception/OptionGroupNotFoundByQuestionException.java b/backend/src/main/java/reviewme/question/domain/exception/OptionGroupNotFoundByQuestionException.java new file mode 100644 index 000000000..6f7cbe22a --- /dev/null +++ b/backend/src/main/java/reviewme/question/domain/exception/OptionGroupNotFoundByQuestionException.java @@ -0,0 +1,13 @@ +package reviewme.question.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.NotFoundException; + +@Slf4j +public class OptionGroupNotFoundByQuestionException extends NotFoundException { + + public OptionGroupNotFoundByQuestionException(long questionId) { + super("서버 내부에서 문제가 발생했어요. 서버에 문의해주세요."); + log.info("OptionGroup not found by question - questionId: {}", questionId); + } +} diff --git a/backend/src/main/java/reviewme/question/repository/OptionGroupRepository.java b/backend/src/main/java/reviewme/question/repository/OptionGroupRepository.java new file mode 100644 index 000000000..d6849bc52 --- /dev/null +++ b/backend/src/main/java/reviewme/question/repository/OptionGroupRepository.java @@ -0,0 +1,18 @@ +package reviewme.question.repository; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import reviewme.question.domain.OptionGroup; +import reviewme.question.domain.exception.OptionGroupNotFoundByQuestionException; + +@Repository +public interface OptionGroupRepository extends JpaRepository { + + Optional findByQuestionId(long questionId); + + default OptionGroup getOptionGroupByQuestionId(long questionId) { + return findByQuestionId(questionId) + .orElseThrow(() -> new OptionGroupNotFoundByQuestionException(questionId)); + } +} diff --git a/backend/src/main/java/reviewme/question/repository/OptionItemRepository.java b/backend/src/main/java/reviewme/question/repository/OptionItemRepository.java new file mode 100644 index 000000000..17dfb9825 --- /dev/null +++ b/backend/src/main/java/reviewme/question/repository/OptionItemRepository.java @@ -0,0 +1,12 @@ +package reviewme.question.repository; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import reviewme.question.domain.OptionItem; + +@Repository +public interface OptionItemRepository extends JpaRepository { + + List findAllByOptionGroupId(long optionGroupId); +} diff --git a/backend/src/main/java/reviewme/question/repository/Question2Repository.java b/backend/src/main/java/reviewme/question/repository/Question2Repository.java new file mode 100644 index 000000000..b0aa23747 --- /dev/null +++ b/backend/src/main/java/reviewme/question/repository/Question2Repository.java @@ -0,0 +1,17 @@ +package reviewme.question.repository; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import reviewme.question.domain.Question2; +import reviewme.question.domain.exception.QuestionNotFoundException; + +@Repository +public interface Question2Repository extends JpaRepository { + + Optional findById(long id); + + default Question2 getQuestionById(long id) { + return findById(id).orElseThrow(() -> new QuestionNotFoundException(id)); + } +} diff --git a/backend/src/main/java/reviewme/template/domain/exception/SectionNotFoundException.java b/backend/src/main/java/reviewme/template/domain/exception/SectionNotFoundException.java new file mode 100644 index 000000000..f5faf96c3 --- /dev/null +++ b/backend/src/main/java/reviewme/template/domain/exception/SectionNotFoundException.java @@ -0,0 +1,13 @@ +package reviewme.template.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.NotFoundException; + +@Slf4j +public class SectionNotFoundException extends NotFoundException { + + public SectionNotFoundException(long id) { + super("서버 내부에서 문제가 발생했어요. 서버에 문의해주세요."); + log.info("SectionNotFoundException is occurred - id: {}", id); + } +} diff --git a/backend/src/main/java/reviewme/template/repository/SectionRepository.java b/backend/src/main/java/reviewme/template/repository/SectionRepository.java new file mode 100644 index 000000000..e12b471a8 --- /dev/null +++ b/backend/src/main/java/reviewme/template/repository/SectionRepository.java @@ -0,0 +1,17 @@ +package reviewme.template.repository; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import reviewme.template.domain.Section; +import reviewme.template.domain.exception.SectionNotFoundException; + +@Repository +public interface SectionRepository extends JpaRepository { + + Optional
findById(long id); + + default Section getSectionById(long id) { + return findById(id).orElseThrow(() -> new SectionNotFoundException(id)); + } +} diff --git a/backend/src/main/java/reviewme/template/repository/TemplateRepository.java b/backend/src/main/java/reviewme/template/repository/TemplateRepository.java new file mode 100644 index 000000000..70c4c9a88 --- /dev/null +++ b/backend/src/main/java/reviewme/template/repository/TemplateRepository.java @@ -0,0 +1,12 @@ +package reviewme.template.repository; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import reviewme.template.domain.Template; + +@Repository +public interface TemplateRepository extends JpaRepository { + + Optional