From cbaa105a16ed7af67eb0fc33a49384fddde089f5 Mon Sep 17 00:00:00 2001 From: dietken1 Date: Wed, 7 May 2025 23:40:56 +0900 Subject: [PATCH 1/2] chore: ignore .env file --- backend/pirocheck/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/pirocheck/.gitignore b/backend/pirocheck/.gitignore index 8f30de9..3fac0c4 100644 --- a/backend/pirocheck/.gitignore +++ b/backend/pirocheck/.gitignore @@ -39,4 +39,5 @@ out/ .vscode/ ### 환경 변수 ### -../../.env \ No newline at end of file +../../.env +.env \ No newline at end of file From a16e51b99c786ad0d4c0490233f4297aa0306d53 Mon Sep 17 00:00:00 2001 From: dietken1 Date: Wed, 7 May 2025 23:48:11 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=A4=91=EA=B0=84=EB=B3=91=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AttendanceController.java | 94 +++++++++++++++++++ .../dto/request/GetAttendanceByDateReq.java | 2 +- .../dto/request/MarkAttendanceReq.java | 2 +- .../Attendance/dto/response/ApiResponse.java | 38 ++++++++ .../dto/response/AttendanceCodeResponse.java | 29 ++++++ .../dto/response/AttendanceSlotRes.java | 2 +- .../dto/response/AttendanceStatusRes.java | 3 +- .../response/GetAttendanceByUserIdRes.java | 2 +- .../entity/Attendance.java | 2 +- .../entity/AttendanceCode.java | 2 +- .../repository/AttendanceCodeRepository.java | 6 +- .../repository/AttendanceRepository.java | 9 +- .../service/AttendanceService.java | 79 +++++++++++++--- .../Deposit/controller/DepositController.java | 23 +++++ .../pirocheck/Deposit/dto/DepositResDto.java | 19 ++++ .../pirocheck/Deposit/entity/Deposit.java | 40 ++++++++ .../Deposit/init/DepositInitRunner.java | 37 ++++++++ .../Deposit/repository/DepositRepository.java | 12 +++ .../Deposit/service/DepositService.java | 56 +++++++++++ .../backend/pirocheck/User/entity/Role.java | 2 +- .../backend/pirocheck/User/entity/User.java | 2 +- .../controller/AssignmentController.java | 36 +++++++ .../assignment/dto/request/AssignmentReq.java | 16 ++++ .../dto/response/AssignmentDayRes.java | 13 +++ .../dto/response/AssignmentDetailRes.java | 12 +++ .../dto/response/AssignmentRes.java | 18 ++++ .../dto/response/AssignmentWeekRes.java | 14 +++ .../assignment/entity/Assignment.java | 49 ++++++++++ .../assignment/entity/AssignmentStatus.java | 5 + .../repository/AssignmentRepository.java | 20 ++++ .../assignment/service/AssignmentService.java | 83 ++++++++++++++++ .../controller/AttendanceController.java | 55 ----------- .../src/main/resources/application.yml | 4 +- .../pirocheck/PirocheckApplicationTests.java | 13 +++ 34 files changed, 713 insertions(+), 86 deletions(-) create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Attendance/controller/AttendanceController.java rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/dto/request/GetAttendanceByDateReq.java (75%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/dto/request/MarkAttendanceReq.java (70%) create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/ApiResponse.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceCodeResponse.java rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/dto/response/AttendanceSlotRes.java (79%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/dto/response/AttendanceStatusRes.java (72%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/dto/response/GetAttendanceByUserIdRes.java (80%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/entity/Attendance.java (93%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/entity/AttendanceCode.java (90%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/repository/AttendanceCodeRepository.java (65%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/repository/AttendanceRepository.java (69%) rename backend/pirocheck/src/main/java/backend/pirocheck/{attendence => Attendance}/service/AttendanceService.java (63%) create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/controller/DepositController.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/dto/DepositResDto.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/entity/Deposit.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/init/DepositInitRunner.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/repository/DepositRepository.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/Deposit/service/DepositService.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/controller/AssignmentController.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/request/AssignmentReq.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDayRes.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDetailRes.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentRes.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentWeekRes.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/Assignment.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/AssignmentStatus.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/repository/AssignmentRepository.java create mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/assignment/service/AssignmentService.java delete mode 100644 backend/pirocheck/src/main/java/backend/pirocheck/attendence/controller/AttendanceController.java create mode 100644 backend/pirocheck/test/java/backend/pirocheck/PirocheckApplicationTests.java diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/controller/AttendanceController.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/controller/AttendanceController.java new file mode 100644 index 0000000..2401afb --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/controller/AttendanceController.java @@ -0,0 +1,94 @@ +package backend.pirocheck.Attendance.controller; + +import backend.pirocheck.Attendance.dto.request.MarkAttendanceReq; +import backend.pirocheck.Attendance.dto.response.ApiResponse; +import backend.pirocheck.Attendance.dto.response.AttendanceCodeResponse; +import backend.pirocheck.Attendance.dto.response.AttendanceSlotRes; +import backend.pirocheck.Attendance.dto.response.AttendanceStatusRes; +import backend.pirocheck.Attendance.entity.AttendanceCode; +import backend.pirocheck.Attendance.service.AttendanceService; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/attendance") +public class AttendanceController { + + private final AttendanceService attendanceService; + + // 특정 유저의 출석 정보 + @GetMapping("/user") + public ApiResponse> getAttendanceByUserId(@RequestParam Long userId) { + return ApiResponse.success(attendanceService.findByUserId(userId)); + } + + // 특정 유저의 특정 일자 출석 정보 + @GetMapping("/user/date") + public ApiResponse> getAttendanceByUserIdAndDate( + @RequestParam Long userId, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date + ) { + return ApiResponse.success(attendanceService.findByUserIdAndDate(userId, date)); + } + + // 출석체크 시작 + @PostMapping("/start") + public ApiResponse postAttendance() { + AttendanceCode code = attendanceService.generateCodeAndCreateAttendances(); + return ApiResponse.success(AttendanceCodeResponse.from(code)); + } + + // 현재 활성화된 출석코드 조회 + @GetMapping("/active-code") + public ApiResponse getActiveCode() { + Optional codeOpt = attendanceService.getActiveAttendanceCode(); + + if (codeOpt.isEmpty()) { + return ApiResponse.error("현재 활성화된 출석코드가 없습니다"); + } + + return ApiResponse.success(AttendanceCodeResponse.from(codeOpt.get())); + } + + // 출석코드 비교 + @PostMapping("/mark") + public ApiResponse markAttendance(@RequestBody MarkAttendanceReq req) { + String result = attendanceService.markAttendance(req.getUserId(), req.getCode()); + + if (result.equals("출석이 성공적으로 처리되었습니다")) { + return ApiResponse.success(result, null); + } else { + return ApiResponse.error(result); + } + } + + // 출석체크 종료 (코드 직접 전달) + @PutMapping("/expire") + public ApiResponse expireAttendance(@RequestParam String code) { + String result = attendanceService.exprireAttendanceCode(code); + + if (result.equals("출석 코드가 성공적으로 만료되었습니다")) { + return ApiResponse.success(result, null); + } else { + return ApiResponse.error(result); + } + } + + // 출석체크 종료 (가장 최근 활성화된 코드 자동 만료) + @PutMapping("/expire-latest") + public ApiResponse expireLatestAttendance() { + String result = attendanceService.expireLatestAttendanceCode(); + + if (result.equals("출석 코드가 성공적으로 만료되었습니다")) { + return ApiResponse.success(result, null); + } else { + return ApiResponse.error(result); + } + } +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/GetAttendanceByDateReq.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/GetAttendanceByDateReq.java similarity index 75% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/GetAttendanceByDateReq.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/GetAttendanceByDateReq.java index d731fb4..456f384 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/GetAttendanceByDateReq.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/GetAttendanceByDateReq.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.dto.request; +package backend.pirocheck.Attendance.dto.request; import lombok.Getter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/MarkAttendanceReq.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/MarkAttendanceReq.java similarity index 70% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/MarkAttendanceReq.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/MarkAttendanceReq.java index a6aad92..779ead3 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/request/MarkAttendanceReq.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/request/MarkAttendanceReq.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.dto.request; +package backend.pirocheck.Attendance.dto.request; import lombok.Getter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/ApiResponse.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/ApiResponse.java new file mode 100644 index 0000000..7cb7e9b --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/ApiResponse.java @@ -0,0 +1,38 @@ +package backend.pirocheck.Attendance.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ApiResponse { + private boolean success; + private String message; + private T data; + + public static ApiResponse success(T data) { + return ApiResponse.builder() + .success(true) + .data(data) + .build(); + } + + public static ApiResponse success(String message, T data) { + return ApiResponse.builder() + .success(true) + .message(message) + .data(data) + .build(); + } + + public static ApiResponse error(String message) { + return ApiResponse.builder() + .success(false) + .message(message) + .build(); + } +} \ No newline at end of file diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceCodeResponse.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceCodeResponse.java new file mode 100644 index 0000000..4fe0b37 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceCodeResponse.java @@ -0,0 +1,29 @@ +package backend.pirocheck.Attendance.dto.response; + +import backend.pirocheck.Attendance.entity.AttendanceCode; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AttendanceCodeResponse { + private String code; + private LocalDate date; + private int order; + private boolean isExpired; + + public static AttendanceCodeResponse from(AttendanceCode attendanceCode) { + return AttendanceCodeResponse.builder() + .code(attendanceCode.getCode()) + .date(attendanceCode.getDate()) + .order(attendanceCode.getOrder()) + .isExpired(attendanceCode.isExpired()) + .build(); + } +} \ No newline at end of file diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceSlotRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceSlotRes.java similarity index 79% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceSlotRes.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceSlotRes.java index 81f0bbf..aa1a5cc 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceSlotRes.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceSlotRes.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.dto.response; +package backend.pirocheck.Attendance.dto.response; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceStatusRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceStatusRes.java similarity index 72% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceStatusRes.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceStatusRes.java index 2a965ac..7a0cfa4 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/AttendanceStatusRes.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/AttendanceStatusRes.java @@ -1,6 +1,5 @@ -package backend.pirocheck.attendence.dto.response; +package backend.pirocheck.Attendance.dto.response; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/GetAttendanceByUserIdRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/GetAttendanceByUserIdRes.java similarity index 80% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/GetAttendanceByUserIdRes.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/GetAttendanceByUserIdRes.java index 50fd6a4..7c4a1fa 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/dto/response/GetAttendanceByUserIdRes.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/dto/response/GetAttendanceByUserIdRes.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.dto.response; +package backend.pirocheck.Attendance.dto.response; import lombok.Getter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/Attendance.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/Attendance.java similarity index 93% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/Attendance.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/Attendance.java index af9ce56..6c63eb7 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/Attendance.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/Attendance.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.entity; +package backend.pirocheck.Attendance.entity; import backend.pirocheck.User.entity.User; import jakarta.persistence.*; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/AttendanceCode.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/AttendanceCode.java similarity index 90% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/AttendanceCode.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/AttendanceCode.java index 358bf29..92812eb 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/entity/AttendanceCode.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/entity/AttendanceCode.java @@ -1,4 +1,4 @@ -package backend.pirocheck.attendence.entity; +package backend.pirocheck.Attendance.entity; import jakarta.persistence.*; import lombok.Getter; diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceCodeRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceCodeRepository.java similarity index 65% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceCodeRepository.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceCodeRepository.java index 2c30b55..edf9aac 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceCodeRepository.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceCodeRepository.java @@ -1,14 +1,16 @@ -package backend.pirocheck.attendence.repository; +package backend.pirocheck.Attendance.repository; -import backend.pirocheck.attendence.entity.AttendanceCode; +import backend.pirocheck.Attendance.entity.AttendanceCode; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.time.LocalDate; +import java.util.List; import java.util.Optional; @Repository public interface AttendanceCodeRepository extends JpaRepository { int countByDate(LocalDate date); Optional findByCodeAndDate(String code, LocalDate date); + List findByDateAndIsExpiredFalse(LocalDate date); } diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceRepository.java similarity index 69% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceRepository.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceRepository.java index 445f157..e06f6e9 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/repository/AttendanceRepository.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceRepository.java @@ -1,7 +1,7 @@ -package backend.pirocheck.attendence.repository; +package backend.pirocheck.Attendance.repository; -import backend.pirocheck.attendence.entity.Attendance; -import backend.pirocheck.attendence.entity.AttendanceCode; +import backend.pirocheck.User.entity.User; +import backend.pirocheck.Attendance.entity.Attendance; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -14,4 +14,7 @@ public interface AttendanceRepository extends JpaRepository { List findByUserId(Long userId); List findByUserIdAndDate(Long userId, LocalDate date); Optional findByUserIdAndDateAndOrder(Long userId, LocalDate date, int order); + + // 출석 실패 + int countByUserAndStatusFalse(User user); } diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/service/AttendanceService.java b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/service/AttendanceService.java similarity index 63% rename from backend/pirocheck/src/main/java/backend/pirocheck/attendence/service/AttendanceService.java rename to backend/pirocheck/src/main/java/backend/pirocheck/Attendance/service/AttendanceService.java index 42ffe8f..de65f49 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/service/AttendanceService.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Attendance/service/AttendanceService.java @@ -1,14 +1,14 @@ -package backend.pirocheck.attendence.service; +package backend.pirocheck.Attendance.service; import backend.pirocheck.User.entity.Role; import backend.pirocheck.User.entity.User; import backend.pirocheck.User.repository.UserRepository; -import backend.pirocheck.attendence.dto.response.AttendanceSlotRes; -import backend.pirocheck.attendence.dto.response.AttendanceStatusRes; -import backend.pirocheck.attendence.entity.Attendance; -import backend.pirocheck.attendence.entity.AttendanceCode; -import backend.pirocheck.attendence.repository.AttendanceCodeRepository; -import backend.pirocheck.attendence.repository.AttendanceRepository; +import backend.pirocheck.Attendance.dto.response.AttendanceSlotRes; +import backend.pirocheck.Attendance.dto.response.AttendanceStatusRes; +import backend.pirocheck.Attendance.entity.Attendance; +import backend.pirocheck.Attendance.entity.AttendanceCode; +import backend.pirocheck.Attendance.repository.AttendanceCodeRepository; +import backend.pirocheck.Attendance.repository.AttendanceRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +34,13 @@ public class AttendanceService { public AttendanceCode generateCodeAndCreateAttendances() { LocalDate today = LocalDate.now(); + // 만료되지 않은 출석 코드가 있는지 확인 + List activeAttendanceCodes = attendanceCodeRepository.findByDateAndIsExpiredFalse(today); + if (!activeAttendanceCodes.isEmpty()) { + // 만료되지 않은 코드가 있으면 해당 코드 반환 + return activeAttendanceCodes.get(0); + } + // 오늘 생성된 출석코드 개수 = 현재까지 생성된 차시 수 + 1 (MAX=3) int currentOrder = attendanceCodeRepository.countByDate(today) + 1; @@ -61,48 +68,90 @@ public AttendanceCode generateCodeAndCreateAttendances() { return attendanceCode; } + // 현재 활성화된 출석코드 조회 함수 + public Optional getActiveAttendanceCode() { + LocalDate today = LocalDate.now(); + List activeCodes = attendanceCodeRepository.findByDateAndIsExpiredFalse(today); + + if (activeCodes.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(activeCodes.get(0)); + } + + // 가장 최근 활성화된 출석코드 만료처리 함수 + @Transactional + public String expireLatestAttendanceCode() { + Optional activeCodeOpt = getActiveAttendanceCode(); + + if (activeCodeOpt.isEmpty()) { + return "현재 활성화된 출석코드가 없습니다"; + } + + AttendanceCode code = activeCodeOpt.get(); + code.setExpired(true); + attendanceCodeRepository.save(code); + + return "출석 코드가 성공적으로 만료되었습니다"; + } + // 출석코드 만료처리 함수 @Transactional - public boolean exprireAttendanceCode(String code) { + public String exprireAttendanceCode(String code) { Optional codeOpt = attendanceCodeRepository.findByCodeAndDate(code, LocalDate.now()); if (codeOpt.isEmpty()) { - return false; + return "존재하지 않는 출석 코드입니다"; } AttendanceCode attendanceCode = codeOpt.get(); if (attendanceCode.isExpired()) { - return false; + return "이미 만료된 출석 코드입니다"; } attendanceCode.setExpired(true); attendanceCodeRepository.save(attendanceCode); - return true; + return "출석 코드가 성공적으로 만료되었습니다"; } // 출석처리 함수 @Transactional - public boolean markAttendance(Long userId, String inputCode) { + public String markAttendance(Long userId, String inputCode) { // 1. 출석코드 일치 비교 Optional validCodeOpt = attendanceCodeRepository.findByCodeAndDate(inputCode, LocalDate.now()); - if (validCodeOpt.isEmpty()) return false; + if (validCodeOpt.isEmpty()) { + return "출석 코드가 존재하지 않습니다. 현재 출석 체크가 진행중이 아닙니다"; + } AttendanceCode code = validCodeOpt.get(); + + if (code.isExpired()) { + return "출석 코드가 만료되었습니다"; + } // 2. 해당 유저의 출석 레코드 조회 Optional attendanceOpt = attendanceRepository.findByUserIdAndDateAndOrder(userId, code.getDate(), code.getOrder()); - if (attendanceOpt.isEmpty()) return false; + if (attendanceOpt.isEmpty()) { + return "출석 정보를 찾을 수 없습니다"; + } // 3. 출석 처리 Attendance attendance = attendanceOpt.get(); + + // 이미 출석한 경우 + if (attendance.isStatus()) { + return "이미 출석처리가 완료되었습니다"; + } + attendance.setStatus(true); attendanceRepository.save(attendance); - return true; + return "출석이 성공적으로 처리되었습니다"; } // 유저의 전체 출석 현황을 조회하는 함수 diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/controller/DepositController.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/controller/DepositController.java new file mode 100644 index 0000000..f4a5f63 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/controller/DepositController.java @@ -0,0 +1,23 @@ +package backend.pirocheck.Deposit.controller; + + +import backend.pirocheck.Deposit.dto.DepositResDto; +import backend.pirocheck.Deposit.service.DepositService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/deposit") +@RequiredArgsConstructor +public class DepositController { + + private final DepositService depositService; + + @GetMapping("/{userId}") + public DepositResDto getDeposit(@PathVariable Long userId) { + return depositService.getDeposit(userId); + } +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/dto/DepositResDto.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/dto/DepositResDto.java new file mode 100644 index 0000000..d05dcdc --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/dto/DepositResDto.java @@ -0,0 +1,19 @@ +package backend.pirocheck.Deposit.dto; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DepositResDto { + private int amount; + private int descentAssignment; + private int descentAttendance; + private int ascentDefence; + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/entity/Deposit.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/entity/Deposit.java new file mode 100644 index 0000000..139e385 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/entity/Deposit.java @@ -0,0 +1,40 @@ +package backend.pirocheck.Deposit.entity; + +import backend.pirocheck.User.entity.User; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Deposit { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", unique = true) + private User user; + + private int amount; // 현재 보증금 + private int descentAssignment; // 과제 차감 총합 + private int descentAttendance; // 출석 차감 총합 + private int ascentDefence; // 방어권 + + // 보증금 계산 + public void updateAmounts(int descentAssignment, int descentAttendance, int ascentDefence) { + this.descentAssignment = descentAssignment; + this.descentAttendance = descentAttendance; + this.ascentDefence = ascentDefence; + + int calculateAmount = 120000 - descentAssignment - descentAttendance + ascentDefence; + this.amount = Math.min(calculateAmount, 120000); // 12만원 넘어가지 않도록 + } + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/init/DepositInitRunner.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/init/DepositInitRunner.java new file mode 100644 index 0000000..f077db6 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/init/DepositInitRunner.java @@ -0,0 +1,37 @@ +package backend.pirocheck.Deposit.init; + +import backend.pirocheck.Deposit.entity.Deposit; +import backend.pirocheck.Deposit.repository.DepositRepository; +import backend.pirocheck.User.entity.User; +import backend.pirocheck.User.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DepositInitRunner implements CommandLineRunner { + + private final DepositRepository depositRepository; + private final UserRepository userRepository; + + @Override + public void run(String... args) { + for (User user : userRepository.findAll()) { + if (!depositRepository.existsByUser(user)) { + // 보증금 레코드가 없으면 새로 생성 + Deposit deposit = Deposit.builder() + .user(user) + .amount(120000) + .descentAssignment(0) + .descentAttendance(0) + .ascentDefence(0) + .build(); + + depositRepository.save(deposit); + } + } + } + + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/repository/DepositRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/repository/DepositRepository.java new file mode 100644 index 0000000..d487b03 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/repository/DepositRepository.java @@ -0,0 +1,12 @@ +package backend.pirocheck.Deposit.repository; + +import backend.pirocheck.Deposit.entity.Deposit; +import backend.pirocheck.User.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface DepositRepository extends JpaRepository { + Deposit findByUser(User user); + boolean existsByUser(User user); // 중복 방지를 위한 존재 여부 확인 +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/service/DepositService.java b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/service/DepositService.java new file mode 100644 index 0000000..f8cd876 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Deposit/service/DepositService.java @@ -0,0 +1,56 @@ +package backend.pirocheck.Deposit.service; + + +import backend.pirocheck.Deposit.dto.DepositResDto; +import backend.pirocheck.Deposit.entity.Deposit; +import backend.pirocheck.Deposit.repository.DepositRepository; +import backend.pirocheck.User.entity.User; +import backend.pirocheck.User.repository.UserRepository; +import backend.pirocheck.assignment.entity.AssignmentStatus; +import backend.pirocheck.assignment.repository.AssignmentRepository; +import backend.pirocheck.Attendance.repository.AttendanceRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DepositService { + + private final DepositRepository depositRepository; + private final UserRepository userRepository; + private final AttendanceRepository attendanceRepository; + private final AssignmentRepository assignmentRepository; // 확인 + + @Transactional + public DepositResDto getDeposit(Long userId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 유저입니다.")); + + Deposit deposit = depositRepository.findByUser(user); + + // 출석 실패 + int failAttendanceCount = attendanceRepository.countByUserAndStatusFalse(user); + int descentAttendance = failAttendanceCount * 10000; + + // 과제 실패 + int failAssignmentCount = assignmentRepository.countByUserAndSubmitted(user, AssignmentStatus.FAILURE); // 확인 + int weakAssignmentCount = assignmentRepository.countByUserAndSubmitted(user, AssignmentStatus.INSUFFICIENT); // 확인 + int descentAssignment = failAssignmentCount * 10_000 + weakAssignmentCount * 5_000; + + // 방어권 + int ascentDefence = deposit.getAscentDefence(); + + // 보증금 업데이트 + deposit.updateAmounts(descentAssignment, descentAttendance, ascentDefence); + depositRepository.save(deposit); + + return DepositResDto.builder() + .amount(deposit.getAmount()) + .descentAssignment(deposit.getDescentAssignment()) + .descentAttendance(deposit.getDescentAttendance()) + .ascentDefence(deposit.getAscentDefence()) + .build(); + + } +} \ No newline at end of file diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java index ce1c180..5bb97bb 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java @@ -3,4 +3,4 @@ public enum Role { ADMIN, MEMBER -} +} \ No newline at end of file diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java index e2b88d0..ad215b0 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java @@ -32,4 +32,4 @@ public class User { private Integer generation; -} +} \ No newline at end of file diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/controller/AssignmentController.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/controller/AssignmentController.java new file mode 100644 index 0000000..3552b44 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/controller/AssignmentController.java @@ -0,0 +1,36 @@ +package backend.pirocheck.assignment.controller; + +import backend.pirocheck.assignment.dto.request.AssignmentReq; +import backend.pirocheck.assignment.dto.response.AssignmentRes; +import backend.pirocheck.assignment.dto.response.AssignmentWeekRes; +import backend.pirocheck.assignment.service.AssignmentService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/assignment") +@RequiredArgsConstructor +public class AssignmentController { + + private final AssignmentService assignmentService; + + // 과제 결과 확인 API +// @GetMapping("/{userId}") +// public List getAssignment(@PathVariable("userId") Long userId) { +// // 주차별 과제 제목, 요일별 과제 제목, 과제 상태 반환 +// return assignmentService.search(userId); +// } + // 과제 주차별, 요일별 그룹화 JSON + @GetMapping("/grouped/{userId}") + public List getGroupedAssignments(@PathVariable Long userId) { + return assignmentService.search(userId); + } + + // 과제 생성 API + @PostMapping("/signup") + public String signupAssignment(@RequestBody AssignmentReq assignmentReq) { + return assignmentService.create(assignmentReq); + } +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/request/AssignmentReq.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/request/AssignmentReq.java new file mode 100644 index 0000000..3d1cfd6 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/request/AssignmentReq.java @@ -0,0 +1,16 @@ +package backend.pirocheck.assignment.dto.request; + +import backend.pirocheck.assignment.entity.AssignmentStatus; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AssignmentReq { + + private String assignmentName; + private Long week; + private Long section; + private Long orderNumber; + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDayRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDayRes.java new file mode 100644 index 0000000..be325e6 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDayRes.java @@ -0,0 +1,13 @@ +package backend.pirocheck.assignment.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@Getter +@AllArgsConstructor +public class AssignmentDayRes { + private String day; // 화, 목, 토 + private List details; +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDetailRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDetailRes.java new file mode 100644 index 0000000..5a40dad --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentDetailRes.java @@ -0,0 +1,12 @@ +package backend.pirocheck.assignment.dto.response; + +import backend.pirocheck.assignment.entity.AssignmentStatus; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AssignmentDetailRes { + private String assignmentName; + private AssignmentStatus status; +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentRes.java new file mode 100644 index 0000000..c924848 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentRes.java @@ -0,0 +1,18 @@ +package backend.pirocheck.assignment.dto.response; + +import backend.pirocheck.assignment.entity.AssignmentStatus; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AssignmentRes { + +// private Long userId; + private String assignmentName; + private Long week; + private Long section; + private Long orderNumber; + private AssignmentStatus submitted; + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentWeekRes.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentWeekRes.java new file mode 100644 index 0000000..4be2d26 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/dto/response/AssignmentWeekRes.java @@ -0,0 +1,14 @@ +package backend.pirocheck.assignment.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@Getter +@AllArgsConstructor +public class AssignmentWeekRes { + private Long week; + private String title; // 각 주차 주제 (e.g, Git / HTML / CSS) + private List days; +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/Assignment.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/Assignment.java new file mode 100644 index 0000000..62aa724 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/Assignment.java @@ -0,0 +1,49 @@ +package backend.pirocheck.assignment.entity; + +import backend.pirocheck.User.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder(access = AccessLevel.PRIVATE) +@NoArgsConstructor +@AllArgsConstructor +public class Assignment { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // user 정보와 과제 정보를 연결해 저장 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; // user를 생성했을 때의 해당 user 엔티티 + + // 과제명 + private String assignmentName; + + // 주차 + private Long week; + + // 요일 + private Long section; + + // 과제 번호 + private Long orderNumber; + + // 과제 결과 + @Enumerated(EnumType.STRING) + @Column(length = 100) + private AssignmentStatus submitted; + + // 관리자가 생성 + public static Assignment create(String assignmentName, Long week, Long section, Long orderNumber) { + return Assignment.builder() + .assignmentName(assignmentName) + .week(week) + .section(section) + .orderNumber(orderNumber) + .build(); + } +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/AssignmentStatus.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/AssignmentStatus.java new file mode 100644 index 0000000..dcc9466 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/entity/AssignmentStatus.java @@ -0,0 +1,5 @@ +package backend.pirocheck.assignment.entity; + +public enum AssignmentStatus { + SUCCESS, INSUFFICIENT, FAILURE; +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/repository/AssignmentRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/repository/AssignmentRepository.java new file mode 100644 index 0000000..c0048f9 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/repository/AssignmentRepository.java @@ -0,0 +1,20 @@ +package backend.pirocheck.assignment.repository; + +import backend.pirocheck.User.entity.User; +import backend.pirocheck.assignment.entity.Assignment; +import backend.pirocheck.assignment.entity.AssignmentStatus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface AssignmentRepository extends JpaRepository { + + // 유저별 과제 목록 조회 + List findByUserId(Long userId); + + // 보증금 + int countByUserAndSubmitted(User user, AssignmentStatus status); + +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/assignment/service/AssignmentService.java b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/service/AssignmentService.java new file mode 100644 index 0000000..d98b74b --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/assignment/service/AssignmentService.java @@ -0,0 +1,83 @@ +package backend.pirocheck.assignment.service; + +import backend.pirocheck.assignment.dto.request.AssignmentReq; +import backend.pirocheck.assignment.dto.response.AssignmentDayRes; +import backend.pirocheck.assignment.dto.response.AssignmentDetailRes; +import backend.pirocheck.assignment.dto.response.AssignmentRes; +import backend.pirocheck.assignment.dto.response.AssignmentWeekRes; +import backend.pirocheck.assignment.entity.Assignment; +import backend.pirocheck.assignment.repository.AssignmentRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@Transactional +@RequiredArgsConstructor +public class AssignmentService { + + private final AssignmentRepository assignmentRepository; + + // 그룹화 되지 않은 JSON 형식 +// public List search(Long userId) { +// // 각 유저별 전체 과제 목록 조회 (userId를 어떻게 넘길 것인가?) search의 인자로 넘긴다... +// List assignments = assignmentRepository.findByUserId(userId); +// +// return assignments.stream() +// .map(assignment -> new AssignmentRes(assignment.getAssignmentName(), assignment.getWeek(), assignment.getSection(), assignment.getOrderNumber(), assignment.getSubmitted())) +// .toList(); +// } + public List search(Long userId) { + + List assignments = assignmentRepository.findByUserId(userId); + // week 기준으로 그룹화 + Map> weekGroup = assignments.stream() + .collect(Collectors.groupingBy(Assignment::getWeek)); // assignments를 week 별로 그룹핑 + + List assignmentResponses = new ArrayList<>(); + + for (Map.Entry> entry : weekGroup.entrySet()) { + Long week = entry.getKey(); + List assignmentList = entry.getValue(); + + // day를 기준으로 그룹핑 + Map> dayGroup = assignments.stream() + .collect(Collectors.groupingBy(Assignment::getSection)); + + List assignmentDayResList = new ArrayList<>(); + + for (Map.Entry> dayEntry : dayGroup.entrySet()) { + Long day = dayEntry.getKey(); + List dayAssignmentList = dayEntry.getValue(); + + // 세부 과제명과 과제 결과를 리스트 형태로 + List assignmentDetailResList = dayAssignmentList.stream() + .map(assignment -> new AssignmentDetailRes( + assignment.getAssignmentName(), + assignment.getSubmitted() + )) + .toList(); + } + } + + return assignmentResponses; + } + + public String create(AssignmentReq assignmentReq) { + + Assignment assignment = Assignment.create( + assignmentReq.getAssignmentName(), + assignmentReq.getWeek(), + assignmentReq.getSection(), + assignmentReq.getOrderNumber()); + + assignment = assignmentRepository.save(assignment); + + return assignment.getAssignmentName(); + } +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/controller/AttendanceController.java b/backend/pirocheck/src/main/java/backend/pirocheck/attendence/controller/AttendanceController.java deleted file mode 100644 index ac5847a..0000000 --- a/backend/pirocheck/src/main/java/backend/pirocheck/attendence/controller/AttendanceController.java +++ /dev/null @@ -1,55 +0,0 @@ -package backend.pirocheck.attendence.controller; - -import backend.pirocheck.attendence.dto.request.GetAttendanceByDateReq; -import backend.pirocheck.attendence.dto.request.MarkAttendanceReq; -import backend.pirocheck.attendence.dto.response.AttendanceSlotRes; -import backend.pirocheck.attendence.dto.response.AttendanceStatusRes; -import backend.pirocheck.attendence.entity.AttendanceCode; -import backend.pirocheck.attendence.service.AttendanceService; -import lombok.RequiredArgsConstructor; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDate; -import java.util.List; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/api/attendance") -public class AttendanceController { - - private final AttendanceService attendanceService; - - // 특정 유저의 출석 정보 - @GetMapping("/user") - public List getAttendanceByUserId(@RequestParam Long userId) { - return attendanceService.findByUserId(userId); - } - - // 특정 유저의 특정 일자 출석 정보 - @GetMapping("/user/date") - public List getAttendanceByUserIdAndDate( - @RequestParam Long userId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date - ) { - return attendanceService.findByUserIdAndDate(userId, LocalDate.now()); - } - - // 출석체크 시작 - @PostMapping("/start") - public AttendanceCode postAttendance() { - return attendanceService.generateCodeAndCreateAttendances(); - } - - // 출석코드 비교 - @PostMapping("/mark") - public boolean markAttendance(@RequestBody MarkAttendanceReq req) { - return attendanceService.markAttendance(req.getUserId(), req.getCode()); - } - - // 출석체크 종료 - @PutMapping("/expire") - public boolean expireAttendance(@RequestParam String code) { - return attendanceService.exprireAttendanceCode(code); - } -} diff --git a/backend/pirocheck/src/main/resources/application.yml b/backend/pirocheck/src/main/resources/application.yml index 656f19b..1416bb4 100644 --- a/backend/pirocheck/src/main/resources/application.yml +++ b/backend/pirocheck/src/main/resources/application.yml @@ -3,10 +3,12 @@ spring: url: jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} username: ${DB_USER} password: ${DB_PASSWORD} + driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: - format_sql: true \ No newline at end of file + format_sql: true + open-in-view: false \ No newline at end of file diff --git a/backend/pirocheck/test/java/backend/pirocheck/PirocheckApplicationTests.java b/backend/pirocheck/test/java/backend/pirocheck/PirocheckApplicationTests.java new file mode 100644 index 0000000..ed24e06 --- /dev/null +++ b/backend/pirocheck/test/java/backend/pirocheck/PirocheckApplicationTests.java @@ -0,0 +1,13 @@ +package backend.pirocheck; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class PirocheckApplicationTests { + + @Test + void contextLoads() { + } + +}