Skip to content

Commit 546cf90

Browse files
authored
[DDING-124] 폼지 종료일자 수정 API 구현 (#293)
1 parent 279e9c9 commit 546cf90

File tree

8 files changed

+90
-1
lines changed

8 files changed

+90
-1
lines changed

src/main/java/ddingdong/ddingdongBE/common/exception/FormException.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
public class FormException extends CustomException {
66

77
public static final String FORM_PERIOD_ERROR_MESSAGE = "해당 폼지의 응답기간이 아닙니다";
8-
private static final String INVALID_FORM_DATE_MESSAGE = "입력한 기간과 겹치는 폼이 존재합니다.";
8+
private static final String OVERLAPPED_FORM_DATE_MESSAGE = "입력한 기간과 겹치는 폼이 존재합니다.";
99
private static final String INVALID_FIELD_TYPE_MESSAGE = "통계를 조회할 질문 유형이 올바르지 않습니다.";
10+
private static final String INVALID_FORM_DATE_MESSAGE = "폼지 종료일자는 폼지 시작일자 이전일 수 없습니다.";
1011

1112

1213
public FormException(String message, int errorCode) {
@@ -23,6 +24,13 @@ public FormPeriodException() {
2324
public static final class OverlapFormPeriodException extends FormException {
2425

2526
public OverlapFormPeriodException() {
27+
super(OVERLAPPED_FORM_DATE_MESSAGE, BAD_REQUEST.value());
28+
}
29+
}
30+
31+
public static final class InvalidFormEndDateException extends FormException {
32+
33+
public InvalidFormEndDateException() {
2634
super(INVALID_FORM_DATE_MESSAGE, BAD_REQUEST.value());
2735
}
2836
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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.SendApplicationResultEmailRequest;
6+
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormEndDateRequest;
67
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
78
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
89
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormResponse;
@@ -22,6 +23,7 @@
2223
import org.springframework.security.core.annotation.AuthenticationPrincipal;
2324
import org.springframework.web.bind.annotation.DeleteMapping;
2425
import org.springframework.web.bind.annotation.GetMapping;
26+
import org.springframework.web.bind.annotation.PatchMapping;
2527
import org.springframework.web.bind.annotation.PathVariable;
2628
import org.springframework.web.bind.annotation.PostMapping;
2729
import org.springframework.web.bind.annotation.PutMapping;
@@ -125,4 +127,15 @@ FormStatisticsResponse getFormStatistics(
125127
void sendApplicationResultEmail(@PathVariable("formId") Long formId,
126128
@AuthenticationPrincipal PrincipalDetails principalDetails,
127129
@RequestBody SendApplicationResultEmailRequest request);
130+
131+
@Operation(summary = "동아리 폼지 종료일자 수정 API")
132+
@ApiResponse(responseCode = "204", description = "동아리 폼지 지원기간 마감일자 수정 성공")
133+
@ResponseStatus(HttpStatus.NO_CONTENT)
134+
@SecurityRequirement(name = "AccessToken")
135+
@PatchMapping("/my/forms/{formId}/deadline")
136+
void updateFormEndDate(
137+
@Valid @RequestBody UpdateFormEndDateRequest updateFormEndDateRequest,
138+
@PathVariable("formId") Long formId,
139+
@AuthenticationPrincipal PrincipalDetails principalDetails
140+
);
128141
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
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.SendApplicationResultEmailRequest;
7+
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormEndDateRequest;
78
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
89
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
910
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormResponse;
@@ -104,4 +105,11 @@ public void sendApplicationResultEmail(
104105
User user = principalDetails.getUser();
105106
facadeCentralFormService.sendApplicationResultEmail(request.toCommand(user.getId(), formId));
106107
}
108+
109+
@Override
110+
public void updateFormEndDate(UpdateFormEndDateRequest updateFormEndDateRequest, Long formId,
111+
PrincipalDetails principalDetails) {
112+
User user = principalDetails.getUser();
113+
facadeCentralFormService.updateFormEndDate(updateFormEndDateRequest.toCommand(user, formId));
114+
}
107115
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package ddingdong.ddingdongBE.domain.form.controller.dto.request;
2+
3+
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormEndDateCommand;
4+
import ddingdong.ddingdongBE.domain.user.entity.User;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import jakarta.validation.constraints.NotNull;
7+
import com.fasterxml.jackson.annotation.JsonFormat;
8+
import java.time.LocalDate;
9+
10+
public record UpdateFormEndDateRequest (
11+
@Schema(description = "폼지 종료일자", example = "2025-03-10")
12+
@NotNull(message = "폼지 종료일자는 null이 될 수 없습니다.")
13+
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
14+
LocalDate endDate
15+
){
16+
public UpdateFormEndDateCommand toCommand(User user, Long formId) {
17+
return UpdateFormEndDateCommand.builder()
18+
.user(user)
19+
.formId(formId)
20+
.endDate(endDate)
21+
.build();
22+
}
23+
}

src/main/java/ddingdong/ddingdongBE/domain/form/entity/Form.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,8 @@ public void update(Form updateForm) {
7979
public boolean isEqualsById(Long formId) {
8080
return this.id.equals(formId);
8181
}
82+
83+
public void updateEndDate(LocalDate endDate) {
84+
this.endDate = endDate;
85+
}
8286
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand;
44
import ddingdong.ddingdongBE.domain.form.service.dto.command.SendApplicationResultEmailCommand;
55
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
6+
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormEndDateCommand;
67
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
78
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormQuery;
89
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormStatisticsQuery;
@@ -32,4 +33,6 @@ public interface FacadeCentralFormService {
3233
SingleFieldStatisticsQuery getTextFieldStatistics(Long fieldId);
3334

3435
void sendApplicationResultEmail(SendApplicationResultEmailCommand command);
36+
37+
void updateFormEndDate(UpdateFormEndDateCommand command);
3538
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority;
66
import ddingdong.ddingdongBE.common.exception.FormException.InvalidFieldTypeException;
7+
import ddingdong.ddingdongBE.common.exception.FormException.InvalidFormEndDateException;
78
import ddingdong.ddingdongBE.common.exception.FormException.OverlapFormPeriodException;
89
import ddingdong.ddingdongBE.domain.club.entity.Club;
910
import ddingdong.ddingdongBE.domain.club.service.ClubService;
@@ -18,6 +19,7 @@
1819
import ddingdong.ddingdongBE.domain.form.service.dto.command.SendApplicationResultEmailCommand;
1920
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
2021
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand.UpdateFormFieldCommand;
22+
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormEndDateCommand;
2123
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
2224
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormQuery;
2325
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormStatisticsQuery;
@@ -194,6 +196,16 @@ public void sendApplicationResultEmail(SendApplicationResultEmailCommand command
194196
}
195197
}
196198

199+
@Transactional
200+
@Override
201+
public void updateFormEndDate(UpdateFormEndDateCommand command) {
202+
Club club = clubService.getByUserId(command.user().getId());
203+
Form form = formService.getById(command.formId());
204+
validateEndDate(form.getStartDate(), command.endDate());
205+
validateDuplicationDateExcludingSelf(club, form.getStartDate(), command.endDate(), command.formId());
206+
form.updateEndDate(command.endDate());
207+
}
208+
197209
private FormListQuery buildFormListQuery(Form form) {
198210
FormStatus formStatus = FormStatus.getDescription(LocalDate.now(), form.getStartDate(),
199211
form.getEndDate());
@@ -235,6 +247,10 @@ private void validateDuplicationDateExcludingSelf(
235247
}
236248
}
237249

250+
private void validateEndDate(LocalDate startDate, LocalDate endDate) {
251+
if (endDate.isBefore(startDate)) { throw new InvalidFormEndDateException(); }
252+
}
253+
238254
private List<FormField> toUpdateFormFields(Form originform,
239255
List<UpdateFormFieldCommand> updateFormFieldCommands) {
240256
return updateFormFieldCommands.stream()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ddingdong.ddingdongBE.domain.form.service.dto.command;
2+
3+
import ddingdong.ddingdongBE.domain.user.entity.User;
4+
import java.time.LocalDate;
5+
import lombok.Builder;
6+
7+
@Builder
8+
public record UpdateFormEndDateCommand (
9+
Long formId,
10+
LocalDate endDate,
11+
User user
12+
){
13+
14+
}

0 commit comments

Comments
 (0)