From 8b40c1a10271d4e2886013e36b89c8f43ce89b42 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 08:45:13 +0900 Subject: [PATCH 01/16] =?UTF-8?q?feat:=20=EC=A7=80=EC=9B=90=EC=9E=90=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20API=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 --- .../form/service/dto/query/FormQuery.java | 2 + .../api/CentralFormApplicationApi.java | 13 +++ .../CentralFormApplicationController.java | 9 ++ .../dto/response/FormApplicationResponse.java | 75 +++++++++++++++ .../repository/FormAnswerRepository.java | 4 + .../FacadeCentralFormApplicationService.java | 2 + ...cadeCentralFormApplicationServiceImpl.java | 18 ++++ .../service/FormAnswerService.java | 4 + .../service/FormApplicationService.java | 2 + .../service/GeneralFormAnswerService.java | 5 + .../GeneralFormApplicationService.java | 5 + .../dto/query/FormApplicationQuery.java | 94 +++++++++++++++++++ 12 files changed, 233 insertions(+) create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/query/FormApplicationQuery.java diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormQuery.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormQuery.java index 00fe510c..1bdb2946 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormQuery.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormQuery.java @@ -20,6 +20,7 @@ public record FormQuery( @Builder public record FormFieldListQuery( + Long id, String question, FieldType type, List options, @@ -29,6 +30,7 @@ public record FormFieldListQuery( ) { public static FormFieldListQuery from(FormField formField) { return FormFieldListQuery.builder() + .id(formField.getId()) .question(formField.getQuestion()) .type(formField.getFieldType()) .options(formField.getOptions()) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java index adcd99ef..cc95479f 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.api; import ddingdong.ddingdongBE.auth.PrincipalDetails; +import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.FormApplicationResponse; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.MyFormApplicationPageResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -31,4 +32,16 @@ MyFormApplicationPageResponse getMyFormApplicationPage( @AuthenticationPrincipal PrincipalDetails principalDetails ); + @Operation(summary = "지원자 상세 조회 API") + @ApiResponse(responseCode = "200", description = "지원자 상세 조회 성공", + content = @Content(schema = @Schema(implementation = FormApplicationResponse.class))) + @ResponseStatus(HttpStatus.OK) + @SecurityRequirement(name = "AccessToken") + @GetMapping("/my/forms/{formId}/applications/{applicationId}") + FormApplicationResponse getFormApplication( + @PathVariable("formId") Long formId, + @PathVariable("applicationId") Long applicationId, + @AuthenticationPrincipal PrincipalDetails principalDetails + ); + } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java index f1f417a7..8160c7db 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java @@ -1,9 +1,11 @@ package ddingdong.ddingdongBE.domain.formapplication.controller; import ddingdong.ddingdongBE.auth.PrincipalDetails; +import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.FormApplicationResponse; import ddingdong.ddingdongBE.domain.formapplication.service.FacadeCentralFormApplicationService; import ddingdong.ddingdongBE.domain.formapplication.api.CentralFormApplicationApi; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.MyFormApplicationPageResponse; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.MyFormApplicationPageQuery; import ddingdong.ddingdongBE.domain.user.entity.User; import lombok.RequiredArgsConstructor; @@ -21,4 +23,11 @@ public MyFormApplicationPageResponse getMyFormApplicationPage(Long formId, int s MyFormApplicationPageQuery query = facadeCentralFormService.getMyFormApplicationPage(formId, user, size, currentCursorId); return MyFormApplicationPageResponse.from(query); } + + @Override + public FormApplicationResponse getFormApplication(Long formId, Long applicationId, PrincipalDetails principalDetails) { + User user = principalDetails.getUser(); + FormApplicationQuery query = facadeCentralFormService.getFormApplication(formId, applicationId, user); + return FormApplicationResponse.from(query); + } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java new file mode 100644 index 00000000..dd89d8c3 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java @@ -0,0 +1,75 @@ +package ddingdong.ddingdongBE.domain.formapplication.controller.dto.response; + +import ddingdong.ddingdongBE.domain.form.entity.FieldType; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery.FormFieldAnswerListQuery; + +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; + +@Builder +public record FormApplicationResponse ( + @Schema(description = "제출일시", example = "2025-01-01T00:00") + LocalDateTime submittedAt, + @Schema(description = "지원자 이름", example = "김띵동") + String name, + @Schema(description = "지원자 학번", example = "60201111") + String studentNumber, + @Schema(description = "지원자 학과", example = "융합소프트웨어학부") + String department, + @Schema(description = "status", example = "SUBMITTED") + FormApplicationStatus status, + @ArraySchema(schema = @Schema(implementation = FormFieldAnswerListResponse.class)) + List formFieldAnswers +){ + @Builder + record FormFieldAnswerListResponse ( + @Schema(description = "폼지 질문 ID", example = "1") + Long fieldId, + @Schema(description = "폼지 질문", example = "성별이 무엇입니까??") + String question, + @Schema(description = "폼지 질문 유형", example = "RADIO", allowableValues = {"CHECK_BOX", "RADIO", "TEXT", "LONG_TEXT", "FILE"}) + FieldType type, + @Schema(description = "폼지 지문", example = "[\"여성\", \"남성\"]") + List options, + @Schema(description = "필수 여부", example = "true") + Boolean required, + @Schema(description = "질문 순서", example = "1") + Integer order, + @Schema(description = "섹션", example = "공통") + String section, + @Schema(description = "질문 답변 값", example = "[\"지문1\"]") + List value + ) { + public static FormFieldAnswerListResponse from(FormFieldAnswerListQuery formFieldAnswerListQuery) { + return FormFieldAnswerListResponse.builder() + .question(formFieldAnswerListQuery.question()) + .type(formFieldAnswerListQuery.type()) + .options(formFieldAnswerListQuery.options()) + .required(formFieldAnswerListQuery.required()) + .order(formFieldAnswerListQuery.order()) + .section(formFieldAnswerListQuery.section()) + .value(formFieldAnswerListQuery.value()) + .build(); + } + } + public static FormApplicationResponse from(FormApplicationQuery formApplicationQuery) { + List responses = formApplicationQuery.formFieldAnswers().stream() + .map(FormFieldAnswerListResponse::from) + .toList(); + + return FormApplicationResponse.builder() + .submittedAt(formApplicationQuery.createdAt()) + .name(formApplicationQuery.name()) + .studentNumber(formApplicationQuery.studentNumber()) + .department(formApplicationQuery.department()) + .status(formApplicationQuery.status()) + .formFieldAnswers(responses) + .build(); + } +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/repository/FormAnswerRepository.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/repository/FormAnswerRepository.java index cad0ce6c..b1b190a9 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/repository/FormAnswerRepository.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/repository/FormAnswerRepository.java @@ -1,7 +1,11 @@ package ddingdong.ddingdongBE.domain.formapplication.repository; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface FormAnswerRepository extends JpaRepository { + List findAllByFormApplication(FormApplication formApplication); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java index 8f60134f..5cbb528a 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java @@ -1,5 +1,6 @@ package ddingdong.ddingdongBE.domain.formapplication.service; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.MyFormApplicationPageQuery; import ddingdong.ddingdongBE.domain.user.entity.User; @@ -7,4 +8,5 @@ public interface FacadeCentralFormApplicationService { MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId); + FormApplicationQuery getFormApplication(Long formId, Long applicationId, User user); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index 740f1333..12e195b6 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -2,6 +2,10 @@ import ddingdong.ddingdongBE.domain.club.entity.Club; import ddingdong.ddingdongBE.domain.club.service.ClubService; +import ddingdong.ddingdongBE.domain.form.entity.FormField; +import ddingdong.ddingdongBE.domain.form.service.FormFieldService; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.PagingQuery; import ddingdong.ddingdongBE.domain.form.entity.Form; import ddingdong.ddingdongBE.domain.form.service.FormService; @@ -25,6 +29,8 @@ public class FacadeCentralFormApplicationServiceImpl implements FacadeCentralFor private final ClubService clubService; private final FormService formService; private final FormApplicationService formApplicationService; + private final FormAnswerService formAnswerService; + private final FormFieldService formFieldService; @Override public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId) { @@ -44,6 +50,18 @@ public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User use PagingQuery pagingQuery = PagingQuery.of(currentCursorId, completeFormApplications, formApplicationPage.hasNext()); return MyFormApplicationPageQuery.of(formApplicationListQueries, pagingQuery); + } + @Override + public FormApplicationQuery getFormApplication(Long formId, Long applicationId, User user) { + Club club = clubService.getByUserId(user.getId()); + Form form = formService.getById(formId); + if (!form.getClub().equals(club)) { + throw new AccessDeniedException("권한이 없습니다."); + } + FormApplication formApplication = formApplicationService.getById(applicationId); + List formFields = formFieldService.findAllByForm(form); + List formAnswers = formAnswerService.getAllByApplication(formApplication); + return FormApplicationQuery.of(formApplication, formFields, formAnswers); } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormAnswerService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormAnswerService.java index bda789fb..56757747 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormAnswerService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormAnswerService.java @@ -1,10 +1,14 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; + import java.util.List; public interface FormAnswerService { void createAll(List formAnswers); + List getAllByApplication(FormApplication formApplication); + } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java index f4039f57..8aa459fe 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java @@ -8,4 +8,6 @@ public interface FormApplicationService { FormApplication create(FormApplication formApplication); Slice getFormApplicationPageByFormId(Long formId, int size, Long currentCursorId); + + FormApplication getById(Long applicationId); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormAnswerService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormAnswerService.java index ae2daad0..26443c3f 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormAnswerService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormAnswerService.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.repository.FormAnswerRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -21,4 +22,8 @@ public void createAll(List formAnswers) { formAnswerRepository.saveAll(formAnswers); } + @Override + public List getAllByApplication(FormApplication formApplication) { + return formAnswerRepository.findAllByFormApplication(formApplication); + } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java index fa55f547..00eb6864 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java @@ -31,6 +31,11 @@ public Slice getFormApplicationPageByFormId(Long formId, int si return buildSlice(formApplicationPages, size); } + @Override + public FormApplication getById(Long applicationId) { + return formApplicationRepository.findById(applicationId).orElse(null); + } + private Slice buildSlice(Slice originalSlice, int size) { List content = new ArrayList<>(originalSlice.getContent()); if (content.isEmpty()) { diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/query/FormApplicationQuery.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/query/FormApplicationQuery.java new file mode 100644 index 00000000..3d8ef106 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/query/FormApplicationQuery.java @@ -0,0 +1,94 @@ +package ddingdong.ddingdongBE.domain.formapplication.service.dto.query; + +import ddingdong.ddingdongBE.domain.form.entity.FieldType; + +import ddingdong.ddingdongBE.domain.form.entity.FormField; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormQuery.FormFieldListQuery; + +import lombok.Builder; + +import java.util.function.Function; +import java.util.stream.Collectors; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Builder +public record FormApplicationQuery ( + LocalDateTime createdAt, + String name, + String studentNumber, + String department, + FormApplicationStatus status, + List formFieldAnswers +) { + @Builder + public record FormAnswerListQuery ( + Long fieldId, + List value + ) { + public static FormAnswerListQuery from(FormAnswer formAnswer) { + return FormAnswerListQuery.builder() + .fieldId(formAnswer.getFormField().getId()) + .value(formAnswer.getValue()) + .build(); + } + } + @Builder + public record FormFieldAnswerListQuery ( + Long fieldId, + String question, + FieldType type, + List options, + Boolean required, + Integer order, + String section, + List value + ) { + public static FormFieldAnswerListQuery from(FormFieldListQuery formFieldListQuery, FormAnswerListQuery formAnswerListQuery) { + return FormFieldAnswerListQuery.builder() + .fieldId(formFieldListQuery.id()) + .question(formFieldListQuery.question()) + .type(formFieldListQuery.type()) + .options(formFieldListQuery.options()) + .required(formFieldListQuery.required()) + .order(formFieldListQuery.order()) + .section(formFieldListQuery.section()) + .value(formAnswerListQuery.value()) + .build(); + } + } + public static FormApplicationQuery of(FormApplication formApplication, List formFields, List formAnswers) { + List formFieldListQueries = formFields.stream() + .map(FormFieldListQuery::from) + .toList(); + List formAnswerListQueries = formAnswers.stream() + .map(FormAnswerListQuery::from) + .toList(); + Map answerMap = formAnswerListQueries.stream() + .collect(Collectors.toMap(FormAnswerListQuery::fieldId, Function.identity())); + List formFieldAnswerListQueries = formFieldListQueries.stream() + .map(fieldQuery -> { + FormAnswerListQuery answerQuery = answerMap.get(fieldQuery.id()); + if (answerQuery == null) { + answerQuery = FormAnswerListQuery.builder() + .fieldId(fieldQuery.id()) + .value(null) + .build(); + } + return FormFieldAnswerListQuery.from(fieldQuery, answerQuery); + }) + .collect(Collectors.toList()); + return FormApplicationQuery.builder() + .createdAt(formApplication.getCreatedAt()) + .name(formApplication.getName()) + .studentNumber(formApplication.getStudentNumber()) + .department(formApplication.getDepartment()) + .status(formApplication.getStatus()) + .formFieldAnswers(formFieldAnswerListQueries) + .build(); + } +} From 5ff484b477cc932a3cb8e0340cfb1817862afe73 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 09:10:03 +0900 Subject: [PATCH 02/16] =?UTF-8?q?fix:=20FormFieldAnswerListResponse.from?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20fieldId=20=EB=A7=A4=ED=95=91?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/dto/response/FormApplicationResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java index dd89d8c3..cecfbdbb 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/response/FormApplicationResponse.java @@ -48,6 +48,7 @@ record FormFieldAnswerListResponse ( ) { public static FormFieldAnswerListResponse from(FormFieldAnswerListQuery formFieldAnswerListQuery) { return FormFieldAnswerListResponse.builder() + .fieldId(formFieldAnswerListQuery.fieldId()) .question(formFieldAnswerListQuery.question()) .type(formFieldAnswerListQuery.type()) .options(formFieldAnswerListQuery.options()) From 2d22171271b7e90d88495f0e8cb773340fd864df Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 10:08:07 +0900 Subject: [PATCH 03/16] =?UTF-8?q?rename:=20FacadeCentralFormServiceImplTes?= =?UTF-8?q?t=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FacadeCentralFormServiceImplTest.java | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormServiceImplTest.java diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormServiceImplTest.java new file mode 100644 index 00000000..1c735ea6 --- /dev/null +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormServiceImplTest.java @@ -0,0 +1,263 @@ +package ddingdong.ddingdongBE.domain.form.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.navercorp.fixturemonkey.FixtureMonkey; +import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority; +import ddingdong.ddingdongBE.common.support.FixtureMonkeyFactory; +import ddingdong.ddingdongBE.common.support.TestContainerSupport; +import ddingdong.ddingdongBE.domain.club.entity.Club; +import ddingdong.ddingdongBE.domain.club.repository.ClubRepository; +import ddingdong.ddingdongBE.domain.form.entity.Form; +import ddingdong.ddingdongBE.domain.form.entity.FormField; +import ddingdong.ddingdongBE.domain.form.repository.FormFieldRepository; +import ddingdong.ddingdongBE.domain.form.repository.FormRepository; +import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand; +import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand; +import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand.UpdateFormFieldCommand; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormQuery; +import ddingdong.ddingdongBE.domain.user.entity.Role; +import ddingdong.ddingdongBE.domain.user.entity.User; +import ddingdong.ddingdongBE.domain.user.repository.UserRepository; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class FacadeCentralFormServiceImplTest extends TestContainerSupport { + + @Autowired + private FormService formService; + + @Autowired + private FormRepository formRepository; + + @Autowired + private FacadeCentralFormService facadeCentralFormService; + + @Autowired + private ClubRepository clubRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private FormFieldRepository formFieldRepository; + + private static final FixtureMonkey fixtureMonkey = FixtureMonkeyFactory.getNotNullBuilderIntrospectorMonkey(); + + @DisplayName("폼지와 폼지 질문을 생성할 수 있다.") + @Test + void createForm() { + // given + User user = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.save(user); + Club club = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club); + CreateFormCommand createFormCommand = fixtureMonkey.giveMeBuilder(CreateFormCommand.class) + .set("user", savedUser) + .sample(); + // when + facadeCentralFormService.createForm(createFormCommand); + // then + List
form = formRepository.findAll(); + List formFields = formFieldRepository.findAll(); + + assertThat(form).isNotEmpty(); + assertThat(formFields).isNotEmpty(); + } + + @DisplayName("폼지와 폼지 질문을 수정할 수 있다.") + @Test + void updateForm() { + // given + User user = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.save(user); + Club club = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club); + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("club", club) + .sample(); + Form savedForm = formService.create(form); + UpdateFormCommand updateFormCommand = fixtureMonkey.giveMeBuilder(UpdateFormCommand.class) + .set("title", "수정된 제목") + .set("description", "수정된 설명") + .set("formId", savedForm.getId()) + .set("formFieldCommands", List.of( + fixtureMonkey.giveMeBuilder(UpdateFormFieldCommand.class) + .set("question", "수정된 질문") + .sample()) + ) + .sample(); + // when + facadeCentralFormService.updateForm(updateFormCommand); + // then + Form found = formRepository.findById(savedForm.getId()).orElse(null); + List formFields = formFieldRepository.findAllByForm(found); + assertThat(found).isNotNull(); + assertThat(found.getTitle()).isEqualTo("수정된 제목"); + assertThat(found.getDescription()).isEqualTo("수정된 설명"); + assertThat(formFields).isNotEmpty(); + assertThat(formFields.get(0).getQuestion()).isEqualTo("수정된 질문"); + + } + + @DisplayName("폼지를 삭제할 수 있다. 폼지를 삭제하면, 하위 폼지 필드도 모두 삭제된다.") + @Test + void deleteForm() { + // given + User user = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.save(user); + Club club = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club); + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("club", club) + .sample(); + Form savedForm = formService.create(form); + // when + facadeCentralFormService.deleteForm(savedForm.getId(), user); + // then + Form found = formRepository.findById(savedForm.getId()).orElse(null); + List formFields = formFieldRepository.findAllByForm(savedForm); + assertThat(found).isNull(); + assertThat(formFields).isEmpty(); + } + + @DisplayName("Club은 자신의 폼지가 아닌 폼지를 삭제할 수 없다.") + @Test + void validateEqualsClub() { + // given + User user = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.save(user); + Club club = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club); + User user2 = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 2L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser2 = userRepository.save(user2); + Club club2 = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 2L) + .set("user", savedUser2) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club2); + + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("club", club) + .sample(); + Form savedForm = formService.create(form); + // when //then + assertThrows(NonHaveAuthority.class, () -> { + facadeCentralFormService.deleteForm(savedForm.getId(), user2); + }); + } + + @DisplayName("동아리는 자신의 폼지를 전부 조회할 수 있다.") + @Test + void getAllMyForm() { + // given + User user = fixtureMonkey.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.save(user); + Club club = fixtureMonkey.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + clubRepository.save(club); + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("title", "제목1") + .set("club", club) + .sample(); + Form form2 = fixtureMonkey.giveMeBuilder(Form.class) + .set("title", "제목2") + .set("club", club) + .sample(); + formService.create(form); + formService.create(form2); + + // when + List queries = facadeCentralFormService.getAllMyForm(savedUser); + // then + assertThat(queries).isNotEmpty(); + assertThat(queries.size()).isEqualTo(2); + assertThat(queries.get(0).title()).isEqualTo("제목1"); + assertThat(queries.get(1).title()).isEqualTo("제목2"); + + } + + @DisplayName("동아리는 폼지를 상세조회 할 수 있다.") + @Test + void getForm() { + // given + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("id", 1L) + .set("title", "제목1") + .set("club", null) + .sample(); + Form form2 = fixtureMonkey.giveMeBuilder(Form.class) + .set("id", 2L) + .set("title", "제목2") + .set("club", null) + .sample(); + formService.create(form); + formService.create(form2); + // when + FormQuery formQuery = facadeCentralFormService.getForm(1L); + // then + assertThat(formQuery.title()).isEqualTo("제목1"); + } +} From 9fb14dac867a0f226192b8635073d42159c7eedb Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 10:09:00 +0900 Subject: [PATCH 04/16] =?UTF-8?q?test:=20=EC=A7=80=EC=9B=90=EC=9E=90=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=ED=95=98=EA=B8=B0=20API?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...CentralFormApplicationServiceImplTest.java | 252 +++--------------- 1 file changed, 36 insertions(+), 216 deletions(-) diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java index 1c735ea6..63ecd96d 100644 --- a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java @@ -1,263 +1,83 @@ package ddingdong.ddingdongBE.domain.form.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; - import com.navercorp.fixturemonkey.FixtureMonkey; -import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority; import ddingdong.ddingdongBE.common.support.FixtureMonkeyFactory; import ddingdong.ddingdongBE.common.support.TestContainerSupport; import ddingdong.ddingdongBE.domain.club.entity.Club; import ddingdong.ddingdongBE.domain.club.repository.ClubRepository; import ddingdong.ddingdongBE.domain.form.entity.Form; -import ddingdong.ddingdongBE.domain.form.entity.FormField; -import ddingdong.ddingdongBE.domain.form.repository.FormFieldRepository; import ddingdong.ddingdongBE.domain.form.repository.FormRepository; -import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand; -import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand; -import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand.UpdateFormFieldCommand; -import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery; -import ddingdong.ddingdongBE.domain.form.service.dto.query.FormQuery; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; +import ddingdong.ddingdongBE.domain.formapplication.service.FacadeCentralFormApplicationService; +import ddingdong.ddingdongBE.domain.formapplication.service.FormApplicationService; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.user.entity.Role; import ddingdong.ddingdongBE.domain.user.entity.User; import ddingdong.ddingdongBE.domain.user.repository.UserRepository; -import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -@SpringBootTest -class FacadeCentralFormServiceImplTest extends TestContainerSupport { - - @Autowired - private FormService formService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; - @Autowired - private FormRepository formRepository; +@SpringBootTest +class FacadeCentralFormApplicationServiceImplTest extends TestContainerSupport { @Autowired - private FacadeCentralFormService facadeCentralFormService; + private UserRepository userRepository; @Autowired private ClubRepository clubRepository; @Autowired - private UserRepository userRepository; + private FormRepository formRepository; @Autowired - private FormFieldRepository formFieldRepository; - - private static final FixtureMonkey fixtureMonkey = FixtureMonkeyFactory.getNotNullBuilderIntrospectorMonkey(); + private FormApplicationService formApplicationService; - @DisplayName("폼지와 폼지 질문을 생성할 수 있다.") - @Test - void createForm() { - // given - User user = fixtureMonkey.giveMeBuilder(User.class) - .set("id", 1L) - .set("Role", Role.CLUB) - .set("deletedAt", null) - .sample(); - User savedUser = userRepository.save(user); - Club club = fixtureMonkey.giveMeBuilder(Club.class) - .set("id", 1L) - .set("user", savedUser) - .set("score", null) - .set("clubMembers", null) - .set("deletedAt", null) - .sample(); - clubRepository.save(club); - CreateFormCommand createFormCommand = fixtureMonkey.giveMeBuilder(CreateFormCommand.class) - .set("user", savedUser) - .sample(); - // when - facadeCentralFormService.createForm(createFormCommand); - // then - List form = formRepository.findAll(); - List formFields = formFieldRepository.findAll(); + @Autowired + private FacadeCentralFormApplicationService facadeCentralFormApplicationService; - assertThat(form).isNotEmpty(); - assertThat(formFields).isNotEmpty(); - } + private static final FixtureMonkey fixture = FixtureMonkeyFactory.getNotNullBuilderIntrospectorMonkey(); - @DisplayName("폼지와 폼지 질문을 수정할 수 있다.") + @DisplayName("동아리는 지원자 응답을 상세조회 할 수 있다.") @Test - void updateForm() { + void getFormApplication() { // given - User user = fixtureMonkey.giveMeBuilder(User.class) + User user = fixture.giveMeBuilder(User.class) .set("id", 1L) .set("Role", Role.CLUB) .set("deletedAt", null) .sample(); - User savedUser = userRepository.save(user); - Club club = fixtureMonkey.giveMeBuilder(Club.class) + User savedUser = userRepository.saveAndFlush(user); + Club club = fixture.giveMeBuilder(Club.class) .set("id", 1L) .set("user", savedUser) .set("score", null) .set("clubMembers", null) .set("deletedAt", null) .sample(); - clubRepository.save(club); - Form form = fixtureMonkey.giveMeBuilder(Form.class) - .set("club", club) - .sample(); - Form savedForm = formService.create(form); - UpdateFormCommand updateFormCommand = fixtureMonkey.giveMeBuilder(UpdateFormCommand.class) - .set("title", "수정된 제목") - .set("description", "수정된 설명") - .set("formId", savedForm.getId()) - .set("formFieldCommands", List.of( - fixtureMonkey.giveMeBuilder(UpdateFormFieldCommand.class) - .set("question", "수정된 질문") - .sample()) - ) - .sample(); - // when - facadeCentralFormService.updateForm(updateFormCommand); - // then - Form found = formRepository.findById(savedForm.getId()).orElse(null); - List formFields = formFieldRepository.findAllByForm(found); - assertThat(found).isNotNull(); - assertThat(found.getTitle()).isEqualTo("수정된 제목"); - assertThat(found.getDescription()).isEqualTo("수정된 설명"); - assertThat(formFields).isNotEmpty(); - assertThat(formFields.get(0).getQuestion()).isEqualTo("수정된 질문"); - - } - - @DisplayName("폼지를 삭제할 수 있다. 폼지를 삭제하면, 하위 폼지 필드도 모두 삭제된다.") - @Test - void deleteForm() { - // given - User user = fixtureMonkey.giveMeBuilder(User.class) - .set("id", 1L) - .set("Role", Role.CLUB) - .set("deletedAt", null) - .sample(); - User savedUser = userRepository.save(user); - Club club = fixtureMonkey.giveMeBuilder(Club.class) + Club savedClub = clubRepository.saveAndFlush(club); + Form form = fixture.giveMeBuilder(Form.class) .set("id", 1L) - .set("user", savedUser) - .set("score", null) - .set("clubMembers", null) - .set("deletedAt", null) - .sample(); - clubRepository.save(club); - Form form = fixtureMonkey.giveMeBuilder(Form.class) - .set("club", club) - .sample(); - Form savedForm = formService.create(form); - // when - facadeCentralFormService.deleteForm(savedForm.getId(), user); - // then - Form found = formRepository.findById(savedForm.getId()).orElse(null); - List formFields = formFieldRepository.findAllByForm(savedForm); - assertThat(found).isNull(); - assertThat(formFields).isEmpty(); - } - - @DisplayName("Club은 자신의 폼지가 아닌 폼지를 삭제할 수 없다.") - @Test - void validateEqualsClub() { - // given - User user = fixtureMonkey.giveMeBuilder(User.class) - .set("id", 1L) - .set("Role", Role.CLUB) - .set("deletedAt", null) - .sample(); - User savedUser = userRepository.save(user); - Club club = fixtureMonkey.giveMeBuilder(Club.class) - .set("id", 1L) - .set("user", savedUser) - .set("score", null) - .set("clubMembers", null) - .set("deletedAt", null) - .sample(); - clubRepository.save(club); - User user2 = fixtureMonkey.giveMeBuilder(User.class) - .set("id", 2L) - .set("Role", Role.CLUB) - .set("deletedAt", null) - .sample(); - User savedUser2 = userRepository.save(user2); - Club club2 = fixtureMonkey.giveMeBuilder(Club.class) - .set("id", 2L) - .set("user", savedUser2) - .set("score", null) - .set("clubMembers", null) - .set("deletedAt", null) - .sample(); - clubRepository.save(club2); - - Form form = fixtureMonkey.giveMeBuilder(Form.class) - .set("club", club) - .sample(); - Form savedForm = formService.create(form); - // when //then - assertThrows(NonHaveAuthority.class, () -> { - facadeCentralFormService.deleteForm(savedForm.getId(), user2); - }); - } - - @DisplayName("동아리는 자신의 폼지를 전부 조회할 수 있다.") - @Test - void getAllMyForm() { - // given - User user = fixtureMonkey.giveMeBuilder(User.class) - .set("id", 1L) - .set("Role", Role.CLUB) - .set("deletedAt", null) - .sample(); - User savedUser = userRepository.save(user); - Club club = fixtureMonkey.giveMeBuilder(Club.class) - .set("id", 1L) - .set("user", savedUser) - .set("score", null) - .set("clubMembers", null) - .set("deletedAt", null) - .sample(); - clubRepository.save(club); - Form form = fixtureMonkey.giveMeBuilder(Form.class) .set("title", "제목1") - .set("club", club) - .sample(); - Form form2 = fixtureMonkey.giveMeBuilder(Form.class) - .set("title", "제목2") - .set("club", club) - .sample(); - formService.create(form); - formService.create(form2); - + .set("club", savedClub) + .sample(); + Form savedForm = formRepository.saveAndFlush(form); + FormApplication formApplication = FormApplication.builder() + .name("지원자1") + .studentNumber("60201115") + .department("융합소프트웨어학부") + .status(FormApplicationStatus.SUBMITTED) + .form(savedForm) + .build(); + FormApplication savedApplication = formApplicationService.create(formApplication); // when - List queries = facadeCentralFormService.getAllMyForm(savedUser); - // then - assertThat(queries).isNotEmpty(); - assertThat(queries.size()).isEqualTo(2); - assertThat(queries.get(0).title()).isEqualTo("제목1"); - assertThat(queries.get(1).title()).isEqualTo("제목2"); - - } - - @DisplayName("동아리는 폼지를 상세조회 할 수 있다.") - @Test - void getForm() { - // given - Form form = fixtureMonkey.giveMeBuilder(Form.class) - .set("id", 1L) - .set("title", "제목1") - .set("club", null) - .sample(); - Form form2 = fixtureMonkey.giveMeBuilder(Form.class) - .set("id", 2L) - .set("title", "제목2") - .set("club", null) - .sample(); - formService.create(form); - formService.create(form2); - // when - FormQuery formQuery = facadeCentralFormService.getForm(1L); + FormApplicationQuery formApplicationQuery = facadeCentralFormApplicationService.getFormApplication(1L, savedApplication.getId(), savedUser); // then - assertThat(formQuery.title()).isEqualTo("제목1"); + assertThat(formApplicationQuery.name()).isEqualTo("지원자1"); } -} +} \ No newline at end of file From 421e3ef96c730f3240f844cb128f107b7b637298 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 14:22:58 +0900 Subject: [PATCH 05/16] =?UTF-8?q?feat:=20=EC=A7=80=EC=9B=90=EC=9E=90=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=83=81=ED=83=9C=20=EC=88=98=EC=A0=95=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/CentralFormApplicationApi.java | 13 +++++++++++ .../CentralFormApplicationController.java | 13 ++++++++--- .../UserFormApplicationController.java | 2 +- .../UpdateFormApplicationStatusRequest.java | 22 +++++++++++++++++++ .../entity/FormApplication.java | 4 ++++ .../FacadeCentralFormApplicationService.java | 3 +++ ...cadeCentralFormApplicationServiceImpl.java | 13 +++++++++++ .../service/FormApplicationService.java | 3 +++ .../GeneralFormApplicationService.java | 7 ++++++ .../UpdateFormApplicationStatusCommand.java | 22 +++++++++++++++++++ 10 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java index cc95479f..1ffc9a41 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.api; import ddingdong.ddingdongBE.auth.PrincipalDetails; +import ddingdong.ddingdongBE.domain.formapplication.controller.dto.request.UpdateFormApplicationStatusRequest; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.FormApplicationResponse; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.MyFormApplicationPageResponse; import io.swagger.v3.oas.annotations.Operation; @@ -10,6 +11,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @@ -44,4 +46,15 @@ FormApplicationResponse getFormApplication( @AuthenticationPrincipal PrincipalDetails principalDetails ); + @Operation(summary = "지원자 상태 수정 API") + @ApiResponse(responseCode = "204", description = "지원자 상태 수정 성공") + @ResponseStatus(HttpStatus.NO_CONTENT) + @SecurityRequirement(name = "AccessToken") + @PatchMapping("/my/forms/{formId}/applications/{applicationId}") + void updateFormApplicationStatus( + @PathVariable("formId") Long formId, + @PathVariable("applicationId") Long applicationId, + @AuthenticationPrincipal PrincipalDetails principalDetails, + @Valid @RequestBody UpdateFormApplicationStatusRequest request + ); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java index 8160c7db..86a8b3af 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.controller; import ddingdong.ddingdongBE.auth.PrincipalDetails; +import ddingdong.ddingdongBE.domain.formapplication.controller.dto.request.UpdateFormApplicationStatusRequest; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.response.FormApplicationResponse; import ddingdong.ddingdongBE.domain.formapplication.service.FacadeCentralFormApplicationService; import ddingdong.ddingdongBE.domain.formapplication.api.CentralFormApplicationApi; @@ -15,19 +16,25 @@ @RequiredArgsConstructor public class CentralFormApplicationController implements CentralFormApplicationApi { - private final FacadeCentralFormApplicationService facadeCentralFormService; + private final FacadeCentralFormApplicationService facadeCentralFormApplicationService; @Override public MyFormApplicationPageResponse getMyFormApplicationPage(Long formId, int size, Long currentCursorId, PrincipalDetails principalDetails) { User user = principalDetails.getUser(); - MyFormApplicationPageQuery query = facadeCentralFormService.getMyFormApplicationPage(formId, user, size, currentCursorId); + MyFormApplicationPageQuery query = facadeCentralFormApplicationService.getMyFormApplicationPage(formId, user, size, currentCursorId); return MyFormApplicationPageResponse.from(query); } @Override public FormApplicationResponse getFormApplication(Long formId, Long applicationId, PrincipalDetails principalDetails) { User user = principalDetails.getUser(); - FormApplicationQuery query = facadeCentralFormService.getFormApplication(formId, applicationId, user); + FormApplicationQuery query = facadeCentralFormApplicationService.getFormApplication(formId, applicationId, user); return FormApplicationResponse.from(query); } + + @Override + public void updateFormApplicationStatus(Long formId, Long applicationId, PrincipalDetails principalDetails, UpdateFormApplicationStatusRequest request) { + User user = principalDetails.getUser(); + facadeCentralFormApplicationService.updateStatus(request.toCommand(formId, applicationId, user)); + } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java index 9359b927..1c987805 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java @@ -13,7 +13,7 @@ public class UserFormApplicationController implements UserFormApplicationApi { private final FacadeUserFormService facadeUserFormService; @Override - public void createFormResponse(Long formId, CreateFormApplicationRequest createFormApplicationRequest) { + public void createFormApplication(Long formId, CreateFormApplicationRequest createFormApplicationRequest) { facadeUserFormService.createFormApplication(createFormApplicationRequest.toCommand(formId)); } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java new file mode 100644 index 00000000..0d0aa6ad --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java @@ -0,0 +1,22 @@ +package ddingdong.ddingdongBE.domain.formapplication.controller.dto.request; + +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; +import ddingdong.ddingdongBE.domain.user.entity.User; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; + +public record UpdateFormApplicationStatusRequest( + @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") + @Schema(description = "수정할 지원자 상태", example = "FIRST_PASS") + FormApplicationStatus status +) { + public UpdateFormApplicationStatusCommand toCommand(Long formId, Long applicationId, User user) { + return UpdateFormApplicationStatusCommand.builder() + .formId(formId) + .applicationId(applicationId) + .status(status) + .user(user) + .build(); + } +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java index 7fa2f192..49e2bf89 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java @@ -41,4 +41,8 @@ private FormApplication(String name, String studentNumber, String department, Fo this.status = status; this.form = form; } + + public void update(FormApplicationStatus status) { + this.status = status; + } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java index 5cbb528a..ea642ac7 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationService.java @@ -1,5 +1,6 @@ package ddingdong.ddingdongBE.domain.formapplication.service; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.MyFormApplicationPageQuery; import ddingdong.ddingdongBE.domain.user.entity.User; @@ -9,4 +10,6 @@ public interface FacadeCentralFormApplicationService { MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId); FormApplicationQuery getFormApplication(Long formId, Long applicationId, User user); + + void updateStatus(UpdateFormApplicationStatusCommand command); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index 12e195b6..3d47c65b 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -5,6 +5,7 @@ import ddingdong.ddingdongBE.domain.form.entity.FormField; import ddingdong.ddingdongBE.domain.form.service.FormFieldService; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.PagingQuery; import ddingdong.ddingdongBE.domain.form.entity.Form; @@ -64,4 +65,16 @@ public FormApplicationQuery getFormApplication(Long formId, Long applicationId, List formAnswers = formAnswerService.getAllByApplication(formApplication); return FormApplicationQuery.of(formApplication, formFields, formAnswers); } + + @Transactional + @Override + public void updateStatus(UpdateFormApplicationStatusCommand command) { + Club club = clubService.getByUserId(command.user().getId()); + Form form = formService.getById(command.formId()); + if (!form.getClub().equals(club)) { + throw new AccessDeniedException("권한이 없습니다."); + } + FormApplication formApplication = formApplicationService.getById(command.applicationId()); + formApplicationService.updateStatus(command.applicationId(), command.status()); + } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java index 8aa459fe..242dd81f 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import org.springframework.data.domain.Slice; public interface FormApplicationService { @@ -10,4 +11,6 @@ public interface FormApplicationService { Slice getFormApplicationPageByFormId(Long formId, int size, Long currentCursorId); FormApplication getById(Long applicationId); + + void updateStatus(Long applicationId, FormApplicationStatus formApplicationStatus); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java index 00eb6864..be6221b5 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java @@ -1,6 +1,7 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import ddingdong.ddingdongBE.domain.formapplication.repository.FormApplicationRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; @@ -36,6 +37,12 @@ public FormApplication getById(Long applicationId) { return formApplicationRepository.findById(applicationId).orElse(null); } + @Override + public void updateStatus(Long applicationId, FormApplicationStatus status) { + FormApplication formApplication = formApplicationRepository.findById(applicationId).orElse(null); + formApplication.update(status); + } + private Slice buildSlice(Slice originalSlice, int size) { List content = new ArrayList<>(originalSlice.getContent()); if (content.isEmpty()) { diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java new file mode 100644 index 00000000..5da78081 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java @@ -0,0 +1,22 @@ +package ddingdong.ddingdongBE.domain.formapplication.service.dto.command; + +import ddingdong.ddingdongBE.domain.form.entity.Form; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; +import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; +import ddingdong.ddingdongBE.domain.user.entity.User; +import lombok.Builder; + +@Builder +public record UpdateFormApplicationStatusCommand( + Long formId, + Long applicationId, + FormApplicationStatus status, + User user +) { + public FormApplication toEntity(Form form) { + return FormApplication.builder() + .form(form) + .status(status) + .build(); + } +} From 1b78f1be1bcbf7def02a4178c2a3dabff34488dd Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 14:24:21 +0900 Subject: [PATCH 06/16] =?UTF-8?q?refactor:=20UserFormApplicationApi=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전에 FormResponse에서 FormApplication으로 변경했을 때 미처 변경하지 못한 부분 변경했습니다. --- .../domain/formapplication/api/UserFormApplicationApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/UserFormApplicationApi.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/UserFormApplicationApi.java index 39f989af..253d5069 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/UserFormApplicationApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/UserFormApplicationApi.java @@ -16,7 +16,7 @@ public interface UserFormApplicationApi { @ApiResponse(responseCode = "201", description = "지원하기 성공") @ResponseStatus(HttpStatus.CREATED) @PostMapping("/forms/{formId}/applications") - void createFormResponse( + void createFormApplication( @PathVariable Long formId, @Valid @RequestBody CreateFormApplicationRequest request ); From c23e2016871e075c5b2b36a44ccf2bf4817d6b80 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 15:29:42 +0900 Subject: [PATCH 07/16] =?UTF-8?q?test:=20=EC=A7=80=EC=9B=90=EC=9E=90=20?= =?UTF-8?q?=EA=B0=9C=EC=9D=B8=20=EC=83=81=ED=83=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...CentralFormApplicationServiceImplTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java index 63ecd96d..21cd984a 100644 --- a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java @@ -7,10 +7,12 @@ import ddingdong.ddingdongBE.domain.club.repository.ClubRepository; import ddingdong.ddingdongBE.domain.form.entity.Form; import ddingdong.ddingdongBE.domain.form.repository.FormRepository; +import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import ddingdong.ddingdongBE.domain.formapplication.service.FacadeCentralFormApplicationService; import ddingdong.ddingdongBE.domain.formapplication.service.FormApplicationService; +import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.user.entity.Role; import ddingdong.ddingdongBE.domain.user.entity.User; @@ -80,4 +82,51 @@ void getFormApplication() { // then assertThat(formApplicationQuery.name()).isEqualTo("지원자1"); } + + @DisplayName("동아리는 지원자의 상태를 수정할 수 있다.") + @Test + void updateFormApplicationStatus() { + // given + User user = fixture.giveMeBuilder(User.class) + .set("id", 1L) + .set("Role", Role.CLUB) + .set("deletedAt", null) + .sample(); + User savedUser = userRepository.saveAndFlush(user); + Club club = fixture.giveMeBuilder(Club.class) + .set("id", 1L) + .set("user", savedUser) + .set("score", null) + .set("clubMembers", null) + .set("deletedAt", null) + .sample(); + Club savedClub = clubRepository.saveAndFlush(club); + Form form = fixture.giveMeBuilder(Form.class) + .set("id", 1L) + .set("title", "제목1") + .set("club", savedClub) + .sample(); + Form savedForm = formRepository.saveAndFlush(form); + FormApplication formApplication = FormApplication.builder() + .name("지원자1") + .studentNumber("60201115") + .department("융합소프트웨어학부") + .status(FormApplicationStatus.SUBMITTED) + .form(savedForm) + .build(); + FormApplication savedApplication = formApplicationService.create(formApplication); + UpdateFormApplicationStatusCommand command = fixture.giveMeBuilder(UpdateFormApplicationStatusCommand.class) + .set("formId", savedForm.getId()) + .set("applicationId", savedApplication.getId()) + .set("status", FormApplicationStatus.FIRST_PASS) + .set("user", savedUser) + .sample(); + // when + facadeCentralFormApplicationService.updateStatus(command); + // then + assertThat(savedApplication.getName()).isEqualTo("지원자1"); + assertThat(savedApplication.getStudentNumber()).isEqualTo("60201115"); + assertThat(formApplication.getStatus()).isEqualTo(FormApplicationStatus.FIRST_PASS); + } + } \ No newline at end of file From 6079928bdc7e98de30bed266572cbb3b7a7933ea Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 16:01:34 +0900 Subject: [PATCH 08/16] =?UTF-8?q?style:=20API=20=EC=9A=94=EC=95=BD=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/formapplication/api/CentralFormApplicationApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java index 1ffc9a41..6212b8d1 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java @@ -46,7 +46,7 @@ FormApplicationResponse getFormApplication( @AuthenticationPrincipal PrincipalDetails principalDetails ); - @Operation(summary = "지원자 상태 수정 API") + @Operation(summary = "지원자 개인 상태 수정 API") @ApiResponse(responseCode = "204", description = "지원자 상태 수정 성공") @ResponseStatus(HttpStatus.NO_CONTENT) @SecurityRequirement(name = "AccessToken") From 3808c28030864a5aa4e316bfadee552a40303aaa Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Wed, 5 Feb 2025 17:40:00 +0900 Subject: [PATCH 09/16] =?UTF-8?q?refactor:=20form=20ownership=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...cadeCentralFormApplicationServiceImpl.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index 3d47c65b..d9e1f503 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -1,7 +1,5 @@ package ddingdong.ddingdongBE.domain.formapplication.service; -import ddingdong.ddingdongBE.domain.club.entity.Club; -import ddingdong.ddingdongBE.domain.club.service.ClubService; import ddingdong.ddingdongBE.domain.form.entity.FormField; import ddingdong.ddingdongBE.domain.form.service.FormFieldService; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; @@ -16,7 +14,6 @@ import ddingdong.ddingdongBE.domain.user.entity.User; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Slice; -import org.springframework.security.access.AccessDeniedException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,7 +24,6 @@ @Transactional(readOnly = true) public class FacadeCentralFormApplicationServiceImpl implements FacadeCentralFormApplicationService { - private final ClubService clubService; private final FormService formService; private final FormApplicationService formApplicationService; private final FormAnswerService formAnswerService; @@ -35,11 +31,6 @@ public class FacadeCentralFormApplicationServiceImpl implements FacadeCentralFor @Override public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId) { - Club club = clubService.getByUserId(user.getId()); - Form form = formService.getById(formId); - if (!form.getClub().equals(club)) { - throw new AccessDeniedException("권한이 없습니다."); - } Slice formApplicationPage = formApplicationService.getFormApplicationPageByFormId(formId, size, currentCursorId); if (formApplicationPage == null) { return MyFormApplicationPageQuery.createEmpty(); @@ -55,11 +46,7 @@ public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User use @Override public FormApplicationQuery getFormApplication(Long formId, Long applicationId, User user) { - Club club = clubService.getByUserId(user.getId()); Form form = formService.getById(formId); - if (!form.getClub().equals(club)) { - throw new AccessDeniedException("권한이 없습니다."); - } FormApplication formApplication = formApplicationService.getById(applicationId); List formFields = formFieldService.findAllByForm(form); List formAnswers = formAnswerService.getAllByApplication(formApplication); @@ -69,12 +56,6 @@ public FormApplicationQuery getFormApplication(Long formId, Long applicationId, @Transactional @Override public void updateStatus(UpdateFormApplicationStatusCommand command) { - Club club = clubService.getByUserId(command.user().getId()); - Form form = formService.getById(command.formId()); - if (!form.getClub().equals(club)) { - throw new AccessDeniedException("권한이 없습니다."); - } - FormApplication formApplication = formApplicationService.getById(command.applicationId()); formApplicationService.updateStatus(command.applicationId(), command.status()); } } From d6e28aeb8d23061d5dc2234df5d26a1ba2ab0a9d Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Thu, 6 Feb 2025 16:19:13 +0900 Subject: [PATCH 10/16] =?UTF-8?q?fix:=20=EC=A7=80=EC=9B=90=EC=9E=90=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=88=98=EC=A0=95=20API=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formapplication/api/CentralFormApplicationApi.java | 5 ++--- .../controller/CentralFormApplicationController.java | 4 ++-- .../request/UpdateFormApplicationStatusRequest.java | 10 ++++++++-- .../FacadeCentralFormApplicationServiceImpl.java | 6 +++++- .../service/FormApplicationService.java | 5 +++-- .../service/GeneralFormApplicationService.java | 6 ++---- .../command/UpdateFormApplicationStatusCommand.java | 4 +++- 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java index 6212b8d1..808fb61e 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/api/CentralFormApplicationApi.java @@ -46,14 +46,13 @@ FormApplicationResponse getFormApplication( @AuthenticationPrincipal PrincipalDetails principalDetails ); - @Operation(summary = "지원자 개인 상태 수정 API") + @Operation(summary = "지원자 상태 수정 API") @ApiResponse(responseCode = "204", description = "지원자 상태 수정 성공") @ResponseStatus(HttpStatus.NO_CONTENT) @SecurityRequirement(name = "AccessToken") - @PatchMapping("/my/forms/{formId}/applications/{applicationId}") + @PatchMapping("/my/forms/{formId}/applications") void updateFormApplicationStatus( @PathVariable("formId") Long formId, - @PathVariable("applicationId") Long applicationId, @AuthenticationPrincipal PrincipalDetails principalDetails, @Valid @RequestBody UpdateFormApplicationStatusRequest request ); diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java index 86a8b3af..38b950b9 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/CentralFormApplicationController.java @@ -33,8 +33,8 @@ public FormApplicationResponse getFormApplication(Long formId, Long applicationI } @Override - public void updateFormApplicationStatus(Long formId, Long applicationId, PrincipalDetails principalDetails, UpdateFormApplicationStatusRequest request) { + public void updateFormApplicationStatus(Long formId, PrincipalDetails principalDetails, UpdateFormApplicationStatusRequest request) { User user = principalDetails.getUser(); - facadeCentralFormApplicationService.updateStatus(request.toCommand(formId, applicationId, user)); + facadeCentralFormApplicationService.updateStatus(request.toCommand(formId, user)); } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java index 0d0aa6ad..6312aba3 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java @@ -6,15 +6,21 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; +import java.util.List; + public record UpdateFormApplicationStatusRequest( + @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") + @Schema(description = "수정할 지원자 상태", example = "FIRST_PASS") + List applicationIds, + @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") @Schema(description = "수정할 지원자 상태", example = "FIRST_PASS") FormApplicationStatus status ) { - public UpdateFormApplicationStatusCommand toCommand(Long formId, Long applicationId, User user) { + public UpdateFormApplicationStatusCommand toCommand(Long formId, User user) { return UpdateFormApplicationStatusCommand.builder() .formId(formId) - .applicationId(applicationId) + .applicationIds(applicationIds) .status(status) .user(user) .build(); diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index d9e1f503..a44fb4f2 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -3,6 +3,7 @@ import ddingdong.ddingdongBE.domain.form.entity.FormField; import ddingdong.ddingdongBE.domain.form.service.FormFieldService; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; +import ddingdong.ddingdongBE.domain.formapplication.repository.FormApplicationRepository; import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.PagingQuery; @@ -28,6 +29,7 @@ public class FacadeCentralFormApplicationServiceImpl implements FacadeCentralFor private final FormApplicationService formApplicationService; private final FormAnswerService formAnswerService; private final FormFieldService formFieldService; + private final FormApplicationRepository formApplicationRepository; @Override public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId) { @@ -56,6 +58,8 @@ public FormApplicationQuery getFormApplication(Long formId, Long applicationId, @Transactional @Override public void updateStatus(UpdateFormApplicationStatusCommand command) { - formApplicationService.updateStatus(command.applicationId(), command.status()); + List formApplications = formApplicationService.getAllById(command.applicationIds()); + formApplications.forEach(formApplication -> formApplication.update(command.status())); + formApplicationRepository.saveAll(formApplications); } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java index 242dd81f..fd9d3691 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FormApplicationService.java @@ -1,9 +1,10 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; -import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import org.springframework.data.domain.Slice; +import java.util.List; + public interface FormApplicationService { FormApplication create(FormApplication formApplication); @@ -12,5 +13,5 @@ public interface FormApplicationService { FormApplication getById(Long applicationId); - void updateStatus(Long applicationId, FormApplicationStatus formApplicationStatus); + List getAllById(List applicationIds); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java index be6221b5..b1a4508b 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/GeneralFormApplicationService.java @@ -1,7 +1,6 @@ package ddingdong.ddingdongBE.domain.formapplication.service; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; -import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import ddingdong.ddingdongBE.domain.formapplication.repository.FormApplicationRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; @@ -38,9 +37,8 @@ public FormApplication getById(Long applicationId) { } @Override - public void updateStatus(Long applicationId, FormApplicationStatus status) { - FormApplication formApplication = formApplicationRepository.findById(applicationId).orElse(null); - formApplication.update(status); + public List getAllById(List applicationIds) { + return formApplicationRepository.findAllById(applicationIds); } private Slice buildSlice(Slice originalSlice, int size) { diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java index 5da78081..f16e4dad 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java @@ -6,10 +6,12 @@ import ddingdong.ddingdongBE.domain.user.entity.User; import lombok.Builder; +import java.util.List; + @Builder public record UpdateFormApplicationStatusCommand( Long formId, - Long applicationId, + List applicationIds, FormApplicationStatus status, User user ) { From b3d768fc4532f87000adad6863a3419a69568a53 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Thu, 6 Feb 2025 16:34:44 +0900 Subject: [PATCH 11/16] =?UTF-8?q?test:=20=EA=B8=B0=EB=8A=A5=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...CentralFormApplicationServiceImplTest.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java index 21cd984a..80c2baee 100644 --- a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormApplicationServiceImplTest.java @@ -7,7 +7,6 @@ import ddingdong.ddingdongBE.domain.club.repository.ClubRepository; import ddingdong.ddingdongBE.domain.form.entity.Form; import ddingdong.ddingdongBE.domain.form.repository.FormRepository; -import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import ddingdong.ddingdongBE.domain.formapplication.service.FacadeCentralFormApplicationService; @@ -22,8 +21,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.util.ArrayList; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class FacadeCentralFormApplicationServiceImplTest extends TestContainerSupport { @@ -107,26 +108,38 @@ void updateFormApplicationStatus() { .set("club", savedClub) .sample(); Form savedForm = formRepository.saveAndFlush(form); - FormApplication formApplication = FormApplication.builder() + FormApplication formApplication1 = FormApplication.builder() .name("지원자1") .studentNumber("60201115") .department("융합소프트웨어학부") .status(FormApplicationStatus.SUBMITTED) .form(savedForm) .build(); - FormApplication savedApplication = formApplicationService.create(formApplication); + FormApplication formApplication2 = FormApplication.builder() + .name("지원자2") + .studentNumber("602011156") + .department("디지털콘텐츠디자인학과") + .status(FormApplicationStatus.SUBMITTED) + .form(savedForm) + .build(); + FormApplication savedApplication1 = formApplicationService.create(formApplication1); + FormApplication savedApplication2 = formApplicationService.create(formApplication2); + List applicationIds = new ArrayList<>(); + applicationIds.add(savedApplication1.getId()); + applicationIds.add(savedApplication2.getId()); UpdateFormApplicationStatusCommand command = fixture.giveMeBuilder(UpdateFormApplicationStatusCommand.class) .set("formId", savedForm.getId()) - .set("applicationId", savedApplication.getId()) + .set("applicationIds", applicationIds) .set("status", FormApplicationStatus.FIRST_PASS) .set("user", savedUser) .sample(); // when facadeCentralFormApplicationService.updateStatus(command); // then - assertThat(savedApplication.getName()).isEqualTo("지원자1"); - assertThat(savedApplication.getStudentNumber()).isEqualTo("60201115"); - assertThat(formApplication.getStatus()).isEqualTo(FormApplicationStatus.FIRST_PASS); + assertThat(formApplication1.getName()).isEqualTo("지원자1"); + assertThat(formApplication1.getStatus()).isEqualTo(FormApplicationStatus.FIRST_PASS); + assertThat(formApplication2.getName()).isEqualTo("지원자2"); + assertThat(formApplication2.getStatus()).isEqualTo(FormApplicationStatus.FIRST_PASS); } } \ No newline at end of file From c0c009ee3851c92304fa93892237bd901cb523a8 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Thu, 6 Feb 2025 17:31:27 +0900 Subject: [PATCH 12/16] =?UTF-8?q?docs:=20Swagger=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=98=88=EC=8B=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/UpdateFormApplicationStatusRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java index 6312aba3..e8599ef6 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java @@ -9,8 +9,8 @@ import java.util.List; public record UpdateFormApplicationStatusRequest( - @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") - @Schema(description = "수정할 지원자 상태", example = "FIRST_PASS") + @NotNull(message = "지원자 id 리스트는 필수 입력 사항입니다.") + @Schema(description = "수정할 지원자 id 리스트", example = "[1, 2, 3]") List applicationIds, @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") From 6b89e5e32f9bea592690528dd71e838d0914fcf1 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 03:59:02 +0900 Subject: [PATCH 13/16] =?UTF-8?q?refactor:=20status=20String=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/UpdateFormApplicationStatusRequest.java | 4 ++-- .../entity/FormApplicationStatus.java | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java index e8599ef6..b3d793e5 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/dto/request/UpdateFormApplicationStatusRequest.java @@ -15,13 +15,13 @@ public record UpdateFormApplicationStatusRequest( @NotNull(message = "지원자 상태는 필수 입력 사항입니다.") @Schema(description = "수정할 지원자 상태", example = "FIRST_PASS") - FormApplicationStatus status + String status ) { public UpdateFormApplicationStatusCommand toCommand(Long formId, User user) { return UpdateFormApplicationStatusCommand.builder() .formId(formId) .applicationIds(applicationIds) - .status(status) + .status(FormApplicationStatus.findStatus(status)) .user(user) .build(); } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplicationStatus.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplicationStatus.java index 2cf62598..3bcc1ff9 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplicationStatus.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplicationStatus.java @@ -1,9 +1,19 @@ package ddingdong.ddingdongBE.domain.formapplication.entity; +import ddingdong.ddingdongBE.common.exception.InvalidatedMappingException.InvalidatedEnumValue; +import java.util.Arrays; + public enum FormApplicationStatus { SUBMITTED, FIRST_PASS, FINAL_PASS, FIRST_FAIL, - FINAL_FAIL + FINAL_FAIL; + + public static FormApplicationStatus findStatus(String status) { + return Arrays.stream(values()) + .filter(findStatus -> findStatus.name().equals(status)) + .findFirst() + .orElseThrow(() -> new InvalidatedEnumValue("FormApplicationStatus (status=" + status + ")를 찾을 수 없습니다.")); + } } From 33c5cbcf34266b0845497a82361ee6ca30ebcef3 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 04:09:47 +0900 Subject: [PATCH 14/16] =?UTF-8?q?refactor:=20upadate=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=82=B4=EB=B6=80=EC=9D=98=20save=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/FacadeCentralFormApplicationServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index 95b3c87c..4a382d46 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -56,6 +56,5 @@ public FormApplicationQuery getFormApplication(Long formId, Long applicationId, public void updateStatus(UpdateFormApplicationStatusCommand command) { List formApplications = formApplicationService.getAllById(command.applicationIds()); formApplications.forEach(formApplication -> formApplication.update(command.status())); - formApplicationRepository.saveAll(formApplications); } } From 45e64e46f99b3e180522086ba17e658d2922c6c5 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 04:25:42 +0900 Subject: [PATCH 15/16] =?UTF-8?q?refactor:=20update=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=AA=85=20=EB=AA=85=ED=99=95=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/formapplication/entity/FormApplication.java | 2 +- .../service/FacadeCentralFormApplicationServiceImpl.java | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java index 49e2bf89..92de2761 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/entity/FormApplication.java @@ -42,7 +42,7 @@ private FormApplication(String name, String studentNumber, String department, Fo this.form = form; } - public void update(FormApplicationStatus status) { + public void updateStatus(FormApplicationStatus status) { this.status = status; } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java index 4a382d46..1dc8566f 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeCentralFormApplicationServiceImpl.java @@ -1,12 +1,9 @@ package ddingdong.ddingdongBE.domain.formapplication.service; -import ddingdong.ddingdongBE.domain.form.service.FormFieldService; import ddingdong.ddingdongBE.domain.formapplication.entity.FormAnswer; -import ddingdong.ddingdongBE.domain.formapplication.repository.FormApplicationRepository; import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.UpdateFormApplicationStatusCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.FormApplicationQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.PagingQuery; -import ddingdong.ddingdongBE.domain.form.service.FormService; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.MyFormApplicationPageQuery; import ddingdong.ddingdongBE.domain.formapplication.service.dto.query.MyFormApplicationPageQuery.FormApplicationListQuery; @@ -23,11 +20,8 @@ @Transactional(readOnly = true) public class FacadeCentralFormApplicationServiceImpl implements FacadeCentralFormApplicationService { - private final FormService formService; private final FormApplicationService formApplicationService; private final FormAnswerService formAnswerService; - private final FormFieldService formFieldService; - private final FormApplicationRepository formApplicationRepository; @Override public MyFormApplicationPageQuery getMyFormApplicationPage(Long formId, User user, int size, Long currentCursorId) { @@ -55,6 +49,6 @@ public FormApplicationQuery getFormApplication(Long formId, Long applicationId, @Override public void updateStatus(UpdateFormApplicationStatusCommand command) { List formApplications = formApplicationService.getAllById(command.applicationIds()); - formApplications.forEach(formApplication -> formApplication.update(command.status())); + formApplications.forEach(formApplication -> formApplication.updateStatus(command.status())); } } From 58226d74ec9f76c1a084df72b94c7880f326c11e Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 04:26:03 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20toEntity()=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/command/UpdateFormApplicationStatusCommand.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java index f16e4dad..fc5e9473 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/dto/command/UpdateFormApplicationStatusCommand.java @@ -1,7 +1,5 @@ package ddingdong.ddingdongBE.domain.formapplication.service.dto.command; -import ddingdong.ddingdongBE.domain.form.entity.Form; -import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplicationStatus; import ddingdong.ddingdongBE.domain.user.entity.User; import lombok.Builder; @@ -15,10 +13,4 @@ public record UpdateFormApplicationStatusCommand( FormApplicationStatus status, User user ) { - public FormApplication toEntity(Form form) { - return FormApplication.builder() - .form(form) - .status(status) - .build(); - } }