Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -245,4 +246,28 @@ public ResponseEntity<Void> 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<Void> addAllUsers(
@PathVariable UUID sessionId,
@AuthenticationPrincipal CustomUserDetails userDetails
) {
UUID adminUserId = requireUserId(userDetails);
attendanceSessionService.addAllUsers(sessionId, adminUserId);
return ResponseEntity.ok().build();
}}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -16,6 +17,7 @@
public interface SessionUserRepository extends JpaRepository<SessionUser, UUID> {
Optional<SessionUser> findByAttendanceSession_AttendanceSessionIdAndUser_UserId(UUID sessionId, UUID userId);

boolean existsByAttendanceSessionAndUser(AttendanceSession session, User user);

boolean existsByAttendanceSession_AttendanceSessionIdAndUser_UserId(UUID sessionId, UUID userId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<User> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,4 @@ public ResponseEntity<List<ActivityLog>> getAttendanceLogs(@AuthenticationPrinci
public ResponseEntity<List<ActivityLog>> getBoardLogs(@AuthenticationPrincipal CustomUserDetails customUserDetails) {
return ResponseEntity.ok(userService.getBoardActivityLog(customUserDetails.getUserId()));
}
}
}