From 7e2516438a518e58e7acdf8da5d16bbded6d3dbd Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 18:42:43 +0900 Subject: [PATCH 1/5] =?UTF-8?q?rename:=20formapplication=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=EC=9D=98=20=EC=84=9C=EB=B9=84=EC=8A=A4=20Fac?= =?UTF-8?q?adeUserFormApplicationService=EB=A1=9C=20=EC=9D=B4=EB=A6=84=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 --- ...Service.java => FacadeUserFormApplicationService.java} | 2 +- ...mpl.java => FacadeUserFormApplicationServiceImpl.java} | 2 +- ...java => FacadeUserFormApplicationServiceImplTest.java} | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/{FacadeUserFormService.java => FacadeUserFormApplicationService.java} (83%) rename src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/{FacadeUserFormServiceImpl.java => FacadeUserFormApplicationServiceImpl.java} (95%) rename src/test/java/ddingdong/ddingdongBE/domain/form/service/{FacadeUserFormServiceImplTest.java => FacadeUserFormApplicationServiceImplTest.java} (94%) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormService.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationService.java similarity index 83% rename from src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormService.java rename to src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationService.java index 52b896b2..eb2d1ff1 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormService.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationService.java @@ -2,7 +2,7 @@ import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.CreateFormApplicationCommand; -public interface FacadeUserFormService { +public interface FacadeUserFormApplicationService { void createFormApplication(CreateFormApplicationCommand createFormApplicationCommand); diff --git a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationServiceImpl.java similarity index 95% rename from src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormServiceImpl.java rename to src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationServiceImpl.java index e715933b..7f77e029 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/service/FacadeUserFormApplicationServiceImpl.java @@ -15,7 +15,7 @@ @Service @RequiredArgsConstructor @Transactional(readOnly = true) -public class FacadeUserFormServiceImpl implements FacadeUserFormService { +public class FacadeUserFormApplicationServiceImpl implements FacadeUserFormApplicationService { private final FormApplicationService formApplicationService; private final FormAnswerService formAnswerService; diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormApplicationServiceImplTest.java similarity index 94% rename from src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java rename to src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormApplicationServiceImplTest.java index 2b8273f2..c9560474 100644 --- a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormApplicationServiceImplTest.java @@ -16,7 +16,7 @@ import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication; import ddingdong.ddingdongBE.domain.formapplication.repository.FormAnswerRepository; import ddingdong.ddingdongBE.domain.formapplication.repository.FormApplicationRepository; -import ddingdong.ddingdongBE.domain.formapplication.service.FacadeUserFormService; +import ddingdong.ddingdongBE.domain.formapplication.service.FacadeUserFormApplicationService; import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.CreateFormApplicationCommand; import ddingdong.ddingdongBE.domain.formapplication.service.dto.command.CreateFormApplicationCommand.CreateFormAnswerCommand; import ddingdong.ddingdongBE.domain.user.entity.Role; @@ -30,10 +30,10 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class FacadeUserFormServiceImplTest extends TestContainerSupport { +class FacadeUserFormApplicationServiceImplTest extends TestContainerSupport { @Autowired - private FacadeUserFormService facadeUserFormService; + private FacadeUserFormApplicationService facadeUserFormApplicationService; @Autowired private FormApplicationRepository formApplicationRepository; @@ -99,7 +99,7 @@ void createFormApplication() { .set("formAnswerCommands", List.of(new CreateFormAnswerCommand(savedFormField.getId(), List.of("답변")))) .sample(); // when - facadeUserFormService.createFormApplication(createFormApplicationCommand); + facadeUserFormApplicationService.createFormApplication(createFormApplicationCommand); // then List formApplications = formApplicationRepository.findAll(); List formAnswers = formAnswerRepository.findAll(); From ade72d60751b277a189c24d31644e16d7ea2daad Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 18:43:32 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=ED=8F=BC=EC=A7=80=20=EC=84=B9?= =?UTF-8?q?=EC=85=98=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/form/api/UserFormApi.java | 21 ++++++++++++++++ .../form/controller/UserFormController.java | 21 ++++++++++++++++ .../dto/response/FormSectionResponse.java | 24 +++++++++++++++++++ .../form/service/FacadeUserFormService.java | 8 +++++++ .../service/FacadeUserFormServiceImpl.java | 21 ++++++++++++++++ .../service/dto/query/FormSectionQuery.java | 19 +++++++++++++++ .../UserFormApplicationController.java | 6 ++--- 7 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/controller/UserFormController.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/controller/dto/response/FormSectionResponse.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormService.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java create mode 100644 src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java b/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java new file mode 100644 index 00000000..9b515f60 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java @@ -0,0 +1,21 @@ +package ddingdong.ddingdongBE.domain.form.api; + +import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormSectionResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Tag(name = "Form - User", description = "User Form API") +@RequestMapping("/server") +public interface UserFormApi { + + @Operation(summary = "폼지 섹션 조회 API") + @ApiResponse(responseCode = "200", description = "폼지 섹션 조회 성공") + @GetMapping("/forms/{formId}/sections") + FormSectionResponse getFormSections( + @PathVariable("formId") Long formId + ); +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/controller/UserFormController.java b/src/main/java/ddingdong/ddingdongBE/domain/form/controller/UserFormController.java new file mode 100644 index 00000000..ac461b8b --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/controller/UserFormController.java @@ -0,0 +1,21 @@ +package ddingdong.ddingdongBE.domain.form.controller; + +import ddingdong.ddingdongBE.domain.form.api.UserFormApi; +import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormSectionResponse; +import ddingdong.ddingdongBE.domain.form.service.FacadeUserFormService; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class UserFormController implements UserFormApi { + + private final FacadeUserFormService facadeUserFormService; + + @Override + public FormSectionResponse getFormSections(Long formId) { + FormSectionQuery query = facadeUserFormService.getFormSection(formId); + return FormSectionResponse.from(query); + } +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/controller/dto/response/FormSectionResponse.java b/src/main/java/ddingdong/ddingdongBE/domain/form/controller/dto/response/FormSectionResponse.java new file mode 100644 index 00000000..912ed7b2 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/controller/dto/response/FormSectionResponse.java @@ -0,0 +1,24 @@ +package ddingdong.ddingdongBE.domain.form.controller.dto.response; + +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; +import lombok.Builder; + +@Builder +public record FormSectionResponse ( + @Schema(description = "폼지 제목", example = "카우 1기 폼지") + String title, + @Schema(description = "폼지 설명", example = "폼지 설명입니다") + String description, + @Schema(description = "섹션 리스트", example = "[서버, 웹]") + List sections +) { + public static FormSectionResponse from(FormSectionQuery formSectionQuery) { + return FormSectionResponse.builder() + .title(formSectionQuery.title()) + .description(formSectionQuery.description()) + .sections(formSectionQuery.sections()) + .build(); + } +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormService.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormService.java new file mode 100644 index 00000000..8070736c --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormService.java @@ -0,0 +1,8 @@ +package ddingdong.ddingdongBE.domain.form.service; + +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery; + +public interface FacadeUserFormService { + + FormSectionQuery getFormSection(Long formId); +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java new file mode 100644 index 00000000..62d1c0fa --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java @@ -0,0 +1,21 @@ +package ddingdong.ddingdongBE.domain.form.service; + +import ddingdong.ddingdongBE.domain.form.entity.Form; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class FacadeUserFormServiceImpl implements FacadeUserFormService { + + private final FormService formService; + + @Override + public FormSectionQuery getFormSection(Long formId) { + Form form = formService.getById(formId); + return FormSectionQuery.of(form.getTitle(), form.getDescription(), form.getSections()); + } +} diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java new file mode 100644 index 00000000..be1d50c5 --- /dev/null +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java @@ -0,0 +1,19 @@ +package ddingdong.ddingdongBE.domain.form.service.dto.query; + +import java.util.List; +import lombok.Builder; + +@Builder +public record FormSectionQuery ( + String title, + String description, + List sections +){ + public static FormSectionQuery of(String title, String description, List sections) { + return FormSectionQuery.builder() + .title(title) + .description(description) + .sections(sections) + .build(); + } +} 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 1c987805..8518e319 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/formapplication/controller/UserFormApplicationController.java @@ -2,7 +2,7 @@ import ddingdong.ddingdongBE.domain.formapplication.api.UserFormApplicationApi; import ddingdong.ddingdongBE.domain.formapplication.controller.dto.request.CreateFormApplicationRequest; -import ddingdong.ddingdongBE.domain.formapplication.service.FacadeUserFormService; +import ddingdong.ddingdongBE.domain.formapplication.service.FacadeUserFormApplicationService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RestController; @@ -10,10 +10,10 @@ @RequiredArgsConstructor public class UserFormApplicationController implements UserFormApplicationApi { - private final FacadeUserFormService facadeUserFormService; + private final FacadeUserFormApplicationService facadeUserFormApplicationService; @Override public void createFormApplication(Long formId, CreateFormApplicationRequest createFormApplicationRequest) { - facadeUserFormService.createFormApplication(createFormApplicationRequest.toCommand(formId)); + facadeUserFormApplicationService.createFormApplication(createFormApplicationRequest.toCommand(formId)); } } From 7ffd0308281497b69b392c812d73872ad969d5e8 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Fri, 7 Feb 2025 21:13:23 +0900 Subject: [PATCH 3/5] =?UTF-8?q?test:=20=EC=84=B9=EC=85=98=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- .../FacadeUserFormServiceImplTest.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java diff --git a/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java new file mode 100644 index 00000000..9779d03f --- /dev/null +++ b/src/test/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImplTest.java @@ -0,0 +1,78 @@ +package ddingdong.ddingdongBE.domain.form.service; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +import com.navercorp.fixturemonkey.FixtureMonkey; +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.repository.FormRepository; +import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery; +import ddingdong.ddingdongBE.domain.user.entity.Role; +import ddingdong.ddingdongBE.domain.user.entity.User; +import ddingdong.ddingdongBE.domain.user.repository.UserRepository; +import java.util.ArrayList; +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 FacadeUserFormServiceImplTest extends TestContainerSupport { + + @Autowired + private FacadeUserFormService facadeUserFormService; + + @Autowired + private FormRepository formRepository; + + @Autowired + private ClubRepository clubRepository; + + @Autowired + private UserRepository userRepository; + + private static final FixtureMonkey fixtureMonkey = FixtureMonkeyFactory.getNotNullBuilderIntrospectorMonkey(); + + @DisplayName("유저는 섹션 목록을 조회할 수 있다.") + @Test + void getFormSection() { + // 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); + + List savedSections = new ArrayList<>(); + savedSections.add("section1"); + savedSections.add("section2"); + + Form form = fixtureMonkey.giveMeBuilder(Form.class) + .set("id", 1L) + .set("title", "띵동 폼") + .set("description", "저희 동아리는 띵동입니다.") + .set("hasInterview", false) + .set("club", club) + .set("sections", savedSections) + .sample(); + Form savedForm = formRepository.save(form); + + FormSectionQuery sectionQuery = facadeUserFormService.getFormSection(savedForm.getId()); + + assertThat(sectionQuery.sections()).isEqualTo(savedSections); + } +} \ No newline at end of file From c285d3702bfa6a4cce5245f00e44ba72a6fd35d6 Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Sat, 8 Feb 2025 14:15:11 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20Http=20status=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 --- .../ddingdongBE/domain/form/api/UserFormApi.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java b/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java index 9b515f60..2f5c9e96 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/api/UserFormApi.java @@ -2,18 +2,24 @@ import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormSectionResponse; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; @Tag(name = "Form - User", description = "User Form API") @RequestMapping("/server") public interface UserFormApi { @Operation(summary = "폼지 섹션 조회 API") - @ApiResponse(responseCode = "200", description = "폼지 섹션 조회 성공") + @ApiResponse(responseCode = "200", description = "폼지 섹션 조회 성공", + content = @Content(schema = @Schema(implementation = FormSectionResponse.class))) + @ResponseStatus(HttpStatus.OK) @GetMapping("/forms/{formId}/sections") FormSectionResponse getFormSections( @PathVariable("formId") Long formId From f7cabbf86860436274fcbf87d1fba0f857c62e6f Mon Sep 17 00:00:00 2001 From: ahyeungii Date: Sun, 9 Feb 2025 00:44:36 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20of=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20from=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=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 --- .../form/service/FacadeUserFormServiceImpl.java | 2 +- .../form/service/dto/query/FormSectionQuery.java | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java index 62d1c0fa..78d78506 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeUserFormServiceImpl.java @@ -16,6 +16,6 @@ public class FacadeUserFormServiceImpl implements FacadeUserFormService { @Override public FormSectionQuery getFormSection(Long formId) { Form form = formService.getById(formId); - return FormSectionQuery.of(form.getTitle(), form.getDescription(), form.getSections()); + return FormSectionQuery.from(form); } } diff --git a/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java index be1d50c5..334110b1 100644 --- a/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java +++ b/src/main/java/ddingdong/ddingdongBE/domain/form/service/dto/query/FormSectionQuery.java @@ -1,19 +1,21 @@ package ddingdong.ddingdongBE.domain.form.service.dto.query; +import ddingdong.ddingdongBE.domain.form.entity.Form; import java.util.List; import lombok.Builder; @Builder -public record FormSectionQuery ( +public record FormSectionQuery( String title, String description, List sections -){ - public static FormSectionQuery of(String title, String description, List sections) { +) { + + public static FormSectionQuery from(Form form) { return FormSectionQuery.builder() - .title(title) - .description(description) - .sections(sections) + .title(form.getTitle()) + .description(form.getDescription()) + .sections(form.getSections()) .build(); } }