Skip to content

Commit

Permalink
feat: Acceptance, reject API
Browse files Browse the repository at this point in the history
  • Loading branch information
Park-Young-Hun committed Feb 8, 2024
1 parent 18a99ff commit 1e92392
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,22 @@ public List<FormResponseDto> readReceivedFormList(Member member) {
}

@Transactional
public FormResponseDto.FormDetailDto updateForm(FormId formId, FormUpdateDto formUpdateDto) {
public FormResponseDto.FormDetailDto updateForm(Member member, FormId formId, FormUpdateDto formUpdateDto) {
Form form = formRepository.findByFormIdAndIsDeletedOrThrow(formId, false);
form.changeFormState(formUpdateDto);

Member member = memberRepository.findByIdAndIsDeletedOrThrow(form.getPassenger().getMemberId(), false);
Carpool carpool = carpoolRepository.findByCarpoolIdAndIsDeletedOrThrow(form.getCarpoolId(), false);

if (!carpool.isMyCarpool(member.getId())) {
throw new CustomException(ErrorCode.CANNOT_CHANGE_FORM_STATE);
}

return formMapper.toDetailDto(
formRepository.saveAndFlush(form),
member
memberRepository.findByIdAndIsDeletedOrThrow(
form.getPassenger().getMemberId(),
false
)
);
}

Expand Down
20 changes: 15 additions & 5 deletions src/main/java/com/fullcar/carpool/domain/form/Form.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.fullcar.carpool.domain.carpool.CarpoolId;
import com.fullcar.carpool.presentation.form.dto.request.FormUpdateDto;
import com.fullcar.core.exception.CustomException;
import com.fullcar.core.response.ErrorCode;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
Expand All @@ -18,7 +20,7 @@
@EntityListeners(AuditingEntityListener.class)
@Table(name = "form")
public class Form {
private static final String REJECT_MESSAGE = "카풀 매칭에 실패했어. 다른 카풀을 찾아보세요!";
private static final String REJECT_MESSAGE = "카풀 매칭에 실패했어요. 다른 카풀을 찾아보세요!";

@EmbeddedId
private FormId formId;
Expand All @@ -36,8 +38,8 @@ public class Form {
@Builder.Default
private FormState formState = FormState.REQUEST;

@Column(name = "result_message")
private String resultMessage;
@Embedded
private ResultMessage resultMessage;

@Embedded
private Passenger passenger;
Expand Down Expand Up @@ -67,14 +69,22 @@ public void changeFormState(FormUpdateDto formUpdateDto) {
else if (formState == FormState.REJECT) {
this.reject();
}
else {
throw new CustomException(ErrorCode.INVALID_FORM_STATE);
}
}
public void accept(String contact, String toPassenger) {
this.formState = FormState.ACCEPT;
this.resultMessage = contact + "\n" + toPassenger;
this.resultMessage = ResultMessage.builder()
.contact(contact)
.toPassenger(toPassenger)
.build();
}

public void reject() {
this.formState = FormState.REJECT;
this.resultMessage = REJECT_MESSAGE;
this.resultMessage = ResultMessage.builder()
.toPassenger(REJECT_MESSAGE)
.build();
}
}
17 changes: 17 additions & 0 deletions src/main/java/com/fullcar/carpool/domain/form/ResultMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.fullcar.carpool.domain.form;

import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import lombok.*;

@Embeddable
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ResultMessage {
private String contact;

@Column(name = "to_passenger")
private String toPassenger;
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,20 +95,22 @@ public ApiResponse<FormResponseDto.FormDetailDto> getForm(
);
}

@Operation(summary = "신청서 수락/거절 API")
@Operation(summary = "신청서 상태변경 API")
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "수락/거절 성공")
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "수정 성공")
})
@PatchMapping("/forms/{formId}")
public ApiResponse<FormResponseDto.FormDetailDto> patchForm(
@Parameter(hidden = true)
@CurrentMember Member member,
@Parameter(description = "신청서 id", required = true)
@PathVariable Long formId,
@Parameter(description = "신청서 상태변경 모델", required = true)
@RequestBody FormUpdateDto formUpdateDto
) {
return ApiResponse.success(
SuccessCode.UPDATE_SUCCESS,
formService.updateForm(new FormId(formId), formUpdateDto)
formService.updateForm(member, new FormId(formId), formUpdateDto)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fullcar.carpool.domain.carpool.PeriodType;
import com.fullcar.carpool.domain.form.FormState;
import com.fullcar.carpool.domain.form.ResultMessage;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -51,7 +52,7 @@ public static class FormDetailDto extends FormResponseDto {
private String content;

@Schema(description = "신청서 결과 메시지")
String resultMessage;
ResultMessage resultMessage;

@Schema(description = "카풀 id")
Long carpoolId;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/fullcar/core/response/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public enum ErrorCode {
DUPLICATED_FORM(BAD_REQUEST, "이미 요청을 보낸 카풀입니다."),
DUPLICATED_NICKNAME(BAD_REQUEST, "중복된 닉네임 입니다."),
EXISTED_CAR_IN_MEMBER(BAD_REQUEST, "이미 차량이 등록되었습니다."),
CANNOT_CHANGE_FORM_STATE(BAD_REQUEST, "카풀에 등록된 운전자만 신청서 수락/거절을 할 수 있습니다."),
INVALID_FORM_STATE(BAD_REQUEST, "유효하지 않은 신청서 상태입니다."),

/* 401 UNAUTHORIZED */
UNAUTHORIZED_KAKAO_TOKEN(UNAUTHORIZED, "유효하지 않은 카카오 토큰"),
Expand Down

0 comments on commit 1e92392

Please sign in to comment.