Skip to content

Commit

Permalink
Merge pull request #38 from FollowMe-team/feature/#25/crew-api
Browse files Browse the repository at this point in the history
[FEAT] 크루 신청 , 취소시 status 값 반환
  • Loading branch information
mkshie authored Dec 13, 2024
2 parents af15d5c + c9b8927 commit 1d87751
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,13 @@ public BaseResponse<CrewResponse.CrewIdResponse> createCrew(
@ApiResponse(responseCode = "CREW016", description = "해당 크루에 신청 할 수 없습니다.",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
})
public BaseResponse<Void> applyToCrew(
public BaseResponse<CrewResponse.CrewApplyResponse> applyToCrew(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable(value = "crewId") Long crewId
) {
crewService.applyToCrew(principalDetails.member(), crewId);
return BaseResponse.success("크루 신청이 완료되었습니다.", null);

return BaseResponse.success("크루 신청이 완료되었습니다.",
crewService.applyToCrew(principalDetails.member(), crewId));
}

@PostMapping("/{crewId}/schedule")
Expand Down Expand Up @@ -384,12 +385,12 @@ public BaseResponse<Void> changeLeader(
@ApiResponse(responseCode = "CREW013", description = "해당 크루의 크루장입니다. 크루장을 변경해주세요",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class)))
})
public BaseResponse<Void> cancelCrewApplication(
public BaseResponse<CrewResponse.CrewApplyResponse> cancelCrewApplication(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable(value = "crewId") Long crewId
) {
crewService.cancelCrewApplication(principalDetails.member(), crewId);
return BaseResponse.success("신청이 성공적으로 취소되었습니다.", null);
return BaseResponse.success("신청이 성공적으로 취소되었습니다.",
crewService.cancelCrewApplication(principalDetails.member(), crewId));
}

@DeleteMapping("/{crewId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,14 @@ public static class CrewMemberResponse {
private Long memberId;
private String status;
}
@Getter
@AllArgsConstructor
@NoArgsConstructor
public static class CrewApplyResponse{
private Long memberId;
private String status;
}


@Getter
@Builder // 인자가 많아 생성자가 많이 필요할때 사용해 선택적으로 인자를 사용해 편하게 해주는 어노테이션
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface CrewService {

CrewResponse.CrewIdResponse createCrew(Member member, CrewRequest.createCrew request, MultipartFile representativeImage);

void applyToCrew(Member member, Long crewId);
CrewResponse.CrewApplyResponse applyToCrew(Member member, Long crewId);

CrewResponse.CrewScheduleIdResponse registerSchedule(Member member, Long crewId, CrewRequest.CreateSchedule request);
CrewResponse.CrewScheduleApplyIdResponse applyToSchedule(Member member, Long scheduleId);
Expand All @@ -37,7 +37,7 @@ CrewResponse.CrewIdResponse updateCrew(
void cancelScheduleApply(Member member, Long scheduleId);
void attendSchedule(Member member, Long scheduleId, List<Long> memberIds);
void changeLeader(Member currentMember, Long crewId, Long newLeaderId);
void cancelCrewApplication(Member member, Long crewId);
CrewResponse.CrewApplyResponse cancelCrewApplication(Member member, Long crewId);
void deleteCrew(Member member, Long crewId);
void deleteCrewSchedule(Member member, Long scheduleId);
void deleteFavoriteCourse(Member member, Long courseId,Long crewId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,21 +243,23 @@ public CrewResponse.CrewIdResponse createCrew(

@Override
@Transactional
public void applyToCrew(Member member, Long crewId) {
// 크루 존재 여부 확인
public CrewResponse.CrewApplyResponse applyToCrew(Member member, Long crewId) {
Crew crew = crewRepository.getCrew(crewId);
// 이미 신청했는지 확인
Optional<CrewMember> crewMember = crewMemberRepository.findByCrewAndMember(crew, member);
if (crewMember.isEmpty()) {
crewMemberRepository.save(crewEntityMapper.toCrewMember(crew, member));
return;
} else if (crewMember.get().getStatus() == CrewMemberStatus.REJECT) {
crewMember.get().updateStatus(CrewMemberStatus.READY);
return;
}
throw new CustomException(CrewErrorCode.CREW_APPLY_REJECT);

return crewMember.map(existingCrewMember -> {
if (existingCrewMember.getStatus() == CrewMemberStatus.REJECT) {
existingCrewMember.updateStatus(CrewMemberStatus.READY);
return new CrewResponse.CrewApplyResponse(member.getId(), existingCrewMember.getStatus().getToKorean());
}
throw new CustomException(CrewErrorCode.CREW_APPLY_REJECT);
}).orElseGet(() -> {
CrewMember newCrewMember = crewMemberRepository.save(crewEntityMapper.toCrewMember(crew, member));
return new CrewResponse.CrewApplyResponse(member.getId(), newCrewMember.getStatus().getToKorean());
});
}


@Override
@Transactional
public CrewResponse.CrewScheduleIdResponse registerSchedule(Member member, Long crewId, CrewRequest.CreateSchedule request) {
Expand Down Expand Up @@ -464,13 +466,14 @@ public void changeLeader(Member currentMember, Long crewId, Long newLeaderId) {

@Override
@Transactional
public void cancelCrewApplication(Member member, Long crewId) {
public CrewResponse.CrewApplyResponse cancelCrewApplication(Member member, Long crewId) {
Crew crew = crewRepository.getCrew(crewId);

CrewMember crewMember = crewMemberRepository.findByCrewAndMemberAndStatus(crew, member, CrewMemberStatus.READY)
.orElseThrow(() -> new CustomException(CrewErrorCode.NO_APPLY_CREW));

crewMember.delete();
return new CrewResponse.CrewApplyResponse(member.getId(), CrewMemberStatus.REJECT.getToKorean());
}

@Override
Expand Down

0 comments on commit 1d87751

Please sign in to comment.