diff --git a/src/main/java/com/petlog/docs/ScheduleControllerDocs.java b/src/main/java/com/petlog/docs/ScheduleControllerDocs.java index 129fc54..5ec9b77 100644 --- a/src/main/java/com/petlog/docs/ScheduleControllerDocs.java +++ b/src/main/java/com/petlog/docs/ScheduleControllerDocs.java @@ -1,5 +1,6 @@ package com.petlog.docs; +import com.petlog.auth.resolver.Authenticated; import com.petlog.common.response.ApiResponse; import com.petlog.schedule.controller.dto.request.CreateScheduleRequestDto; import com.petlog.schedule.controller.dto.request.UpdateScheduleRequestDto; @@ -19,7 +20,7 @@ public interface ScheduleControllerDocs { @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "201", description = "일정 생성에 성공하였습니다.") @Operation(summary = "일정 생성 API") - ResponseEntity> createSchedule(@PathVariable final Long groupId, @RequestBody CreateScheduleRequestDto request); + ResponseEntity> createSchedule(@Authenticated final Long memberId, @PathVariable final Long groupId, @RequestBody CreateScheduleRequestDto request); @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "월별 일정 전체 조회에 성공하였습니다.") @Operation(summary = "월별 일정 전체 조회 API") diff --git a/src/main/java/com/petlog/pet/controller/dto/response/GetPetInfoResponseDto.java b/src/main/java/com/petlog/pet/controller/dto/response/GetPetInfoResponseDto.java index 0c812c2..3cf9cda 100644 --- a/src/main/java/com/petlog/pet/controller/dto/response/GetPetInfoResponseDto.java +++ b/src/main/java/com/petlog/pet/controller/dto/response/GetPetInfoResponseDto.java @@ -13,16 +13,4 @@ public record GetPetInfoResponseDto( GetPoopInfoDto poopInfo ) { - public GetPetInfoResponseDto( - final GetPetProfileDto profile, - final GetFeedingInfoDto feedingInfo, - final GetWateringInfoDto wateringInfo, - final GetPoopInfoDto poopInfo - - ) { - this.profile = profile; - this.feedingInfo = feedingInfo; - this.wateringInfo = wateringInfo; - this.poopInfo = poopInfo; - } } diff --git a/src/main/java/com/petlog/schedule/controller/ScheduleController.java b/src/main/java/com/petlog/schedule/controller/ScheduleController.java index 9dbd6b3..d422700 100644 --- a/src/main/java/com/petlog/schedule/controller/ScheduleController.java +++ b/src/main/java/com/petlog/schedule/controller/ScheduleController.java @@ -1,11 +1,14 @@ package com.petlog.schedule.controller; +import com.petlog.auth.resolver.Authenticated; import com.petlog.common.response.ApiResponse; import com.petlog.docs.ScheduleControllerDocs; import com.petlog.schedule.controller.dto.request.CreateScheduleRequestDto; import com.petlog.schedule.controller.dto.request.UpdateScheduleRequestDto; import com.petlog.schedule.controller.dto.response.GetMonthlyScheduleResponseDto; import com.petlog.schedule.entity.ScheduleType; +import com.petlog.schedule.service.ScheduleService; +import com.petlog.schedule.service.dto.CreateScheduleDto; import com.petlog.schedule.service.dto.GetDailyScheduleDto; import com.petlog.schedule.service.dto.GetScheduleInfoDto; import lombok.RequiredArgsConstructor; @@ -36,11 +39,25 @@ @RestController public class ScheduleController implements ScheduleControllerDocs { + private final ScheduleService scheduleService; + @PostMapping public ResponseEntity> createSchedule( + @Authenticated final Long memberId, @PathVariable final Long groupId, @RequestBody CreateScheduleRequestDto request ) { + final CreateScheduleDto dto = new CreateScheduleDto( + request.title(), + request.isAllDay(), + request.startTime(), + request.endTime(), + request.tag(), + request.remindNotificationAt(), + request.memo() + ); + scheduleService.createSchedule(memberId, groupId, dto); + return ResponseEntity.ok( ApiResponse.success(CREATE_SCHEDULE) ); diff --git a/src/main/java/com/petlog/schedule/repository/ScheduleRepository.java b/src/main/java/com/petlog/schedule/repository/ScheduleRepository.java new file mode 100644 index 0000000..4f1b204 --- /dev/null +++ b/src/main/java/com/petlog/schedule/repository/ScheduleRepository.java @@ -0,0 +1,7 @@ +package com.petlog.schedule.repository; + +import com.petlog.schedule.entity.Schedule; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ScheduleRepository extends JpaRepository { +} diff --git a/src/main/java/com/petlog/schedule/service/ScheduleService.java b/src/main/java/com/petlog/schedule/service/ScheduleService.java new file mode 100644 index 0000000..a645b39 --- /dev/null +++ b/src/main/java/com/petlog/schedule/service/ScheduleService.java @@ -0,0 +1,59 @@ +package com.petlog.schedule.service; + +import com.petlog.member.entity.Member; +import com.petlog.member.repository.MemberRepository; +import com.petlog.petgroup.entity.PetGroup; +import com.petlog.petgroup.entity.PetGroupMember; +import com.petlog.petgroup.repository.PetGroupMemberRepository; +import com.petlog.petgroup.repository.PetGroupRepository; +import com.petlog.schedule.entity.Schedule; +import com.petlog.schedule.repository.ScheduleRepository; +import com.petlog.schedule.service.dto.CreateScheduleDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Service +public class ScheduleService { + + private final ScheduleRepository scheduleRepository; + private final MemberRepository memberRepository; + private final PetGroupRepository petGroupRepository; + private final PetGroupMemberRepository petGroupMemberRepository; + + @Transactional + public void createSchedule(final Long memberId, final Long groupId, final CreateScheduleDto dto) { + final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroup(groupId); + getPetGroupMember(member, petGroup); + + final Schedule schedule = new Schedule( + petGroup, + member, + dto.title(), + dto.isAllDay(), + dto.startTime(), + dto.endTime(), + dto.remindNotificationAt(), + dto.tag(), + dto.memo() + ); + scheduleRepository.save(schedule); + } + + private Member getMember(final Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다.")); + } + + private PetGroup getPetGroup(final Long groupId) { + return petGroupRepository.findById(groupId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 그룹입니다.")); + } + + private PetGroupMember getPetGroupMember(final Member member, final PetGroup petGroup) { + return petGroupMemberRepository.findByMemberAndPetGroup(member, petGroup) + .orElseThrow(() -> new IllegalArgumentException("그룹에 존재하지 않는 회원입니다.")); + } +} diff --git a/src/main/java/com/petlog/schedule/service/dto/CreateScheduleDto.java b/src/main/java/com/petlog/schedule/service/dto/CreateScheduleDto.java new file mode 100644 index 0000000..2434603 --- /dev/null +++ b/src/main/java/com/petlog/schedule/service/dto/CreateScheduleDto.java @@ -0,0 +1,18 @@ +package com.petlog.schedule.service.dto; + +import com.petlog.schedule.entity.ScheduleType; + +import java.time.LocalDateTime; + +public record CreateScheduleDto( + + String title, + boolean isAllDay, + LocalDateTime startTime, + LocalDateTime endTime, + ScheduleType tag, + LocalDateTime remindNotificationAt, + String memo + +) { +}