diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java new file mode 100644 index 0000000..448d3fb --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java @@ -0,0 +1,42 @@ +package com.sswugdsc4a.withparents.controller; + +import com.sswugdsc4a.withparents.dto.Request.schedule.CreateScheduleRequest; +import com.sswugdsc4a.withparents.dto.dto.schedule.ScheduleDTO; +import com.sswugdsc4a.withparents.service.ScheduleService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.util.List; + +@RestController +@RequiredArgsConstructor +public class ScheduleController { + private final ScheduleService scheduleService; + + @PostMapping("/api/schedule/createSchedule") + public ScheduleDTO createSchedule( + @RequestBody CreateScheduleRequest body + ) { + return scheduleService.createSchedule( + body.getUserId(), + body.getTitle(), + body.getDate(), + body.getTime() + ); + } + + @GetMapping("/api/schedule/getScheduleList") + public List getScheduleList( + @RequestParam LocalDate date, Long userId + ) { + return scheduleService.getScheduleList(userId, date); + } + + @DeleteMapping("/api/schedule/deleteSchedule") + public void deleteSchedule( + @RequestParam Long scheduleId + ){ + scheduleService.deleteSchedule(scheduleId); + } +}; diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java new file mode 100644 index 0000000..3c388ff --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java @@ -0,0 +1,14 @@ +package com.sswugdsc4a.withparents.dto.Request.schedule; + +import lombok.Getter; + +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +public class CreateScheduleRequest { + private Long userId; + private String title; + private LocalDate date; + private LocalTime time; +} diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/schedule/ScheduleDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/schedule/ScheduleDTO.java new file mode 100644 index 0000000..3b2e948 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/schedule/ScheduleDTO.java @@ -0,0 +1,35 @@ +package com.sswugdsc4a.withparents.dto.dto.schedule; + +import com.sswugdsc4a.withparents.entity.Schedule; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import javax.management.Notification; +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +@Setter +@AllArgsConstructor + +public class ScheduleDTO { + private Long id; + private Long userId; + private String title; + private LocalDate Date; + private LocalTime Time; + + public static ScheduleDTO entityToDTO(Schedule e){ + return new ScheduleDTO( + e.getId(), + e.getUser().getId(), + e.getTitle(), + e.getDate(), + e.getTime() + ); + } + } + + + diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/AlertStatus.java b/src/main/java/com/sswugdsc4a/withparents/entity/AlertStatus.java new file mode 100644 index 0000000..012f026 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/AlertStatus.java @@ -0,0 +1,5 @@ +package com.sswugdsc4a.withparents.entity; + +public enum AlertStatus { + ON, OFF +} diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java new file mode 100644 index 0000000..b0b5571 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java @@ -0,0 +1,37 @@ +package com.sswugdsc4a.withparents.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.annotation.CreatedDate; + +import javax.management.Notification; +import javax.persistence.*; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Schedule{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "schedule_id") + private Long id; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; + @CreatedDate + @Column(updatable = false) + private LocalDateTime createDate; + private String title; + private LocalDate date; + private LocalTime time; + private AlertStatus alert; +}; + diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java new file mode 100644 index 0000000..6ca8718 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java @@ -0,0 +1,12 @@ +package com.sswugdsc4a.withparents.repository; + +import com.sswugdsc4a.withparents.entity.Medication; +import com.sswugdsc4a.withparents.entity.Schedule; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ScheduleRepository extends JpaRepository { + List findAllByUserId(Long userId); +} + diff --git a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java new file mode 100644 index 0000000..f6b1484 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java @@ -0,0 +1,111 @@ +package com.sswugdsc4a.withparents.service; + +import com.sswugdsc4a.withparents.dto.dto.schedule.ScheduleDTO; +import com.sswugdsc4a.withparents.entity.AlertStatus; +import com.sswugdsc4a.withparents.entity.Schedule; +import com.sswugdsc4a.withparents.entity.User; +import com.sswugdsc4a.withparents.exception.CustomException; +import com.sswugdsc4a.withparents.repository.ScheduleRepository; +import com.sswugdsc4a.withparents.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.Calendar; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ScheduleService { + private final ScheduleRepository scheduleRepository; + private final UserRepository UserRepository; + private final UserService userService; + + @Transactional + public ScheduleDTO createSchedule( + Long userId, + String title, + LocalDate date, + LocalTime time + ) { + if (!userService.areTheyAFamily(userId)) { + throw new CustomException("Family id is different"); + } + + return ScheduleDTO.entityToDTO( + scheduleRepository.save( + new Schedule( + null, + userService.getUserById(userId), + null, + title, + date, + time, + AlertStatus.ON + ) + + ) + ); + + } + + public List getScheduleList( + Long userId, + LocalDate date + ) + { + + User user = userService.getUserById(userId); + + if(!userService.areTheyAFamily(userId)) { + throw new CustomException("Family id is different"); + } + return scheduleRepository.findAllByUserId(userId) + .stream() + .map(e -> ScheduleDTO.entityToDTO(e)) + .collect(Collectors.toList()); + } + + @Transactional + public void deleteSchedule( + Long scheduleId + ){ + Schedule schedule = scheduleRepository.findById(scheduleId) + .orElseThrow(()->new CustomException("invalid schedule id")); + if (!userService.areTheyAFamily(schedule.getUser().getId())){ + throw new CustomException("Family id is different"); + } + scheduleRepository.delete(schedule); + } + +// public List getTodayScheduleList(Long userId){ +// User user = UserRepository.findById(userId) +// .orElseThrow(()->new IllegalArgumentException()); +// } +// public List getTodayScheduleList(Long userId){ +// User user = userService.getUserById(userId); +// +// if(!userService.areTheyAFamily(userId)){ +// throw new CustomException("Family id is different"); +// } +// int dayOfWeekNumber = switch (Calendar.getInstance().get(Calendar.D)){ +// case 1 -> 6; +// case 2 -> 0; +// case 3 -> 1; +// case 4 -> 2; +// case 5 -> 3; +// case 6 -> 4; +// case 7 -> 5; +// default -> 8; +// }; +// return scheduleRepository.findAllByUserId(userId) +// .stream() +// .filter(e -> { +// return e.get +// }) + } +