From 465958e8a32b7b79814a148402d69ad75a341b4f Mon Sep 17 00:00:00 2001 From: JuHongseok Date: Thu, 23 Nov 2023 22:31:25 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20API?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/controller/EventController.java | 5 ---- .../resumeme/business/event/domain/Event.java | 12 --------- .../business/event/service/EventService.java | 4 --- .../event/controller/EventControllerTest.java | 20 -------------- .../business/event/domain/EventTest.java | 27 ------------------- 5 files changed, 68 deletions(-) diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java b/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java index f6d03f44..7bc937b6 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java +++ b/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java @@ -72,11 +72,6 @@ public void rejectApply(@PathVariable Long eventId, @PathVariable Long menteeId, eventService.reject(new EventReject(eventId, menteeId, request.rejectMessage())); } - @PatchMapping("/{eventId}/resumes/{resumeId}/mentee") - public void requestReview(@PathVariable Long eventId, @AuthenticationPrincipal JwtUser user) { - eventService.requestReview(eventId, user.id()); - } - @PatchMapping("/{eventId}/resumes/{resumeId}/complete") public void completeReview( @PathVariable Long eventId, @PathVariable Long resumeId, @RequestBody CompleteEventRequest request, @AuthenticationPrincipal JwtUser user diff --git a/src/main/java/org/devcourse/resumeme/business/event/domain/Event.java b/src/main/java/org/devcourse/resumeme/business/event/domain/Event.java index a60f4a69..1ba53d5e 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/domain/Event.java +++ b/src/main/java/org/devcourse/resumeme/business/event/domain/Event.java @@ -154,18 +154,6 @@ public void checkOpen() { } } - public void requestReview(Long menteeId) { - applicants.stream() - .filter(applicant -> applicant.isSameMentee(menteeId)) - .findFirst() - .ifPresentOrElse( - MenteeToEvent::requestReview, - () -> { - throw new EventException(MENTEE_NOT_FOUND); - } - ); - } - public String title() { return eventInfo.getTitle(); } diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java b/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java index d460a730..9fa0f8ec 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java +++ b/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java @@ -68,10 +68,6 @@ public Event getOne(Long eventId) { .orElseThrow(() -> new EventException(EVENT_NOT_FOUND)); } - public void requestReview(Long eventId, Long menteeId) { - getOne(eventId).requestReview(menteeId); - } - @Transactional(readOnly = true) public List getAll(AllEventFilter filter) { if (filter.mentorId() != null) { diff --git a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java b/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java index 80ec09f0..79b4bb9b 100644 --- a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java +++ b/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java @@ -225,26 +225,6 @@ void setUp() { ); } - @Test - @WithMockCustomUser - void 리뷰_재_요청을_신청한다() throws Exception { - // given - Long eventId = 1L; - - // when - ResultActions result = mvc.perform(patch("/api/v1/events/{eventId}/resumes/{resumeId}/mentee", eventId, 1L)); - - // then - result - .andExpect(status().isOk()) - .andDo( - document("event/requestReview", - getDocumentRequest(), - getDocumentResponse() - ) - ); - } - @Test @WithMockCustomUser void 첨삭_이벤트_리뷰를_완료한다() throws Exception { diff --git a/src/test/java/org/devcourse/resumeme/business/event/domain/EventTest.java b/src/test/java/org/devcourse/resumeme/business/event/domain/EventTest.java index 5a674440..b5271d19 100644 --- a/src/test/java/org/devcourse/resumeme/business/event/domain/EventTest.java +++ b/src/test/java/org/devcourse/resumeme/business/event/domain/EventTest.java @@ -154,31 +154,4 @@ void init() { .isInstanceOf(EventException.class); } - @Test - void 리뷰_재요청_성공한다() { - // given - Long menteeId = 1L; - event.acceptMentee(menteeId, 1L); - - // when - event.requestReview(1L); - - // then - assertThat(event).usingRecursiveComparison() - .comparingOnlyFields("applicants.progress") - .isEqualTo(REQUEST); - } - - @Test - void 참여한_멘티가_아니라_재요청에_실패한다() { - // given - Long menteeId = 1L; - event.acceptMentee(menteeId, 1L); - - // when & then - assertThatThrownBy(() -> event.requestReview(2L)) - .isInstanceOf(EventException.class); - } - - } From 64eedf53294d78f0e6e5354e3dbd24565e27a372 Mon Sep 17 00:00:00 2001 From: JuHongseok Date: Thu, 23 Nov 2023 23:03:40 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20EventService=20Apply=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/controller/EventControllerV2.java | 23 ------------------- .../controller/MenteeToEventController.java | 22 ++++++++++++++++++ ...teRequest.java => ApplyUpdateRequest.java} | 20 ++++++++-------- .../ApplimentComplete.java} | 6 ++--- .../ApplimentReject.java} | 6 ++--- .../ApplimentUpdate.java} | 4 ++-- .../business/event/service/EventService.java | 8 ------- .../event/service/MenteeToEventService.java | 17 ++++++++++++++ .../event/service/vo/ApplyComplete.java | 22 ++++++++++++++++++ .../event/service/vo/ApplyReject.java | 22 ++++++++++++++++++ .../event/service/vo/ApplyUpdateVo.java | 9 ++++++++ .../event/service/vo/EventCompleteV2.java | 22 ------------------ .../event/service/vo/EventRejectV2.java | 22 ------------------ .../event/service/vo/EventUpdateVo.java | 9 -------- 14 files changed, 110 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/org/devcourse/resumeme/business/event/controller/EventControllerV2.java create mode 100644 src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java rename src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/{EventUpdateRequest.java => ApplyUpdateRequest.java} (53%) rename src/main/java/org/devcourse/resumeme/business/event/domain/{vo/EventComplete.java => model/ApplimentComplete.java} (63%) rename src/main/java/org/devcourse/resumeme/business/event/domain/{vo/EventReject.java => model/ApplimentReject.java} (66%) rename src/main/java/org/devcourse/resumeme/business/event/domain/{vo/EventUpdateModel.java => model/ApplimentUpdate.java} (50%) create mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyComplete.java create mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyReject.java create mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyUpdateVo.java delete mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/EventCompleteV2.java delete mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/EventRejectV2.java delete mode 100644 src/main/java/org/devcourse/resumeme/business/event/service/vo/EventUpdateVo.java diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/EventControllerV2.java b/src/main/java/org/devcourse/resumeme/business/event/controller/EventControllerV2.java deleted file mode 100644 index d286ca29..00000000 --- a/src/main/java/org/devcourse/resumeme/business/event/controller/EventControllerV2.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.devcourse.resumeme.business.event.controller; - -import lombok.RequiredArgsConstructor; -import org.devcourse.resumeme.business.event.controller.dto.v2.EventUpdateRequest; -import org.devcourse.resumeme.business.event.service.EventService; -import org.devcourse.resumeme.business.event.service.vo.EventUpdateVo; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/api/v2/events") -public class EventControllerV2 { - - private final EventService eventService; - - @PatchMapping("/{eventId}") - public void updateEvent(@PathVariable Long eventId, @RequestBody EventUpdateRequest request) { - EventUpdateVo eventUpdateVo = request.toVo(); - eventService.update(eventId, eventUpdateVo); - } - -} - diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java b/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java new file mode 100644 index 00000000..e5a6ed4d --- /dev/null +++ b/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java @@ -0,0 +1,22 @@ +package org.devcourse.resumeme.business.event.controller; + +import lombok.RequiredArgsConstructor; +import org.devcourse.resumeme.business.event.controller.dto.v2.ApplyUpdateRequest; +import org.devcourse.resumeme.business.event.service.MenteeToEventService; +import org.devcourse.resumeme.business.event.service.vo.ApplyUpdateVo; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/appliments/events") +public class MenteeToEventController { + + private final MenteeToEventService applyService; + + @PatchMapping("/{eventId}") + public void updateEvent(@PathVariable Long eventId, @RequestBody ApplyUpdateRequest request) { + ApplyUpdateVo applyUpdateVo = request.toVo(); + applyService.update(eventId, applyUpdateVo); + } + +} diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/EventUpdateRequest.java b/src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/ApplyUpdateRequest.java similarity index 53% rename from src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/EventUpdateRequest.java rename to src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/ApplyUpdateRequest.java index 0485fa34..19e931fb 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/EventUpdateRequest.java +++ b/src/main/java/org/devcourse/resumeme/business/event/controller/dto/v2/ApplyUpdateRequest.java @@ -2,13 +2,13 @@ import lombok.Data; import lombok.NoArgsConstructor; -import org.devcourse.resumeme.business.event.service.vo.EventCompleteV2; -import org.devcourse.resumeme.business.event.service.vo.EventRejectV2; -import org.devcourse.resumeme.business.event.service.vo.EventUpdateVo; +import org.devcourse.resumeme.business.event.service.vo.ApplyComplete; +import org.devcourse.resumeme.business.event.service.vo.ApplyReject; +import org.devcourse.resumeme.business.event.service.vo.ApplyUpdateVo; @Data @NoArgsConstructor -public class EventUpdateRequest { +public class ApplyUpdateRequest { private Long menteeId; @@ -18,14 +18,14 @@ public class EventUpdateRequest { private String completeMessage; - public EventUpdateRequest(Long menteeId, String rejectMessage, Long resumeId, String completeMessage) { + public ApplyUpdateRequest(Long menteeId, String rejectMessage, Long resumeId, String completeMessage) { this.menteeId = menteeId; this.rejectMessage = rejectMessage; this.resumeId = resumeId; this.completeMessage = completeMessage; } - public EventUpdateVo toVo() { + public ApplyUpdateVo toVo() { if (rejectMessage != null) { return toReject(); } @@ -33,12 +33,12 @@ public EventUpdateVo toVo() { return toComplete(); } - private EventUpdateVo toReject() { - return new EventRejectV2(menteeId, rejectMessage); + private ApplyUpdateVo toReject() { + return new ApplyReject(menteeId, rejectMessage); } - private EventUpdateVo toComplete() { - return new EventCompleteV2(resumeId, completeMessage); + private ApplyUpdateVo toComplete() { + return new ApplyComplete(resumeId, completeMessage); } } diff --git a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventComplete.java b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentComplete.java similarity index 63% rename from src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventComplete.java rename to src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentComplete.java index 23c3b3c9..d27deed2 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventComplete.java +++ b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentComplete.java @@ -1,14 +1,14 @@ -package org.devcourse.resumeme.business.event.domain.vo; +package org.devcourse.resumeme.business.event.domain.model; import org.devcourse.resumeme.business.event.domain.Event; -public class EventComplete implements EventUpdateModel { +public class ApplimentComplete implements ApplimentUpdate { private Long resumeId; private String completeMessage; - public EventComplete(Long resumeId, String completeMessage) { + public ApplimentComplete(Long resumeId, String completeMessage) { this.resumeId = resumeId; this.completeMessage = completeMessage; } diff --git a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventReject.java b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentReject.java similarity index 66% rename from src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventReject.java rename to src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentReject.java index 02019475..07485ee7 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventReject.java +++ b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentReject.java @@ -1,9 +1,9 @@ -package org.devcourse.resumeme.business.event.domain.vo; +package org.devcourse.resumeme.business.event.domain.model; import lombok.Getter; import org.devcourse.resumeme.business.event.domain.Event; -public class EventReject implements EventUpdateModel { +public class ApplimentReject implements ApplimentUpdate { @Getter private Long menteeId; @@ -11,7 +11,7 @@ public class EventReject implements EventUpdateModel { @Getter private String rejectMessage; - public EventReject(Long menteeId, String rejectMessage) { + public ApplimentReject(Long menteeId, String rejectMessage) { this.menteeId = menteeId; this.rejectMessage = rejectMessage; } diff --git a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventUpdateModel.java b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentUpdate.java similarity index 50% rename from src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventUpdateModel.java rename to src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentUpdate.java index 1c4a4b4a..c5b644b4 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/domain/vo/EventUpdateModel.java +++ b/src/main/java/org/devcourse/resumeme/business/event/domain/model/ApplimentUpdate.java @@ -1,8 +1,8 @@ -package org.devcourse.resumeme.business.event.domain.vo; +package org.devcourse.resumeme.business.event.domain.model; import org.devcourse.resumeme.business.event.domain.Event; -public interface EventUpdateModel { +public interface ApplimentUpdate { void update(Event event); diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java b/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java index 9fa0f8ec..996e4cc4 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java +++ b/src/main/java/org/devcourse/resumeme/business/event/service/EventService.java @@ -5,13 +5,11 @@ import org.devcourse.resumeme.business.event.domain.Event; import org.devcourse.resumeme.business.event.domain.EventStatus; import org.devcourse.resumeme.business.event.domain.MenteeToEvent; -import org.devcourse.resumeme.business.event.domain.vo.EventUpdateModel; import org.devcourse.resumeme.business.event.exception.EventException; import org.devcourse.resumeme.business.event.repository.EventRepository; import org.devcourse.resumeme.business.event.service.vo.AcceptMenteeToEvent; import org.devcourse.resumeme.business.event.service.vo.AllEventFilter; import org.devcourse.resumeme.business.event.service.vo.EventReject; -import org.devcourse.resumeme.business.event.service.vo.EventUpdateVo; import org.devcourse.resumeme.global.exception.CustomException; import org.devcourse.resumeme.global.exception.ExceptionCode; import org.springframework.data.domain.Page; @@ -107,12 +105,6 @@ public MenteeToEvent getMenteeToEvent(Long eventId, Long resumeId) { .orElseThrow(() -> new CustomException(RESUME_NOT_FOUND)); } - public void update(Long eventId, EventUpdateVo eventUpdateVo) { - Event event = getOne(eventId); - EventUpdateModel model = eventUpdateVo.toModel(); - model.update(event); - } - @Scheduled(cron = "0 0 0/1 * * *") public void openBookedEvents() { log.info("scheduler 실행 됨"); diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/MenteeToEventService.java b/src/main/java/org/devcourse/resumeme/business/event/service/MenteeToEventService.java index 4b5898ee..3a012f99 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/service/MenteeToEventService.java +++ b/src/main/java/org/devcourse/resumeme/business/event/service/MenteeToEventService.java @@ -1,13 +1,20 @@ package org.devcourse.resumeme.business.event.service; import lombok.RequiredArgsConstructor; +import org.devcourse.resumeme.business.event.domain.Event; import org.devcourse.resumeme.business.event.domain.MenteeToEvent; +import org.devcourse.resumeme.business.event.domain.model.ApplimentUpdate; +import org.devcourse.resumeme.business.event.exception.EventException; +import org.devcourse.resumeme.business.event.repository.EventRepository; import org.devcourse.resumeme.business.event.repository.MenteeToEventRepository; +import org.devcourse.resumeme.business.event.service.vo.ApplyUpdateVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import static org.devcourse.resumeme.global.exception.ExceptionCode.EVENT_NOT_FOUND; + @Service @Transactional @RequiredArgsConstructor @@ -15,6 +22,8 @@ public class MenteeToEventService implements ApplyProvider { private final MenteeToEventRepository menteeToEventRepository; + private final EventRepository eventRepository; + @Transactional(readOnly = true) public List getEventsRelatedToResume(Long resumeId) { return menteeToEventRepository.findAllByResumeId(resumeId); @@ -27,4 +36,12 @@ public Long getApplyEventCount(Long menteeId) { .count(); } + public void update(Long eventId, ApplyUpdateVo applyUpdateVo) { + Event event = eventRepository.findWithApplicantsById(eventId) + .orElseThrow(() -> new EventException(EVENT_NOT_FOUND)); + + ApplimentUpdate model = applyUpdateVo.toModel(); + model.update(event); + } + } diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyComplete.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyComplete.java new file mode 100644 index 00000000..1515b81f --- /dev/null +++ b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyComplete.java @@ -0,0 +1,22 @@ +package org.devcourse.resumeme.business.event.service.vo; + +import org.devcourse.resumeme.business.event.domain.model.ApplimentComplete; +import org.devcourse.resumeme.business.event.domain.model.ApplimentUpdate; + +public class ApplyComplete implements ApplyUpdateVo { + + private Long resumeId; + + private String completeMessage; + + public ApplyComplete(Long resumeId, String completeMessage) { + this.resumeId = resumeId; + this.completeMessage = completeMessage; + } + + @Override + public ApplimentUpdate toModel() { + return new ApplimentComplete(resumeId, completeMessage); + } + +} diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyReject.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyReject.java new file mode 100644 index 00000000..356a4f52 --- /dev/null +++ b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyReject.java @@ -0,0 +1,22 @@ +package org.devcourse.resumeme.business.event.service.vo; + +import org.devcourse.resumeme.business.event.domain.model.ApplimentReject; +import org.devcourse.resumeme.business.event.domain.model.ApplimentUpdate; + +public final class ApplyReject implements ApplyUpdateVo { + + private final Long menteeId; + + private final String rejectMessage; + + public ApplyReject(Long menteeId, String rejectMessage) { + this.menteeId = menteeId; + this.rejectMessage = rejectMessage; + } + + @Override + public ApplimentUpdate toModel() { + return new ApplimentReject(menteeId, rejectMessage); + } + +} diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyUpdateVo.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyUpdateVo.java new file mode 100644 index 00000000..4ccdf177 --- /dev/null +++ b/src/main/java/org/devcourse/resumeme/business/event/service/vo/ApplyUpdateVo.java @@ -0,0 +1,9 @@ +package org.devcourse.resumeme.business.event.service.vo; + +import org.devcourse.resumeme.business.event.domain.model.ApplimentUpdate; + +public interface ApplyUpdateVo { + + ApplimentUpdate toModel(); + +} diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventCompleteV2.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventCompleteV2.java deleted file mode 100644 index cb2b9443..00000000 --- a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventCompleteV2.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.devcourse.resumeme.business.event.service.vo; - -import org.devcourse.resumeme.business.event.domain.vo.EventComplete; -import org.devcourse.resumeme.business.event.domain.vo.EventUpdateModel; - -public class EventCompleteV2 implements EventUpdateVo { - - private Long resumeId; - - private String completeMessage; - - public EventCompleteV2(Long resumeId, String completeMessage) { - this.resumeId = resumeId; - this.completeMessage = completeMessage; - } - - @Override - public EventUpdateModel toModel() { - return new EventComplete(resumeId, completeMessage); - } - -} diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventRejectV2.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventRejectV2.java deleted file mode 100644 index 31d0d8ba..00000000 --- a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventRejectV2.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.devcourse.resumeme.business.event.service.vo; - -import org.devcourse.resumeme.business.event.domain.vo.EventReject; -import org.devcourse.resumeme.business.event.domain.vo.EventUpdateModel; - -public final class EventRejectV2 implements EventUpdateVo { - - private final Long menteeId; - - private final String rejectMessage; - - public EventRejectV2(Long menteeId, String rejectMessage) { - this.menteeId = menteeId; - this.rejectMessage = rejectMessage; - } - - @Override - public EventUpdateModel toModel() { - return new EventReject(menteeId, rejectMessage); - } - -} diff --git a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventUpdateVo.java b/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventUpdateVo.java deleted file mode 100644 index f6409496..00000000 --- a/src/main/java/org/devcourse/resumeme/business/event/service/vo/EventUpdateVo.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.devcourse.resumeme.business.event.service.vo; - -import org.devcourse.resumeme.business.event.domain.vo.EventUpdateModel; - -public interface EventUpdateVo { - - EventUpdateModel toModel(); - -} From 52978cef7620c0f5fb001904cd1db1d6b2c8c05d Mon Sep 17 00:00:00 2001 From: JuHongseok Date: Thu, 23 Nov 2023 23:05:01 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20test=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ....java => MenteeToEventControllerTest.java} | 21 +++++++++---------- .../resumeme/common/ControllerUnitTest.java | 4 ++-- 2 files changed, 12 insertions(+), 13 deletions(-) rename src/test/java/org/devcourse/resumeme/business/event/controller/{EventControllerV2Test.java => MenteeToEventControllerTest.java} (87%) diff --git a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerV2Test.java b/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java similarity index 87% rename from src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerV2Test.java rename to src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java index 4df340dd..9e59a3e2 100644 --- a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerV2Test.java +++ b/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java @@ -1,6 +1,6 @@ package org.devcourse.resumeme.business.event.controller; -import org.devcourse.resumeme.business.event.controller.dto.v2.EventUpdateRequest; +import org.devcourse.resumeme.business.event.controller.dto.v2.ApplyUpdateRequest; import org.devcourse.resumeme.common.ControllerUnitTest; import org.devcourse.resumeme.common.support.WithMockCustomUser; import org.junit.jupiter.api.Test; @@ -11,8 +11,9 @@ import static org.devcourse.resumeme.common.util.ApiDocumentUtils.getDocumentRequest; import static org.devcourse.resumeme.common.util.ApiDocumentUtils.getDocumentResponse; -import static org.devcourse.resumeme.global.exception.ExceptionCode.*; -import static org.mockito.Mockito.doNothing; +import static org.devcourse.resumeme.global.exception.ExceptionCode.EVENT_NOT_FOUND; +import static org.devcourse.resumeme.global.exception.ExceptionCode.EVENT_REJECTED; +import static org.devcourse.resumeme.global.exception.ExceptionCode.RESUME_NOT_FOUND; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; @@ -23,16 +24,15 @@ import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -class EventControllerV2Test extends ControllerUnitTest { +class MenteeToEventControllerTest extends ControllerUnitTest { @Test void 첨삭_이벤트_신청을_반려한다() throws Exception { // given - EventUpdateRequest request = new EventUpdateRequest(1L, "반려 메시지", null, null); - doNothing().when(eventService).update(1L, request.toVo()); + ApplyUpdateRequest request = new ApplyUpdateRequest(1L, "반려 메시지", null, null); // when - ResultActions result = mvc.perform(patch("/api/v2/events/{eventId}", 1L) + ResultActions result = mvc.perform(patch("/api/v1/appliments/events/{eventId}", 1L) .contentType(MediaType.APPLICATION_JSON) .content(toJson(request))); @@ -62,11 +62,10 @@ class EventControllerV2Test extends ControllerUnitTest { @WithMockCustomUser void 첨삭_이벤트_리뷰를_완료한다() throws Exception { // given - EventUpdateRequest request = new EventUpdateRequest(null, null, 1L, "좋은 이력서에요."); - doNothing().when(eventService).update(1L, request.toVo()); + ApplyUpdateRequest request = new ApplyUpdateRequest(null, null, 1L, "좋은 이력서에요."); // when - ResultActions result = mvc.perform(patch("/api/v2/events/{eventId}", 1L) + ResultActions result = mvc.perform(patch("/api/v1/appliments/events/{eventId}", 1L) .contentType(MediaType.APPLICATION_JSON) .content(toJson(request))); @@ -93,4 +92,4 @@ class EventControllerV2Test extends ControllerUnitTest { ); } -} \ No newline at end of file +} diff --git a/src/test/java/org/devcourse/resumeme/common/ControllerUnitTest.java b/src/test/java/org/devcourse/resumeme/common/ControllerUnitTest.java index 20917c03..ddc449c6 100644 --- a/src/test/java/org/devcourse/resumeme/common/ControllerUnitTest.java +++ b/src/test/java/org/devcourse/resumeme/common/ControllerUnitTest.java @@ -5,7 +5,7 @@ import org.devcourse.resumeme.business.comment.controller.CommentController; import org.devcourse.resumeme.business.comment.service.CommentService; import org.devcourse.resumeme.business.event.controller.EventController; -import org.devcourse.resumeme.business.event.controller.EventControllerV2; +import org.devcourse.resumeme.business.event.controller.MenteeToEventController; import org.devcourse.resumeme.business.event.service.EventPositionService; import org.devcourse.resumeme.business.event.service.EventService; import org.devcourse.resumeme.business.event.service.MenteeToEventService; @@ -78,7 +78,7 @@ FilterTestController.class, UserEventController.class, ResumeControllerV2.class, - EventControllerV2.class, + MenteeToEventController.class, SnapshotController.class }) @AutoConfigureRestDocs From bbd12c25b4ecfecdbb657fc3645682dd01250a57 Mon Sep 17 00:00:00 2001 From: JuHongseok Date: Thu, 23 Nov 2023 23:18:00 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=20=EC=8B=A0=EC=B2=AD=20API=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/controller/EventController.java | 15 ----- .../controller/MenteeToEventController.java | 20 ++++++ .../event/controller/EventControllerTest.java | 37 ----------- .../MenteeToEventControllerTest.java | 62 +++++++++++++++++++ 4 files changed, 82 insertions(+), 52 deletions(-) diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java b/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java index 7bc937b6..2ee4c853 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java +++ b/src/main/java/org/devcourse/resumeme/business/event/controller/EventController.java @@ -1,7 +1,6 @@ package org.devcourse.resumeme.business.event.controller; import lombok.RequiredArgsConstructor; -import org.devcourse.resumeme.business.event.controller.dto.ApplyToEventRequest; import org.devcourse.resumeme.business.event.controller.dto.CompleteEventRequest; import org.devcourse.resumeme.business.event.controller.dto.EventCreateRequest; import org.devcourse.resumeme.business.event.controller.dto.EventInfoResponse; @@ -12,11 +11,8 @@ import org.devcourse.resumeme.business.event.domain.EventPosition; import org.devcourse.resumeme.business.event.service.EventPositionService; import org.devcourse.resumeme.business.event.service.EventService; -import org.devcourse.resumeme.business.event.service.vo.AcceptMenteeToEvent; import org.devcourse.resumeme.business.event.service.vo.AllEventFilter; import org.devcourse.resumeme.business.event.service.vo.EventReject; -import org.devcourse.resumeme.business.resume.service.ComponentService; -import org.devcourse.resumeme.business.resume.service.ResumeService; import org.devcourse.resumeme.business.user.domain.mentor.Mentor; import org.devcourse.resumeme.business.user.service.mentor.MentorService; import org.devcourse.resumeme.common.response.IdResponse; @@ -44,14 +40,10 @@ public class EventController { private final EventService eventService; - private final ResumeService resumeService; - private final MentorService mentorService; private final EventPositionService eventPositionService; - private final ComponentService componentService; - @PostMapping public IdResponse createEvent(@RequestBody EventCreateRequest request, @AuthenticationPrincipal JwtUser user) { Mentor mentor = mentorService.getOne(user.id()); @@ -60,13 +52,6 @@ public IdResponse createEvent(@RequestBody EventCreateRequest request, @Authenti return new IdResponse(eventService.create(event)); } - @PatchMapping("/{eventId}") - public void applyEvent(@PathVariable Long eventId, @RequestBody ApplyToEventRequest request, @AuthenticationPrincipal JwtUser user) { - Long copyResumeId = resumeService.copyResume(request.resumeId()); - componentService.copy(request.resumeId(), copyResumeId); - eventService.acceptMentee(new AcceptMenteeToEvent(eventId, user.id(), copyResumeId)); - } - @PatchMapping("/{eventId}/mentee/{menteeId}") public void rejectApply(@PathVariable Long eventId, @PathVariable Long menteeId, @RequestBody EventRejectRequest request) { eventService.reject(new EventReject(eventId, menteeId, request.rejectMessage())); diff --git a/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java b/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java index e5a6ed4d..439c422a 100644 --- a/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java +++ b/src/main/java/org/devcourse/resumeme/business/event/controller/MenteeToEventController.java @@ -1,9 +1,16 @@ package org.devcourse.resumeme.business.event.controller; import lombok.RequiredArgsConstructor; +import org.devcourse.resumeme.business.event.controller.dto.ApplyToEventRequest; import org.devcourse.resumeme.business.event.controller.dto.v2.ApplyUpdateRequest; +import org.devcourse.resumeme.business.event.service.EventService; import org.devcourse.resumeme.business.event.service.MenteeToEventService; +import org.devcourse.resumeme.business.event.service.vo.AcceptMenteeToEvent; import org.devcourse.resumeme.business.event.service.vo.ApplyUpdateVo; +import org.devcourse.resumeme.business.resume.service.ComponentService; +import org.devcourse.resumeme.business.resume.service.ResumeService; +import org.devcourse.resumeme.global.auth.model.jwt.JwtUser; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @RestController @@ -11,8 +18,21 @@ @RequestMapping("/api/v1/appliments/events") public class MenteeToEventController { + private final ResumeService resumeService; + + private final ComponentService componentService; + private final MenteeToEventService applyService; + private final EventService eventService; + + @PostMapping("/{eventId}") + public void applyEvent(@PathVariable Long eventId, @RequestBody ApplyToEventRequest request, @AuthenticationPrincipal JwtUser user) { + Long copyResumeId = resumeService.copyResume(request.resumeId()); + componentService.copy(request.resumeId(), copyResumeId); + eventService.acceptMentee(new AcceptMenteeToEvent(eventId, user.id(), copyResumeId)); + } + @PatchMapping("/{eventId}") public void updateEvent(@PathVariable Long eventId, @RequestBody ApplyUpdateRequest request) { ApplyUpdateVo applyUpdateVo = request.toVo(); diff --git a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java b/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java index 79b4bb9b..0c091aff 100644 --- a/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java +++ b/src/test/java/org/devcourse/resumeme/business/event/controller/EventControllerTest.java @@ -157,43 +157,6 @@ void setUp() { ); } - @Test - @WithMockCustomUser - void 첨삭_이벤트_참여에_성공한다() throws Exception { - // given - EventInfo openEvent = EventInfo.open(3, "제목", "내용"); - EventTimeInfo eventTimeInfo = EventTimeInfo.onStart(LocalDateTime.now(), LocalDateTime.now().plusHours(1L), LocalDateTime.now().plusHours(2L)); - Event event = new Event(openEvent, eventTimeInfo, mentor, List.of()); - event.acceptMentee(1L, 1L); - - ApplyToEventRequest request = new ApplyToEventRequest(1L); - doNothing().when(eventService).acceptMentee(new AcceptMenteeToEvent(1L, 1L, 1L)); - - // when - ResultActions result = mvc.perform(patch("/api/v1/events/{eventId}", 1L) - .contentType(MediaType.APPLICATION_JSON) - .content(toJson(request))); - - // then - result - .andExpect(status().isOk()) - .andDo( - document("event/apply", - getDocumentRequest(), - getDocumentResponse(), - pathParameters( - parameterWithName("eventId").description("참여하고 싶은 이벤트 아이디") - ), - exceptionResponse( - List.of(EVENT_NOT_FOUND.name()) - ), - requestFields( - fieldWithPath("resumeId").type(NUMBER).description("이벤트 참여시 사용할 이력서 아이디") - ) - ) - ); - } - @Test void 첨삭_이벤트_신청을_반려한다() throws Exception { // given diff --git a/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java b/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java index 9e59a3e2..eb164a60 100644 --- a/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java +++ b/src/test/java/org/devcourse/resumeme/business/event/controller/MenteeToEventControllerTest.java @@ -1,21 +1,34 @@ package org.devcourse.resumeme.business.event.controller; +import org.devcourse.resumeme.business.event.controller.dto.ApplyToEventRequest; import org.devcourse.resumeme.business.event.controller.dto.v2.ApplyUpdateRequest; +import org.devcourse.resumeme.business.event.domain.Event; +import org.devcourse.resumeme.business.event.domain.EventInfo; +import org.devcourse.resumeme.business.event.domain.EventTimeInfo; +import org.devcourse.resumeme.business.event.service.vo.AcceptMenteeToEvent; +import org.devcourse.resumeme.business.user.domain.Provider; +import org.devcourse.resumeme.business.user.domain.Role; +import org.devcourse.resumeme.business.user.domain.mentee.RequiredInfo; +import org.devcourse.resumeme.business.user.domain.mentor.Mentor; import org.devcourse.resumeme.common.ControllerUnitTest; import org.devcourse.resumeme.common.support.WithMockCustomUser; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; +import java.time.LocalDateTime; import java.util.List; +import java.util.Set; import static org.devcourse.resumeme.common.util.ApiDocumentUtils.getDocumentRequest; import static org.devcourse.resumeme.common.util.ApiDocumentUtils.getDocumentResponse; import static org.devcourse.resumeme.global.exception.ExceptionCode.EVENT_NOT_FOUND; import static org.devcourse.resumeme.global.exception.ExceptionCode.EVENT_REJECTED; import static org.devcourse.resumeme.global.exception.ExceptionCode.RESUME_NOT_FOUND; +import static org.mockito.Mockito.doNothing; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; @@ -92,4 +105,53 @@ class MenteeToEventControllerTest extends ControllerUnitTest { ); } + @Test + @WithMockCustomUser + void 첨삭_이벤트_참여에_성공한다() throws Exception { + // given + Mentor mentor = Mentor.builder() + .id(1L) + .imageUrl("profile.png") + .provider(Provider.valueOf("GOOGLE")) + .email("progrers33@gmail.com") + .refreshToken("redididkeeeeegg") + .requiredInfo(new RequiredInfo("김주승", "주승멘토", "01022332375", Role.ROLE_MENTOR)) + .experiencedPositions(Set.of("FRONT")) + .careerContent("금융회사 다님") + .careerYear(3) + .build(); + + EventInfo openEvent = EventInfo.open(3, "제목", "내용"); + EventTimeInfo eventTimeInfo = EventTimeInfo.onStart(LocalDateTime.now(), LocalDateTime.now().plusHours(1L), LocalDateTime.now().plusHours(2L)); + Event event = new Event(openEvent, eventTimeInfo, mentor, List.of()); + event.acceptMentee(1L, 1L); + + ApplyToEventRequest request = new ApplyToEventRequest(1L); + doNothing().when(eventService).acceptMentee(new AcceptMenteeToEvent(1L, 1L, 1L)); + + // when + ResultActions result = mvc.perform(post("/api/v1/appliments/events/{eventId}", 1L) + .contentType(MediaType.APPLICATION_JSON) + .content(toJson(request))); + + // then + result + .andExpect(status().isOk()) + .andDo( + document("event/apply", + getDocumentRequest(), + getDocumentResponse(), + pathParameters( + parameterWithName("eventId").description("참여하고 싶은 이벤트 아이디") + ), + exceptionResponse( + List.of(EVENT_NOT_FOUND.name()) + ), + requestFields( + fieldWithPath("resumeId").type(NUMBER).description("이벤트 참여시 사용할 이력서 아이디") + ) + ) + ); + } + }