diff --git a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java index 6a5b82b9..c329bec9 100644 --- a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java +++ b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java @@ -14,6 +14,7 @@ import org.sejongisc.backend.common.auth.dto.CustomUserDetails; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -245,4 +246,28 @@ public ResponseEntity deleteSession( attendanceSessionService.deleteSession(sessionId, adminUserId); return ResponseEntity.ok().build(); } -} + + /** + * 정규 세션 용 전체 회원 넣는 API(회장용) + */ + + @Operation( + summary = "정규세션에 active 상태인 전체 회원 추가", + description = """ + ## 인증(JWT): **필요** + + ## 요청 파라미터 ( `sessionId` ) + + ## 회장이면서 세션의 장이어야만 가능 + """ + ) + @PostMapping("/{sessionId}/add-all-users") + @PreAuthorize("hasRole('PRESIDENT')") + public ResponseEntity addAllUsers( + @PathVariable UUID sessionId, + @AuthenticationPrincipal CustomUserDetails userDetails + ) { + UUID adminUserId = requireUserId(userDetails); + attendanceSessionService.addAllUsers(sessionId, adminUserId); + return ResponseEntity.ok().build(); +}} diff --git a/backend/src/main/java/org/sejongisc/backend/attendance/repository/SessionUserRepository.java b/backend/src/main/java/org/sejongisc/backend/attendance/repository/SessionUserRepository.java index be5b3689..2b3d511d 100644 --- a/backend/src/main/java/org/sejongisc/backend/attendance/repository/SessionUserRepository.java +++ b/backend/src/main/java/org/sejongisc/backend/attendance/repository/SessionUserRepository.java @@ -1,5 +1,6 @@ package org.sejongisc.backend.attendance.repository; +import org.sejongisc.backend.attendance.entity.AttendanceSession; import org.sejongisc.backend.attendance.entity.SessionUser; import org.sejongisc.backend.user.entity.User; import org.springframework.data.jpa.repository.JpaRepository; @@ -16,6 +17,7 @@ public interface SessionUserRepository extends JpaRepository { Optional findByAttendanceSession_AttendanceSessionIdAndUser_UserId(UUID sessionId, UUID userId); + boolean existsByAttendanceSessionAndUser(AttendanceSession session, User user); boolean existsByAttendanceSession_AttendanceSessionIdAndUser_UserId(UUID sessionId, UUID userId); diff --git a/backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java b/backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java index 40639def..c1081b62 100644 --- a/backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java +++ b/backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java @@ -12,6 +12,7 @@ import org.sejongisc.backend.attendance.repository.SessionUserRepository; import org.sejongisc.backend.common.exception.CustomException; import org.sejongisc.backend.common.exception.ErrorCode; +import org.sejongisc.backend.user.entity.UserStatus; import org.sejongisc.backend.user.repository.UserRepository; import org.sejongisc.backend.user.entity.User; import org.springframework.stereotype.Service; @@ -152,4 +153,31 @@ public void closeSession(UUID sessionId, UUID userId) { attendanceSessionRepository.save(session); log.info("출석 세션 종료 완료: 세션ID={}", sessionId); } + + public void addAllUsers(UUID sessionId, UUID userId) { + // 권한 확인 + attendanceAuthorizationService.ensureAdmin(sessionId, userId); + log.info("세션에 모든 사용자 추가 시작: 세션ID={}", sessionId); + + AttendanceSession session = attendanceSessionRepository.findById(sessionId) + .orElseThrow(() -> new CustomException(ErrorCode.SESSION_NOT_FOUND)); + + // UserStatus.ACTIVE인 사용자만 추가하도록 수정 + List allUsers = userRepository.findAllByStatus(UserStatus.ACTIVE); + + for (User user : allUsers) { + boolean alreadyAdded = sessionUserRepository.existsByAttendanceSessionAndUser(session, user); + if (!alreadyAdded) { + SessionUser su = SessionUser.builder() + .attendanceSession(session) + .user(user) + .sessionRole(SessionRole.PARTICIPANT) + .build(); + sessionUserRepository.save(su); + log.info("사용자 {} 세션에 추가됨", user.getUserId()); + } + } + + log.info("세션에 모든 사용자 추가 완료: 세션ID={}", sessionId); + } } diff --git a/backend/src/main/java/org/sejongisc/backend/user/controller/UserController.java b/backend/src/main/java/org/sejongisc/backend/user/controller/UserController.java index 173f7379..ca50e006 100644 --- a/backend/src/main/java/org/sejongisc/backend/user/controller/UserController.java +++ b/backend/src/main/java/org/sejongisc/backend/user/controller/UserController.java @@ -69,4 +69,4 @@ public ResponseEntity> getAttendanceLogs(@AuthenticationPrinci public ResponseEntity> getBoardLogs(@AuthenticationPrincipal CustomUserDetails customUserDetails) { return ResponseEntity.ok(userService.getBoardActivityLog(customUserDetails.getUserId())); } -} \ No newline at end of file +}