Skip to content
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
3 changes: 2 additions & 1 deletion src/main/java/com/petlog/docs/ScheduleControllerDocs.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -19,7 +20,7 @@ public interface ScheduleControllerDocs {

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "201", description = "일정 생성에 성공하였습니다.")
@Operation(summary = "일정 생성 API")
ResponseEntity<ApiResponse<Void>> createSchedule(@PathVariable final Long groupId, @RequestBody CreateScheduleRequestDto request);
ResponseEntity<ApiResponse<Void>> 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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -36,11 +39,25 @@
@RestController
public class ScheduleController implements ScheduleControllerDocs {

private final ScheduleService scheduleService;

@PostMapping
public ResponseEntity<ApiResponse<Void>> 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)
);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Schedule, Long> {
}
59 changes: 59 additions & 0 deletions src/main/java/com/petlog/schedule/service/ScheduleService.java
Original file line number Diff line number Diff line change
@@ -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("그룹에 존재하지 않는 회원입니다."));
}
}
Original file line number Diff line number Diff line change
@@ -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

) {
}
Loading