Skip to content

Commit

Permalink
[DDING-106] 사용자 폼지 상세 조회 API 구현 (#253)
Browse files Browse the repository at this point in the history
  • Loading branch information
Seooooo24 authored Feb 11, 2025
1 parent 4ea48ca commit a330587
Show file tree
Hide file tree
Showing 40 changed files with 743 additions and 551 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ddingdong.ddingdongBE.domain.form.api;

import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormSectionResponse;
import ddingdong.ddingdongBE.domain.form.controller.dto.response.UserFormResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -10,18 +11,28 @@
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.RequestParam;
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 = "폼지 섹션 조회 성공",
content = @Content(schema = @Schema(implementation = FormSectionResponse.class)))
@ResponseStatus(HttpStatus.OK)
@GetMapping("/forms/{formId}/sections")
FormSectionResponse getFormSections(
@PathVariable("formId") Long formId
);
@Operation(summary = "폼지 섹션 조회 API")
@ApiResponse(responseCode = "200", description = "폼지 섹션 조회 성공",
content = @Content(schema = @Schema(implementation = FormSectionResponse.class)))
@ResponseStatus(HttpStatus.OK)
@GetMapping("/forms/{formId}/sections")
FormSectionResponse getFormSections(
@PathVariable("formId") Long formId
);

@Operation(summary = "폼지 상세 조회 API")
@ApiResponse(responseCode = "200", description = "폼지 상세 조회 성공",
content = @Content(schema = @Schema(implementation = UserFormResponse.class)))
@GetMapping("/forms/{formId}")
UserFormResponse getForm(
@PathVariable("formId") Long formId,
@RequestParam(value = "section") String section
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public FormStatisticsResponse getFormStatistics(

@Override
public MultipleFieldStatisticsResponse getMultipleFieldStatistics(Long fieldId) {
MultipleFieldStatisticsQuery query = facadeCentralFormService.getMultipleFieldStatistics(fieldId);
MultipleFieldStatisticsQuery query = facadeCentralFormService.getMultipleFieldStatistics(
fieldId);
return MultipleFieldStatisticsResponse.from(query);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,28 @@

import ddingdong.ddingdongBE.domain.form.api.UserFormApi;
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormSectionResponse;
import ddingdong.ddingdongBE.domain.form.controller.dto.response.UserFormResponse;
import ddingdong.ddingdongBE.domain.form.service.FacadeUserFormService;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormSectionQuery;
import ddingdong.ddingdongBE.domain.form.service.dto.query.UserFormQuery;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class UserFormController implements UserFormApi {

private final FacadeUserFormService facadeUserFormService;
private final FacadeUserFormService facadeUserFormService;

@Override
public FormSectionResponse getFormSections(Long formId) {
FormSectionQuery query = facadeUserFormService.getFormSection(formId);
return FormSectionResponse.from(query);
}
@Override
public FormSectionResponse getFormSections(Long formId) {
FormSectionQuery query = facadeUserFormService.getFormSection(formId);
return FormSectionResponse.from(query);
}

@Override
public UserFormResponse getForm(Long formId, String section) {
UserFormQuery query = facadeUserFormService.getUserForm(formId, section);
return UserFormResponse.from(query);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@

@Builder
public record FormListResponse(
@Schema(description = "지원 폼지 ID", example = "1")
Long formId,
@Schema(description = "지원 폼지 제목", example = "폼지 제목입니다.")
String title,
@Schema(description = "지원 폼지 시작일", example = "2001-01-01")
LocalDate startDate,
@Schema(description = "지원 폼지 종료일", example = "2001-01-02")
LocalDate endDate,
@Schema(description = "활성화 여부", example = "true")
boolean isActive
@Schema(description = "지원 폼지 ID", example = "1")
Long formId,
@Schema(description = "지원 폼지 제목", example = "폼지 제목입니다.")
String title,
@Schema(description = "지원 폼지 시작일", example = "2001-01-01")
LocalDate startDate,
@Schema(description = "지원 폼지 종료일", example = "2001-01-02")
LocalDate endDate,
@Schema(description = "활성화 여부", example = "true")
boolean isActive
) {

public static FormListResponse from(FormListQuery query) {
return FormListResponse.builder()
.formId(query.formId())
.title(query.title())
.startDate(query.startDate())
.endDate(query.endDate())
.isActive(query.isActive())
.build();
}
public static FormListResponse from(FormListQuery query) {
return FormListResponse.builder()
.formId(query.formId())
.title(query.title())
.startDate(query.startDate())
.endDate(query.endDate())
.isActive(query.isActive())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,63 +11,63 @@

@Builder
public record FormResponse(
@Schema(description = "폼지 제목", example = "카우 1기 폼지")
String title,
@Schema(description = "폼지 설명", example = "폼지 설명입니다")
String description,
@Schema(description = "폼지 시작일", example = "2001-01-01")
LocalDate startDate,
@Schema(description = "폼지 종료일", example = "2001-01-02")
LocalDate endDate,
@Schema(description = "면접 여부", example = "true")
boolean hasInterview,
@Schema(description = "생성한 섹션들", example = "[공통,서버,웹]")
List<String> sections,
@ArraySchema(schema = @Schema(implementation = FormFieldListResponse.class))
List<FormFieldListResponse> formFields
@Schema(description = "폼지 제목", example = "카우 1기 폼지")
String title,
@Schema(description = "폼지 설명", example = "폼지 설명입니다")
String description,
@Schema(description = "폼지 시작일", example = "2001-01-01")
LocalDate startDate,
@Schema(description = "폼지 종료일", example = "2001-01-02")
LocalDate endDate,
@Schema(description = "면접 여부", example = "true")
boolean hasInterview,
@Schema(description = "생성한 섹션들", example = "[공통,서버,웹]")
List<String> sections,
@ArraySchema(schema = @Schema(implementation = FormFieldListResponse.class))
List<FormFieldListResponse> formFields
) {

@Builder
record FormFieldListResponse(
@Schema(description = "폼지 질문", example = "당신의 이름은?")
String question,
@Schema(description = "폼지 질문 유형", example = "CHECK_BOX")
FieldType type,
@Schema(description = "폼지 지문", example = "[지문1, 지문2]")
List<String> options,
@Schema(description = "필수 여부", example = "true")
boolean required,
@Schema(description = "폼지 질문 순서", example = "1")
int order,
@Schema(description = "폼지 섹션", example = "공통")
String section
) {
@Builder
record FormFieldListResponse(
@Schema(description = "폼지 질문", example = "당신의 이름은?")
String question,
@Schema(description = "폼지 질문 유형", example = "CHECK_BOX")
FieldType type,
@Schema(description = "폼지 지문", example = "[지문1, 지문2]")
List<String> options,
@Schema(description = "필수 여부", example = "true")
boolean required,
@Schema(description = "폼지 질문 순서", example = "1")
int order,
@Schema(description = "폼지 섹션", example = "공통")
String section
) {

public static FormFieldListResponse from(FormFieldListQuery formFieldListQuery) {
return FormFieldListResponse.builder()
.question(formFieldListQuery.question())
.type(formFieldListQuery.type())
.options(formFieldListQuery.options())
.required(formFieldListQuery.required())
.order(formFieldListQuery.order())
.section(formFieldListQuery.section())
.build();
public static FormFieldListResponse from(FormFieldListQuery formFieldListQuery) {
return FormFieldListResponse.builder()
.question(formFieldListQuery.question())
.type(formFieldListQuery.type())
.options(formFieldListQuery.options())
.required(formFieldListQuery.required())
.order(formFieldListQuery.order())
.section(formFieldListQuery.section())
.build();
}
}
}

public static FormResponse from(FormQuery formQuery) {
List<FormFieldListResponse> responses = formQuery.formFields().stream()
.map(FormFieldListResponse::from)
.toList();
public static FormResponse from(FormQuery formQuery) {
List<FormFieldListResponse> responses = formQuery.formFields().stream()
.map(FormFieldListResponse::from)
.toList();

return FormResponse.builder()
.title(formQuery.title())
.description(formQuery.description())
.startDate(formQuery.startDate())
.endDate(formQuery.endDate())
.hasInterview(formQuery.hasInterview())
.sections(formQuery.sections())
.formFields(responses)
.build();
}
return FormResponse.builder()
.title(formQuery.title())
.description(formQuery.description())
.startDate(formQuery.startDate())
.endDate(formQuery.endDate())
.hasInterview(formQuery.hasInterview())
.sections(formQuery.sections())
.formFields(responses)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,20 @@
import lombok.Builder;

@Builder
public record FormSectionResponse (
@Schema(description = "폼지 제목", example = "카우 1기 폼지")
String title,
@Schema(description = "폼지 설명", example = "폼지 설명입니다")
String description,
@Schema(description = "섹션 리스트", example = "[서버, 웹]")
List<String> sections
public record FormSectionResponse(
@Schema(description = "폼지 제목", example = "카우 1기 폼지")
String title,
@Schema(description = "폼지 설명", example = "폼지 설명입니다")
String description,
@Schema(description = "섹션 리스트", example = "[서버, 웹]")
List<String> sections
) {
public static FormSectionResponse from(FormSectionQuery formSectionQuery) {
return FormSectionResponse.builder()
.title(formSectionQuery.title())
.description(formSectionQuery.description())
.sections(formSectionQuery.sections())
.build();
}

public static FormSectionResponse from(FormSectionQuery formSectionQuery) {
return FormSectionResponse.builder()
.title(formSectionQuery.title())
.description(formSectionQuery.description())
.sections(formSectionQuery.sections())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ record ApplicantStatisticResponse(
@Schema(description = "전 폼지 대비 증감 값", example = "150")
CompareToBefore comparedToBefore
) {

record CompareToBefore(
@Schema(description = "증감율 %", example = "50")
int ratio,
Expand All @@ -62,11 +63,13 @@ record CompareToBefore(
) {

}

public static ApplicantStatisticResponse from(ApplicantStatisticQuery query) {
return ApplicantStatisticResponse.builder()
.label(query.label())
.count(query.count())
.comparedToBefore(new CompareToBefore(query.compareRatio(), query.compareValue()))
.comparedToBefore(
new CompareToBefore(query.compareRatio(), query.compareValue()))
.build();
}
}
Expand All @@ -78,6 +81,7 @@ record FieldStatisticsResponse(
@ArraySchema(schema = @Schema(implementation = FieldStatisticsListResponse.class))
List<FieldStatisticsListResponse> fields
) {

record FieldStatisticsListResponse(
@Schema(description = "폼지 질문 id", example = "1")
Long id,
Expand All @@ -90,14 +94,17 @@ record FieldStatisticsListResponse(
@Schema(description = "섹션", example = "공통")
String section
) {

public static FieldStatisticsListResponse from(FieldStatisticsListQuery query) {
return new FieldStatisticsListResponse(query.id(), query.question(), query.count(), query.fieldType(),
return new FieldStatisticsListResponse(query.id(), query.question(), query.count(),
query.fieldType(),
query.section());
}
}

public static FieldStatisticsResponse from(FieldStatisticsQuery query) {
List<FieldStatisticsListResponse> fieldStatisticsListResponses = query.fieldStatisticsListQueries().stream()
List<FieldStatisticsListResponse> fieldStatisticsListResponses = query.fieldStatisticsListQueries()
.stream()
.map(FieldStatisticsListResponse::from)
.toList();
return FieldStatisticsResponse.builder()
Expand All @@ -108,10 +115,12 @@ public static FieldStatisticsResponse from(FieldStatisticsQuery query) {
}

public static FormStatisticsResponse from(FormStatisticsQuery query) {
List<DepartmentStatisticResponse> departmentStatisticResponse = query.departmentStatisticQueries().stream()
List<DepartmentStatisticResponse> departmentStatisticResponse = query.departmentStatisticQueries()
.stream()
.map(DepartmentStatisticResponse::from)
.toList();
List<ApplicantStatisticResponse> applicantStatisticResponse = query.applicantStatisticQueries().stream()
List<ApplicantStatisticResponse> applicantStatisticResponse = query.applicantStatisticQueries()
.stream()
.map(ApplicantStatisticResponse::from)
.toList();
return FormStatisticsResponse.builder()
Expand Down
Loading

0 comments on commit a330587

Please sign in to comment.