Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Event 이벤트 신청 의존성 분리 #274

Merged
merged 4 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -60,23 +52,11 @@ 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()));
}

@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
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
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
@RequiredArgsConstructor
@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();
applyService.update(eventId, applyUpdateVo);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -18,27 +18,27 @@ 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();
}

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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
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;

@Getter
private String rejectMessage;

public EventReject(Long menteeId, String rejectMessage) {
public ApplimentReject(Long menteeId, String rejectMessage) {
this.menteeId = menteeId;
this.rejectMessage = rejectMessage;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -68,10 +66,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<Event> getAll(AllEventFilter filter) {
if (filter.mentorId() != null) {
Expand Down Expand Up @@ -111,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 실행 됨");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
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
public class MenteeToEventService implements ApplyProvider {

private final MenteeToEventRepository menteeToEventRepository;

private final EventRepository eventRepository;

@Transactional(readOnly = true)
public List<MenteeToEvent> getEventsRelatedToResume(Long resumeId) {
return menteeToEventRepository.findAllByResumeId(resumeId);
Expand All @@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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();

}
Loading