Skip to content

Commit f2409cd

Browse files
authored
[DDING-88] 동아리 지원 폼지 전체 조회 API 구현 (#237)
1 parent 8d7d274 commit f2409cd

File tree

14 files changed

+199
-8
lines changed

14 files changed

+199
-8
lines changed

src/main/java/ddingdong/ddingdongBE/common/utils/TimeParser.java renamed to src/main/java/ddingdong/ddingdongBE/common/utils/TimeUtils.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package ddingdong.ddingdongBE.common.utils;
22

3+
import java.time.LocalDate;
34
import java.time.LocalDateTime;
45
import java.time.format.DateTimeFormatter;
56

6-
public class TimeParser {
7+
public class TimeUtils {
78

89
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
910

@@ -26,4 +27,10 @@ public static LocalDateTime processDate(String dateString, LocalDateTime current
2627

2728
return parseToLocalDateTime(dateString);
2829
}
30+
31+
public static boolean isDateInRange(LocalDate nowDate, LocalDate startDate, LocalDate endDate) {
32+
if (nowDate == null || startDate == null || endDate == null) {
33+
return false;
34+
}
35+
return !nowDate.isBefore(startDate) && !nowDate.isAfter(endDate); }
2936
}

src/main/java/ddingdong/ddingdongBE/domain/activityreport/service/dto/command/CreateActivityReportCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ddingdong.ddingdongBE.domain.activityreport.service.dto.command;
22

3-
import ddingdong.ddingdongBE.common.utils.TimeParser;
3+
import ddingdong.ddingdongBE.common.utils.TimeUtils;
44
import ddingdong.ddingdongBE.domain.activityreport.domain.ActivityReport;
55
import ddingdong.ddingdongBE.domain.activityreport.domain.Participant;
66
import ddingdong.ddingdongBE.domain.club.entity.Club;
@@ -23,8 +23,8 @@ public ActivityReport toEntity(Club club) {
2323
.term(term)
2424
.content(content)
2525
.place(place)
26-
.startDate(TimeParser.parseToLocalDateTime(startDate))
27-
.endDate(TimeParser.parseToLocalDateTime(endDate))
26+
.startDate(TimeUtils.parseToLocalDateTime(startDate))
27+
.endDate(TimeUtils.parseToLocalDateTime(endDate))
2828
.participants(participants)
2929
.club(club)
3030
.build();

src/main/java/ddingdong/ddingdongBE/domain/activityreport/service/dto/command/UpdateActivityReportCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ddingdong.ddingdongBE.domain.activityreport.service.dto.command;
22

3-
import ddingdong.ddingdongBE.common.utils.TimeParser;
3+
import ddingdong.ddingdongBE.common.utils.TimeUtils;
44
import ddingdong.ddingdongBE.domain.activityreport.domain.ActivityReport;
55
import ddingdong.ddingdongBE.domain.activityreport.domain.Participant;
66
import java.time.LocalDateTime;
@@ -22,8 +22,8 @@ public ActivityReport toEntity() {
2222
return ActivityReport.builder()
2323
.content(content)
2424
.place(place)
25-
.startDate(TimeParser.processDate(startDate, LocalDateTime.now()))
26-
.endDate(TimeParser.processDate(endDate, LocalDateTime.now()))
25+
.startDate(TimeUtils.processDate(startDate, LocalDateTime.now()))
26+
.endDate(TimeUtils.processDate(endDate, LocalDateTime.now()))
2727
.participants(participants)
2828
.build();
2929
}

src/main/java/ddingdong/ddingdongBE/domain/form/api/CentralFormApi.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@
33
import ddingdong.ddingdongBE.auth.PrincipalDetails;
44
import ddingdong.ddingdongBE.domain.form.controller.dto.request.CreateFormRequest;
55
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
6+
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
67
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.media.ArraySchema;
9+
import io.swagger.v3.oas.annotations.media.Content;
10+
import io.swagger.v3.oas.annotations.media.Schema;
711
import io.swagger.v3.oas.annotations.responses.ApiResponse;
812
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
913
import io.swagger.v3.oas.annotations.tags.Tag;
1014
import jakarta.validation.Valid;
15+
import java.util.List;
1116
import org.springframework.http.HttpStatus;
1217
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1318
import org.springframework.web.bind.annotation.DeleteMapping;
19+
import org.springframework.web.bind.annotation.GetMapping;
1420
import org.springframework.web.bind.annotation.PathVariable;
1521
import org.springframework.web.bind.annotation.PostMapping;
1622
import org.springframework.web.bind.annotation.PutMapping;
@@ -52,4 +58,16 @@ void deleteForm(
5258
@PathVariable("formId") Long formId,
5359
@AuthenticationPrincipal PrincipalDetails principalDetails
5460
);
61+
62+
@Operation(summary = "동아리 지원 폼지 전체조회 API")
63+
@ApiResponse(responseCode = "200", description = "동아리 지원 폼지 전체조회 성공",
64+
content = @Content(
65+
array = @ArraySchema(schema = @Schema(implementation = FormListResponse.class))
66+
))
67+
@ResponseStatus(HttpStatus.OK)
68+
@SecurityRequirement(name = "AccessToken")
69+
@GetMapping("/my/forms")
70+
List<FormListResponse> getAllMyForm(
71+
@AuthenticationPrincipal PrincipalDetails principalDetails
72+
);
5573
}

src/main/java/ddingdong/ddingdongBE/domain/form/controller/CentralFormController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import ddingdong.ddingdongBE.domain.form.api.CentralFormApi;
55
import ddingdong.ddingdongBE.domain.form.controller.dto.request.CreateFormRequest;
66
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
7+
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
78
import ddingdong.ddingdongBE.domain.form.service.FacadeCentralFormService;
9+
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
810
import ddingdong.ddingdongBE.domain.user.entity.User;
11+
import java.util.List;
912
import lombok.RequiredArgsConstructor;
1013
import org.springframework.web.bind.annotation.RestController;
1114

@@ -38,4 +41,13 @@ public void deleteForm(Long formId, PrincipalDetails principalDetails) {
3841
User user = principalDetails.getUser();
3942
facadeCentralFormService.deleteForm(formId, user);
4043
}
44+
45+
@Override
46+
public List<FormListResponse> getAllMyForm(PrincipalDetails principalDetails) {
47+
User user = principalDetails.getUser();
48+
List<FormListQuery> queries = facadeCentralFormService.getAllMyForm(user);
49+
return queries.stream()
50+
.map(FormListResponse::from)
51+
.toList();
52+
}
4153
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ddingdong.ddingdongBE.domain.form.controller.dto.response;
2+
3+
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import java.time.LocalDate;
6+
import lombok.Builder;
7+
8+
@Builder
9+
public record FormListResponse(
10+
@Schema(description = "지원 폼지 ID", example = "1")
11+
Long formId,
12+
@Schema(description = "지원 폼지 제목", example = "폼지 제목입니다.")
13+
String title,
14+
@Schema(description = "지원 폼지 시작일", example = "2001-01-01")
15+
LocalDate startDate,
16+
@Schema(description = "지원 폼지 종료일", example = "2001-01-02")
17+
LocalDate endData,
18+
@Schema(description = "활성화 여부", example = "true")
19+
boolean isActive
20+
) {
21+
22+
public static FormListResponse from(FormListQuery query) {
23+
return FormListResponse.builder()
24+
.formId(query.formId())
25+
.title(query.title())
26+
.startDate(query.startDate())
27+
.endData(query.endData())
28+
.isActive(query.isActive())
29+
.build();
30+
}
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package ddingdong.ddingdongBE.domain.form.repository;
22

3+
import ddingdong.ddingdongBE.domain.club.entity.Club;
34
import ddingdong.ddingdongBE.domain.form.entity.Form;
5+
import java.util.List;
46
import org.springframework.data.jpa.repository.JpaRepository;
57

68
public interface FormRepository extends JpaRepository<Form, Long> {
79

10+
List<Form> findAllByClub(Club club);
811
}

src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand;
44
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
5+
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
56
import ddingdong.ddingdongBE.domain.user.entity.User;
7+
import java.util.List;
68

79
public interface FacadeCentralFormService {
810

@@ -11,4 +13,6 @@ public interface FacadeCentralFormService {
1113
void updateForm(UpdateFormCommand command);
1214

1315
void deleteForm(Long formId, User user);
16+
17+
List<FormListQuery> getAllMyForm(User user);
1418
}

src/main/java/ddingdong/ddingdongBE/domain/form/service/FacadeCentralFormServiceImpl.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ddingdong.ddingdongBE.domain.form.service;
22

33
import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority;
4+
import ddingdong.ddingdongBE.common.utils.TimeUtils;
45
import ddingdong.ddingdongBE.domain.club.entity.Club;
56
import ddingdong.ddingdongBE.domain.club.service.ClubService;
67
import ddingdong.ddingdongBE.domain.form.entity.Form;
@@ -9,7 +10,9 @@
910
import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand.CreateFormFieldCommand;
1011
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
1112
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand.UpdateFormFieldCommand;
13+
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
1214
import ddingdong.ddingdongBE.domain.user.entity.User;
15+
import java.time.LocalDate;
1316
import java.util.List;
1417
import java.util.Objects;
1518
import lombok.RequiredArgsConstructor;
@@ -19,7 +22,7 @@
1922
@Service
2023
@RequiredArgsConstructor
2124
@Transactional(readOnly = true)
22-
public class FacadeCentralFormServiceImpl implements FacadeCentralFormService{
25+
public class FacadeCentralFormServiceImpl implements FacadeCentralFormService {
2326

2427
private final FormService formService;
2528
private final FormFieldService formFieldService;
@@ -59,6 +62,20 @@ public void deleteForm(Long formId, User user) {
5962
formService.delete(form); //테이블 생성 시 외래 키에 cascade 설정하여 formField 삭제도 자동으로 됨.
6063
}
6164

65+
@Override
66+
public List<FormListQuery> getAllMyForm(User user) {
67+
Club club = clubService.getByUserId(user.getId());
68+
List<Form> forms = formService.getAllByClub(club);
69+
return forms.stream()
70+
.map(this::buildFormListQuery)
71+
.toList();
72+
}
73+
74+
private FormListQuery buildFormListQuery(Form form) {
75+
boolean isActive = TimeUtils.isDateInRange(LocalDate.now(), form.getStartDate(), form.getEndDate());
76+
return FormListQuery.from(form, isActive);
77+
}
78+
6279
private void validateEqualsClub(Club club, Form form) {
6380
if (!Objects.equals(club.getId(), form.getClub().getId())) {
6481
throw new NonHaveAuthority();

src/main/java/ddingdong/ddingdongBE/domain/form/service/FormService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package ddingdong.ddingdongBE.domain.form.service;
22

3+
import ddingdong.ddingdongBE.domain.club.entity.Club;
34
import ddingdong.ddingdongBE.domain.form.entity.Form;
5+
import java.util.List;
46

57
public interface FormService {
68

@@ -9,4 +11,6 @@ public interface FormService {
911
Form getById(Long formId);
1012

1113
void delete(Form form);
14+
15+
List<Form> getAllByClub(Club club);
1216
}

0 commit comments

Comments
 (0)