diff --git a/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java b/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java index 1814c8e..40a5a33 100644 --- a/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java +++ b/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java @@ -25,7 +25,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .requestMatchers("/member/sign-up", "/member/sign-in").permitAll() .requestMatchers("/member/**").permitAll() // Event 관련 접근 - .requestMatchers("/event/", "/event/{eventId}", "/event/member/{memberId}", "/event/member/{memberId}/event/{eventId}", "/event/member/{memberId}/date/{date}").permitAll() + .requestMatchers("/event/", "/event/{eventId}", "/event/member/{memberId}", "/event/member/{memberId}/event/{eventId}", "/event/member/{memberId}/date/{date}", "/event/multipleEvents/{memberId}/{generatorId}").permitAll() // Generator 관련 접근 .requestMatchers("/generator/", "/generator/{generatorId}").permitAll() // Bookmark 관련 접근 diff --git a/src/main/java/Capstone/AutoScheduler/global/converter/EventConverter.java b/src/main/java/Capstone/AutoScheduler/global/converter/EventConverter.java index ff92db9..dbe031f 100644 --- a/src/main/java/Capstone/AutoScheduler/global/converter/EventConverter.java +++ b/src/main/java/Capstone/AutoScheduler/global/converter/EventConverter.java @@ -23,6 +23,7 @@ public static EventResponseDTO.CreateEventResultDTO toCreateResultDTO(Event even return EventResponseDTO.CreateEventResultDTO.builder() .eventId(event.getEventId()) .memberId(event.getMember().getMemberId()) + .generatorId(event.getGenerator() != null ? event.getGenerator().getGeneratorId() : null) // generatorId 추가 .eventTitle(event.getEventTitle()) .eventBody(event.getEventBody()) .startDate(event.getStartDate()) @@ -30,6 +31,7 @@ public static EventResponseDTO.CreateEventResultDTO toCreateResultDTO(Event even .build(); } + public static EventResponseDTO.UpdateEventResultDTO UpdateEventResultDTO(Event event) { return EventResponseDTO.UpdateEventResultDTO.builder() .eventId(event.getEventId()) @@ -43,6 +45,7 @@ public static EventResponseDTO.UpdateEventResultDTO UpdateEventResultDTO(Event e public static EventResponseDTO.MemberEventPreviewDTO toMemberEventPreviewDTO(Event event) { return EventResponseDTO.MemberEventPreviewDTO.builder() .memberId(event.getMember().getMemberId()) + .generatorId(event.getGenerator() != null ? event.getGenerator().getGeneratorId() : null) // generatorId 추가 .eventId(event.getEventId()) .eventTitle(event.getEventTitle()) .eventBody(event.getEventBody()) diff --git a/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandService.java b/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandService.java index eb5026c..7c8aa4f 100644 --- a/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandService.java +++ b/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandService.java @@ -8,4 +8,5 @@ public interface EventCommandService { Event createEvent(Long memberId, EventRequestDTO.CreateEventRequestDTO request); Event updateEvent(Long memberId, Long eventId, EventRequestDTO.UpdateEventDTO request); void deleteEvent(Long memberId, Long eventId); + Event createEventWithGenerator(Long memberId, Long generatorId, EventRequestDTO.CreateEventRequestDTO request); } diff --git a/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandServiceImpl.java b/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandServiceImpl.java index 774f7f6..81c67c7 100644 --- a/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandServiceImpl.java +++ b/src/main/java/Capstone/AutoScheduler/global/service/EventService/EventCommandServiceImpl.java @@ -2,9 +2,11 @@ import Capstone.AutoScheduler.global.converter.EventConverter; import Capstone.AutoScheduler.global.domain.entity.Event; +import Capstone.AutoScheduler.global.domain.entity.Generator; import Capstone.AutoScheduler.global.domain.entity.Member; import Capstone.AutoScheduler.global.repository.EventRepository; import Capstone.AutoScheduler.global.repository.MemberRepository; +import Capstone.AutoScheduler.global.repository.GeneratorRepository; import Capstone.AutoScheduler.global.web.dto.Event.EventRequestDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,36 +21,67 @@ public class EventCommandServiceImpl implements EventCommandService { private final MemberRepository memberRepository; private final EventRepository eventRepository; + private final GeneratorRepository generatorRepository; @Override public Event createEvent(Long memberId, EventRequestDTO.CreateEventRequestDTO request) { + Member member = findMemberById(memberId); Event newEvent = EventConverter.toEvent(request); - Member getMember = memberRepository.findById(memberId) - .orElseThrow(() -> new IllegalArgumentException("해당 멤버가 존재하지 않습니다.")); - newEvent.setMember(getMember); + newEvent.setMember(member); Event savedEvent = eventRepository.save(newEvent); + log.info("Event created: {}", savedEvent); return savedEvent; } @Override public Event updateEvent(Long memberId, Long eventId, EventRequestDTO.UpdateEventDTO request) { - Member getMember = memberRepository.findById(memberId) - .orElseThrow(() -> new IllegalArgumentException("해당 멤버가 존재하지 않습니다.")); + Member member = findMemberById(memberId); - Event updateEvent = eventRepository.findById(eventId).get(); - updateEvent.update(request); - return updateEvent; + Event event = eventRepository.findById(eventId) + .orElseThrow(() -> new IllegalArgumentException("Event not found. ID: " + eventId)); + + event.update(request); + log.info("Event updated: {}", event); + return event; } @Override public void deleteEvent(Long memberId, Long eventId) { - Member getMember = memberRepository.findById(memberId) - .orElseThrow(() -> new IllegalArgumentException("해당 멤버가 존재하지 않습니다.")); + Member member = findMemberById(memberId); + + Event event = eventRepository.findById(eventId) + .orElseThrow(() -> new IllegalArgumentException("Event not found. ID: " + eventId)); + + eventRepository.delete(event); + log.info("Event deleted: {}", event); + } + + @Override + public Event createEventWithGenerator(Long memberId, Long generatorId, EventRequestDTO.CreateEventRequestDTO request) { + Member member = findMemberById(memberId); + Generator generator = findGeneratorById(generatorId); + + Event newEvent = EventConverter.toEvent(request); + newEvent.setMember(member); + newEvent.setGenerator(generator); - Event deleteEvent = eventRepository.findById(eventId).get(); - eventRepository.delete(deleteEvent); + Event savedEvent = eventRepository.save(newEvent); + log.info("Event created with generator: {}", savedEvent); + return savedEvent; + } + + + private Member findMemberById(Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new IllegalArgumentException("Member not found. ID: " + memberId)); + } + + private Generator findGeneratorById(Long generatorId) { + return generatorRepository.findById(generatorId) + .orElseThrow(() -> new IllegalArgumentException("Generator not found. ID: " + generatorId)); } + } diff --git a/src/main/java/Capstone/AutoScheduler/global/web/controller/EventController.java b/src/main/java/Capstone/AutoScheduler/global/web/controller/EventController.java index 6702e4a..f8a9a1c 100644 --- a/src/main/java/Capstone/AutoScheduler/global/web/controller/EventController.java +++ b/src/main/java/Capstone/AutoScheduler/global/web/controller/EventController.java @@ -79,28 +79,19 @@ public ApiResponse findEventByMemberAndE return ApiResponse.onSuccess(SuccessStatus.EVENT_OK, EventConverter.toMemberEventPreviewDTO(event)); } -// @PostMapping("/event/multipleEvents/{memberId}/{generatorId}") -// @Operation(summary = "자동 생성된 모든 일정 저장하기", description = "일정 생성기에서 자동 생성된 개별 일정을 모두 저장합니다.") -// public ApiResponse> createIndividualEventsFromList( -// @PathVariable Long memberId, -// @PathVariable Long generatorId, -// @RequestBody List multiEventRequests) { -// -// // 저장된 이벤트 결과를 담을 리스트 -// List createdEvents = new ArrayList<>(); -// -// // 요청된 각 일정 데이터를 처리 -// for (EventRequestDTO.CreateEventRequestDTO request : multiEventRequests) { -// // EventCommandService를 통해 개별 이벤트 생성 -// Event newEvent = eventCommandService.createIndividualEventFromList(memberId, generatorId, request); -// -// // 생성된 이벤트를 DTO로 변환하여 결과 리스트에 추가 -// createdEvents.add(EventConverter.toCreateResultDTO(newEvent)); -// } -// -// // 성공 응답 반환 -// return ApiResponse.onSuccess(SuccessStatus.EVENT_OK, createdEvents); -// } + // 자동 생성된 모든 일정 저장하기 + @PostMapping("/multipleEvents/{memberId}/{generatorId}") + @Operation(summary = "자동 생성된 모든 일정 저장하기", description = "일정 생성기에서 자동 생성된 개별 일정을 모두 저장합니다.") + public ApiResponse> createMultipleEvents(@RequestParam Long memberId, @RequestParam Long generatorId, + @RequestBody EventRequestDTO.CreateMultipleEventsRequestDTO request) { + List createdEvents = new ArrayList<>(); + + for (EventRequestDTO.CreateEventRequestDTO eventRequest : request.getEvents()) { + Event newEvent = eventCommandService.createEventWithGenerator(memberId, generatorId, eventRequest); + createdEvents.add(EventConverter.toCreateResultDTO(newEvent)); + } + return ApiResponse.onSuccess(SuccessStatus.EVENT_OK, createdEvents); + } diff --git a/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventRequestDTO.java b/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventRequestDTO.java index 5299634..20de216 100644 --- a/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventRequestDTO.java +++ b/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventRequestDTO.java @@ -3,6 +3,7 @@ import lombok.*; import java.time.LocalDateTime; +import java.util.List; public class EventRequestDTO { @@ -30,4 +31,14 @@ public static class UpdateEventDTO { private LocalDateTime endDate; } + @Getter + @Setter + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class CreateMultipleEventsRequestDTO { + private List events; // 여러 이벤트 생성 요청 + } + + } diff --git a/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventResponseDTO.java b/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventResponseDTO.java index a22af6b..5f94e8a 100644 --- a/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventResponseDTO.java +++ b/src/main/java/Capstone/AutoScheduler/global/web/dto/Event/EventResponseDTO.java @@ -18,6 +18,7 @@ public class EventResponseDTO { public static class CreateEventResultDTO { Long eventId; Long memberId; + Long generatorId; String eventTitle; String eventBody; LocalDateTime startDate; @@ -42,6 +43,7 @@ public static class UpdateEventResultDTO { @AllArgsConstructor public static class MemberEventPreviewDTO { Long memberId; + Long generatorId; Long eventId; String eventTitle; String eventBody;