diff --git a/src/main/java/net/skhu/tastyinventory_be/config/SecurityConfigurer.java b/src/main/java/net/skhu/tastyinventory_be/config/SecurityConfigurer.java index 663f9c1..74c4c02 100644 --- a/src/main/java/net/skhu/tastyinventory_be/config/SecurityConfigurer.java +++ b/src/main/java/net/skhu/tastyinventory_be/config/SecurityConfigurer.java @@ -48,6 +48,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers(HttpMethod.OPTIONS,"/**").permitAll() .requestMatchers("/csrf-token").permitAll() .requestMatchers(HttpMethod.POST, "/users", "/authorize").permitAll() + .requestMatchers(HttpMethod.GET, "/users").authenticated() .anyRequest().permitAll()) .exceptionHandling(a -> a diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/employee/EmployeeController.java b/src/main/java/net/skhu/tastyinventory_be/controller/employee/EmployeeController.java index 0eb4868..b25baa8 100644 --- a/src/main/java/net/skhu/tastyinventory_be/controller/employee/EmployeeController.java +++ b/src/main/java/net/skhu/tastyinventory_be/controller/employee/EmployeeController.java @@ -11,7 +11,6 @@ import net.skhu.tastyinventory_be.service.EmployeeService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import net.skhu.tastyinventory_be.controller.employee.dto.EmployeeEdit; @@ -104,11 +103,11 @@ public ResponseEntity editEmployeeDetails(@PathVariable(name ="id") Long id, employeeService.save(employee); - return ResponseEntity.ok(BaseResponse.success(SuccessCode.EMPLOYEE_PATCH_SUCCESS)); - } else { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.error(ErrorCode.NOT_FOUND_EMPLOYEE_EXCEPTION)); - } + return ResponseEntity.ok(BaseResponse.success(SuccessCode.EMPLOYEE_PATCH_SUCCESS)); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.error(ErrorCode.NOT_FOUND_EMPLOYEE_EXCEPTION)); } + } diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/employee/dto/EmployeeResponseDto.java b/src/main/java/net/skhu/tastyinventory_be/controller/employee/dto/EmployeeResponseDto.java index 493dc5f..2946bd6 100644 --- a/src/main/java/net/skhu/tastyinventory_be/controller/employee/dto/EmployeeResponseDto.java +++ b/src/main/java/net/skhu/tastyinventory_be/controller/employee/dto/EmployeeResponseDto.java @@ -1,7 +1,5 @@ package net.skhu.tastyinventory_be.controller.employee.dto; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; import lombok.*; import net.skhu.tastyinventory_be.domain.employee.Employee; diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/salary/SalaryController.java b/src/main/java/net/skhu/tastyinventory_be/controller/salary/SalaryController.java index 7db2c6f..3e22272 100644 --- a/src/main/java/net/skhu/tastyinventory_be/controller/salary/SalaryController.java +++ b/src/main/java/net/skhu/tastyinventory_be/controller/salary/SalaryController.java @@ -4,7 +4,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.skhu.tastyinventory_be.common.dto.BaseResponse; -import net.skhu.tastyinventory_be.controller.employee.dto.EmployeeResponseDto; import net.skhu.tastyinventory_be.domain.salary.Salary; import net.skhu.tastyinventory_be.controller.salary.dto.SalaryResponseDto; import net.skhu.tastyinventory_be.exception.ErrorCode; @@ -12,15 +11,13 @@ import net.skhu.tastyinventory_be.service.SalaryService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.ui.Model; -import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import net.skhu.tastyinventory_be.controller.salary.dto.SalaryEdit; import java.util.List; import java.util.Optional; -// BOOLEAN 추가/삭제 + @RequiredArgsConstructor diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/schedule/ScheduleController.java b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/ScheduleController.java new file mode 100644 index 0000000..32ea3bb --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/ScheduleController.java @@ -0,0 +1,135 @@ +package net.skhu.tastyinventory_be.controller.schedule; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.skhu.tastyinventory_be.common.dto.BaseResponse; +import net.skhu.tastyinventory_be.controller.schedule.dto.ScheduleEdit; +import net.skhu.tastyinventory_be.controller.schedule.dto.ScheduleResponseDto; +import net.skhu.tastyinventory_be.domain.schedule.Schedule; +import net.skhu.tastyinventory_be.exception.ErrorCode; +import net.skhu.tastyinventory_be.exception.SuccessCode; +import net.skhu.tastyinventory_be.service.ScheduleService; +import net.skhu.tastyinventory_be.util.WeekUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Optional; + +@RequiredArgsConstructor +@RestController +@RequestMapping("schedule") +@Slf4j +public class ScheduleController { + + private final ScheduleService scheduleService; + + @GetMapping + public ResponseEntity>> findAll() { + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, scheduleService.getSchedule())); + } + + @PostMapping + public ResponseEntity createSchedule(@Valid @RequestBody ScheduleEdit scheduleEdit) { + Schedule schedule = new Schedule(); + schedule.setEmployeeId(scheduleEdit.getEmployeeId()); + schedule.setDayOfWeek(scheduleEdit.getDayOfWeek()); + schedule.setTimeSlot(scheduleEdit.getTimeSlot()); + schedule.setDate(scheduleEdit.getDate()); + scheduleService.save(schedule); + + return ResponseEntity.ok(BaseResponse.success(SuccessCode.SCHEDULE_CREATE_SUCCESS)); + } + + @GetMapping("{id}") + public ResponseEntity getScheduleDetails(@PathVariable(name = "id") Long id) { + ScheduleResponseDto schedule = scheduleService.getScheduleDetails(id); + if (schedule != null) { + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, schedule)); + } else { + return ResponseEntity.notFound().build(); + } + } + + @GetMapping("/employee/{employeeId}") + public ResponseEntity getEmployeeScheduleDetails(@PathVariable(name = "employeeId") Long employeeId) { + List schedules = scheduleService.getEmployeeScheduleDetails(employeeId); + if (!schedules.isEmpty()) { + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, schedules)); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.error(ErrorCode.NOT_FOUND_EMPLOYEE_EXCEPTION)); + } + } + + @PatchMapping("{id}") + public ResponseEntity editScheduleDetails(@PathVariable(name ="id") Long id, @Valid @RequestBody ScheduleEdit scheduleEdit) { + + + Optional scheduleOptional = scheduleService.findById(id); + if (scheduleOptional.isPresent()) { + Schedule schedule = scheduleOptional.get(); + + if (scheduleEdit.getDayOfWeek() != null) { + schedule.setDayOfWeek(scheduleEdit.getDayOfWeek()); + } + if (scheduleEdit.getTimeSlot() != null) { + schedule.setTimeSlot(scheduleEdit.getTimeSlot()); + } + if (scheduleEdit.getDate() != null) { + schedule.setDate(scheduleEdit.getDate()); + } + + + + scheduleService.save(schedule); + return ResponseEntity.ok(BaseResponse.success(SuccessCode.SCHEDULE_PATCH_SUCCESS)); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.error(ErrorCode.NOT_FOUND_SCHEDULE_EXCEPTION)); + } + } + + @DeleteMapping("{id}") + public ResponseEntity deleteSchedule(@PathVariable(name ="id") Long id) { + Optional scheduleOptional = scheduleService.findById(id); + if (scheduleOptional.isPresent()) { + scheduleService.deleteById(id); + return ResponseEntity.ok(BaseResponse.success(SuccessCode.SCHEDULE_DELETE_SUCCESS)); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.error(ErrorCode.NOT_FOUND_SCHEDULE_EXCEPTION)); + } + } + + @GetMapping("/week") + public ResponseEntity>> getWeekSchedules( + @RequestParam int year, + @RequestParam int month, + @RequestParam int week, + @RequestParam(required = false) Long employeeId) { + List schedules = scheduleService.getSchedulesForWeek(year, month, week, employeeId); + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, schedules)); + } + + @GetMapping("/week/next") + public ResponseEntity>> getNextWeekSchedules( + @RequestParam int year, + @RequestParam int month, + @RequestParam int week, + @RequestParam(required = false) Long employeeId) { + int nextWeek = WeekUtils.changeWeek(year, month, week, 1); + List schedules = scheduleService.getSchedulesForWeek(year, month, nextWeek, employeeId); + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, schedules)); + } + + @GetMapping("/week/previous") + public ResponseEntity>> getPreviousWeekSchedules( + @RequestParam int year, + @RequestParam int month, + @RequestParam int week, + @RequestParam(required = false) Long employeeId) { + int previousWeek = WeekUtils.changeWeek(year, month, week, -1); + List schedules = scheduleService.getSchedulesForWeek(year, month, previousWeek, employeeId); + return ResponseEntity.ok(BaseResponse.success(SuccessCode.GET_SUCCESS, schedules)); + } +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleEdit.java b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleEdit.java new file mode 100644 index 0000000..8c6c4d7 --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleEdit.java @@ -0,0 +1,15 @@ +package net.skhu.tastyinventory_be.controller.schedule.dto; +import lombok.Data; +import net.skhu.tastyinventory_be.domain.schedule.Schedule; +import java.time.LocalDate; + +@Data +public class ScheduleEdit { + int id; + + Long employeeId; + private Schedule.DayOfWeek dayOfWeek; + private Schedule.TimeSlot timeSlot; + private LocalDate date; + +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleResponseDto.java b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleResponseDto.java new file mode 100644 index 0000000..f071402 --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/controller/schedule/dto/ScheduleResponseDto.java @@ -0,0 +1,36 @@ +package net.skhu.tastyinventory_be.controller.schedule.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import net.skhu.tastyinventory_be.domain.schedule.Schedule; + +import java.time.LocalDate; + +@Builder +@Data +@RequiredArgsConstructor +@AllArgsConstructor +public class ScheduleResponseDto { + Long id; + + @JsonProperty("employee_id") + Long employeeId; + + Schedule.DayOfWeek dayOfWeek; + Schedule.TimeSlot timeSlot; + LocalDate date; + + public static ScheduleResponseDto of(Schedule schedule) { + return ScheduleResponseDto.builder() + .id(schedule.getId()) + .employeeId(schedule.getEmployeeId()) + .dayOfWeek(schedule.getDayOfWeek()) + .timeSlot(schedule.getTimeSlot()) + .date(schedule.getDate()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/domain/employee/Employee.java b/src/main/java/net/skhu/tastyinventory_be/domain/employee/Employee.java index b8a1e56..721548f 100644 --- a/src/main/java/net/skhu/tastyinventory_be/domain/employee/Employee.java +++ b/src/main/java/net/skhu/tastyinventory_be/domain/employee/Employee.java @@ -1,14 +1,10 @@ package net.skhu.tastyinventory_be.domain.employee; import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; -import java.util.ArrayList; import java.util.Date; -import java.util.List; @Data @Entity @@ -33,6 +29,4 @@ public class Employee { String note; // 특이사항 -// @OneToMany -// List schedules = new ArrayList<>(); } diff --git a/src/main/java/net/skhu/tastyinventory_be/domain/employee/EmployeeRepository.java b/src/main/java/net/skhu/tastyinventory_be/domain/employee/EmployeeRepository.java index 092fbf2..fb1f21d 100644 --- a/src/main/java/net/skhu/tastyinventory_be/domain/employee/EmployeeRepository.java +++ b/src/main/java/net/skhu/tastyinventory_be/domain/employee/EmployeeRepository.java @@ -1,5 +1,4 @@ package net.skhu.tastyinventory_be.domain.employee; -import net.skhu.tastyinventory_be.domain.employee.Employee; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; diff --git a/src/main/java/net/skhu/tastyinventory_be/domain/salary/SalaryRepository.java b/src/main/java/net/skhu/tastyinventory_be/domain/salary/SalaryRepository.java index 9e7d6ee..9aab8fa 100644 --- a/src/main/java/net/skhu/tastyinventory_be/domain/salary/SalaryRepository.java +++ b/src/main/java/net/skhu/tastyinventory_be/domain/salary/SalaryRepository.java @@ -1,5 +1,4 @@ package net.skhu.tastyinventory_be.domain.salary; -import net.skhu.tastyinventory_be.domain.salary.Salary; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; diff --git a/src/main/java/net/skhu/tastyinventory_be/domain/schedule/Schedule.java b/src/main/java/net/skhu/tastyinventory_be/domain/schedule/Schedule.java new file mode 100644 index 0000000..e0bfde1 --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/domain/schedule/Schedule.java @@ -0,0 +1,70 @@ +package net.skhu.tastyinventory_be.domain.schedule; +import jakarta.persistence.*; +import lombok.Data; +import lombok.Getter; + +import java.time.LocalDate; + +@Data +@Entity +public class Schedule { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "scheduleId") + private Long id; + + @Column(nullable = false) + private Long employeeId; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private DayOfWeek dayOfWeek; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private TimeSlot timeSlot; + + @Column(nullable = false) + private LocalDate date; + + @Getter + public enum DayOfWeek { + MONDAY("월요일"), + TUESDAY("화요일"), + WEDNESDAY("수요일"), + THURSDAY("목요일"), + FRIDAY("금요일"), + SATURDAY("토요일"), + SUNDAY("일요일"); + + private final String value; + + DayOfWeek(String value) { + this.value = value; + } + + } + + @Getter + public enum TimeSlot { + SLOT_09_10("09:00 - 10:00"), + SLOT_10_11("10:00 - 11:00"), + SLOT_11_12("11:00 - 12:00"), + SLOT_12_13("12:00 - 13:00"), + SLOT_13_14("13:00 - 14:00"), + SLOT_14_15("14:00 - 15:00"), + SLOT_15_16("15:00 - 16:00"), + SLOT_16_17("16:00 - 17:00"), + SLOT_17_18("17:00 - 18:00"), + SLOT_18_19("18:00 - 19:00"), + SLOT_19_20("19:00 - 20:00"), + SLOT_20_21("20:00 - 21:00"); + + private final String value; + + TimeSlot(String value) { + this.value = value; + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/domain/schedule/ScheduleRepository.java b/src/main/java/net/skhu/tastyinventory_be/domain/schedule/ScheduleRepository.java new file mode 100644 index 0000000..e697e97 --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/domain/schedule/ScheduleRepository.java @@ -0,0 +1,15 @@ +package net.skhu.tastyinventory_be.domain.schedule; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +public interface ScheduleRepository extends JpaRepository { + Optional findById(Long id); + List findByEmployeeId(Long employeeId); + List findByDateBetweenAndEmployeeId(LocalDate startDate, LocalDate endDate, Long employeeId); + + List findByDateBetween(LocalDate startDate, LocalDate endDate); +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/exception/ErrorCode.java b/src/main/java/net/skhu/tastyinventory_be/exception/ErrorCode.java index 9dd904e..d332e9d 100644 --- a/src/main/java/net/skhu/tastyinventory_be/exception/ErrorCode.java +++ b/src/main/java/net/skhu/tastyinventory_be/exception/ErrorCode.java @@ -52,7 +52,7 @@ public enum ErrorCode { NOT_FOUND_EMPLOYEE_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 직원입니다"), NOT_FOUND_SOLD_EXCEPTION(HttpStatus.NOT_FOUND, "재고량이 존재하지 않습니다"), NOT_FOUND_INVENTORY_RECORD_EXCEPTION(HttpStatus.NOT_FOUND, "재고기록이 존재하지 않습니다"), - + NOT_FOUND_SCHEDULE_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 스케줄입니다"), /** * 500 INTERNAL SERVER ERROR */ diff --git a/src/main/java/net/skhu/tastyinventory_be/exception/SuccessCode.java b/src/main/java/net/skhu/tastyinventory_be/exception/SuccessCode.java index 3cf31ac..62abef0 100644 --- a/src/main/java/net/skhu/tastyinventory_be/exception/SuccessCode.java +++ b/src/main/java/net/skhu/tastyinventory_be/exception/SuccessCode.java @@ -22,6 +22,7 @@ public enum SuccessCode { MENU_PATCH_SUCCESS(HttpStatus.OK, "메뉴 수정이 완료되었습니다"), MENU_DELETE_SUCCESS(HttpStatus.OK, "메뉴 삭제에 성공했습니다"), SOLD_DELETE_SUCCESSCODE(HttpStatus.OK, "메뉴 판매량 삭제에 성공했습니다"), + SOLD_PATCH_SUCCESSCODE(HttpStatus.NO_CONTENT, "재고량 정보 수정이 완료되었습니다"), INVENTORY_RECORD_GET_SUCCESS(HttpStatus.OK, "재고량 정보 조회에 성공했습니다"), INVENTORY_RECORD_PATCH_SUCCESS(HttpStatus.OK, "재고량 정보 수정이 완료되었습니다"), INVENTORY_RECORD_DELETE_SUCCESS(HttpStatus.OK, "재고량 정보 삭제에 성공했습니다"), @@ -38,6 +39,7 @@ public enum SuccessCode { MENU_CREATE_SUCCESS(HttpStatus.CREATED, "메뉴 생성이 완료되었습니다"), SOLD_CREATE_SUCCESS(HttpStatus.CREATED, "메뉴 판매량 등록을 완료했습니다"), INVENTORY_RECORD_CREATE_SUCCESS(HttpStatus.CREATED, "재고 기록 등록을 완료했습니다"), + SCHEDULE_CREATE_SUCCESS(HttpStatus.CREATED, "스케줄 생성이 완료되었습니다"), /** * 204 NO_CONTENT @@ -47,8 +49,8 @@ public enum SuccessCode { SALARY_DELETE_SUCCESS(HttpStatus.NO_CONTENT, "급여 삭제에 성공했습니다"), EMPLOYEE_PATCH_SUCCESS(HttpStatus.NO_CONTENT, "직원 정보 수정이 완료되었습니다"), SALARY_PATCH_SUCCESS(HttpStatus.NO_CONTENT, "급여 정보 수정이 완료되었습니다"), - SOLD_PATCH_SUCCESSCODE(HttpStatus.NO_CONTENT, "재고량 정보 수정이 완료되었습니다"), - + SCHEDULE_PATCH_SUCCESS(HttpStatus.NO_CONTENT, "스케줄 정보 수정이 완료되었습니다"), + SCHEDULE_DELETE_SUCCESS(HttpStatus.NO_CONTENT, "스케줄 삭제에 성공했습니다"), ; diff --git a/src/main/java/net/skhu/tastyinventory_be/service/SalaryService.java b/src/main/java/net/skhu/tastyinventory_be/service/SalaryService.java index 13da421..c8fc1f7 100644 --- a/src/main/java/net/skhu/tastyinventory_be/service/SalaryService.java +++ b/src/main/java/net/skhu/tastyinventory_be/service/SalaryService.java @@ -46,7 +46,6 @@ public SalaryResponseDto getSalaryDetails(Long id) { salaryResponseDto.setName(salary.getName()); salaryResponseDto.setBaseSalary(salary.getBaseSalary()); salaryResponseDto.setPosition(salary.getPosition()); - // 나머지 필드도 필요에 따라 추가 return salaryResponseDto; } else { diff --git a/src/main/java/net/skhu/tastyinventory_be/service/ScheduleService.java b/src/main/java/net/skhu/tastyinventory_be/service/ScheduleService.java new file mode 100644 index 0000000..ddf51a6 --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/service/ScheduleService.java @@ -0,0 +1,112 @@ +package net.skhu.tastyinventory_be.service; + +import lombok.RequiredArgsConstructor; +import net.skhu.tastyinventory_be.controller.schedule.dto.ScheduleResponseDto; +import net.skhu.tastyinventory_be.domain.schedule.Schedule; +import net.skhu.tastyinventory_be.domain.schedule.ScheduleRepository; +import net.skhu.tastyinventory_be.util.WeekUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + + +@Service +@RequiredArgsConstructor +public class ScheduleService { + private final ScheduleRepository scheduleRepository; + + @Transactional + public void save(Schedule schedule) { + scheduleRepository.save(schedule); + } + + @Transactional + public List getSchedule(){ + List schedules = scheduleRepository.findAll(); + List scheduleResponseDtos = new ArrayList<>(); + for (Schedule schedule : schedules) { + ScheduleResponseDto scheduleResponseDto = new ScheduleResponseDto(); + scheduleResponseDto.setId(schedule.getId()); + scheduleResponseDto.setEmployeeId(schedule.getEmployeeId()); + scheduleResponseDto.setDayOfWeek(schedule.getDayOfWeek()); + scheduleResponseDto.setTimeSlot(schedule.getTimeSlot()); + scheduleResponseDto.setDate(schedule.getDate()); + + scheduleResponseDtos.add(scheduleResponseDto); + } + return scheduleResponseDtos; + } + + @Transactional(readOnly = true) + public ScheduleResponseDto getScheduleDetails(Long id) { + Optional scheduleOptional = scheduleRepository.findById(id); + if (scheduleOptional.isPresent()) { + Schedule schedule = scheduleOptional.get(); + ScheduleResponseDto scheduleResponseDto = new ScheduleResponseDto(); + scheduleResponseDto.setId(schedule.getId()); + scheduleResponseDto.setEmployeeId(schedule.getEmployeeId()); + scheduleResponseDto.setDayOfWeek(schedule.getDayOfWeek()); + scheduleResponseDto.setTimeSlot(schedule.getTimeSlot()); + scheduleResponseDto.setDate(schedule.getDate()); + + return scheduleResponseDto; + } else { + return null; + } + } + + @Transactional(readOnly = true) + public List getEmployeeScheduleDetails(Long employeeId) { + List schedules = scheduleRepository.findByEmployeeId(employeeId); + return schedules.stream() + .map(schedule -> new ScheduleResponseDto( + schedule.getId(), + schedule.getEmployeeId(), + schedule.getDayOfWeek(), + schedule.getTimeSlot(), + schedule.getDate() + )) + .collect(Collectors.toList()); + } + + + @Transactional + public void deleteById(Long id) { + scheduleRepository.deleteById(id); + } + @Transactional + public Optional findById(Long id) { + return scheduleRepository.findById(id); + } + + public List getSchedulesForWeek(int year, int month, int week, Long employeeId) { + LocalDate startOfWeek = WeekUtils.getStartOfWeek(year, month, week); + LocalDate endOfWeek = startOfWeek.plusDays(6); + + List schedules; + if (employeeId != null) { + schedules = scheduleRepository.findByDateBetweenAndEmployeeId(startOfWeek, endOfWeek, employeeId); + } else { + schedules = scheduleRepository.findByDateBetween(startOfWeek, endOfWeek); + } + + return schedules.stream() + .map(this::convertToDto) + .toList(); + } + + private ScheduleResponseDto convertToDto(Schedule schedule) { + return new ScheduleResponseDto( + schedule.getId(), + schedule.getEmployeeId(), + schedule.getDayOfWeek(), + schedule.getTimeSlot(), + schedule.getDate() + ); + } +} \ No newline at end of file diff --git a/src/main/java/net/skhu/tastyinventory_be/util/WeekUtils.java b/src/main/java/net/skhu/tastyinventory_be/util/WeekUtils.java new file mode 100644 index 0000000..3105b1b --- /dev/null +++ b/src/main/java/net/skhu/tastyinventory_be/util/WeekUtils.java @@ -0,0 +1,48 @@ +package net.skhu.tastyinventory_be.util; + +import java.time.LocalDate; +import java.time.temporal.WeekFields; +import java.util.Locale; + +public class WeekUtils { + + public static LocalDate getStartOfWeek(int year, int month, int week) { + LocalDate firstDayOfMonth = LocalDate.of(year, month, 1); + WeekFields weekFields = WeekFields.of(Locale.getDefault()); + LocalDate firstWeekStart = firstDayOfMonth.with(weekFields.weekOfMonth(), 1); + return firstWeekStart.plusWeeks(week - 1); + } + + public static int getWeeksInMonth(int year, int month) { + LocalDate firstDayOfMonth = LocalDate.of(year, month, 1); + LocalDate lastDayOfMonth = firstDayOfMonth.withDayOfMonth(firstDayOfMonth.lengthOfMonth()); + WeekFields weekFields = WeekFields.of(Locale.getDefault()); + int firstWeek = firstDayOfMonth.get(weekFields.weekOfMonth()); + int lastWeek = lastDayOfMonth.get(weekFields.weekOfMonth()); + return lastWeek - firstWeek + 1; + } + + public static int changeWeek(int year, int month, int week, int direction) { + int newWeek = week + direction; + int newMonth = month; + int newYear = year; + + if (newWeek > getWeeksInMonth(year, month)) { + newWeek = 1; + newMonth++; + if (newMonth > 12) { + newMonth = 1; + newYear++; + } + } else if (newWeek < 1) { + newMonth--; + if (newMonth < 1) { + newMonth = 12; + newYear--; + } + newWeek = getWeeksInMonth(newYear, newMonth); + } + + return newWeek; + } +} \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 58f7fd8..fe84d83 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -5,6 +5,6 @@ Title -

김용욱 ㅋㅋ 트롤ㅋㅋ

+

서버 설정 변경ㄷ