diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeController.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeController.java index a247ec6f..5fe1589d 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeController.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeController.java @@ -33,7 +33,7 @@ public class ChallengeController implements ChallengeControllerDocs { private final ChallengeService challengeService; @GetMapping - public ResponseEntity> getChallenges( + public ResponseEntity> getChallenges( ChallengeSliceRequest challengeSliceRequest) { ChallengeSliceResponse challengeSliceResponse = challengeService.getChallenges( challengeSliceRequest); @@ -41,51 +41,53 @@ public ResponseEntity> getChallenges( } @PostMapping - public ResponseEntity> createChallenge( + public ResponseEntity> createChallenge( @RequestBody ChallengeRequest challengeRequest) { return ResponseEntity.ok( ResultResponse.success(challengeService.createChallenge(challengeRequest))); } @PostMapping(value = "/reports", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ResponseEntity> createReport( + public ResponseEntity> createReport( @RequestPart ReportRequest reportRequest, @RequestPart MultipartFile file) { long reportId = challengeService.createReport(reportRequest, file); return ResponseEntity.ok(ResultResponse.success(reportId)); } @PatchMapping(value = "/reports/{id}") - public ResponseEntity> confirmReport(@PathVariable long id, + public ResponseEntity> confirmReport(@PathVariable long id, ReportType reportType) { challengeService.confirmReport(id, reportType); - return ResponseEntity.ok(ResultResponse.success(null)); + return ResponseEntity.ok(ResultResponse.success(true)); } @GetMapping("/running") - public ResponseEntity> getRunningChallenge( - @RequestParam(required = true) long organizationId) { + public ResponseEntity> getRunningChallenge( + @RequestParam long organizationId) { RunningChallengeResponse runningChallengeResponse = challengeService.getRunningChallenge( organizationId); return ResponseEntity.ok(ResultResponse.success(runningChallengeResponse)); } @GetMapping("/running/member") - public ResponseEntity> getRunningMemberChallenge( - @RequestParam(required = true) long organizationId) { + public ResponseEntity> getRunningMemberChallenge( + @RequestParam long organizationId) { RunningMemberChallengeResponse runningMemberChallenge = challengeService.getRunningMemberChallenge( organizationId); return ResponseEntity.ok(ResultResponse.success(runningMemberChallenge)); } @GetMapping("/{id}") - public ResponseEntity> getChallengeDetail(@PathVariable long id, + public ResponseEntity> getChallengeDetail( + @PathVariable long id, @RequestParam(required = false) Long groupId) { ChallengeResponse challengeResponse = challengeService.getChallengeDetail(id, groupId); return ResponseEntity.ok(ResultResponse.success(challengeResponse)); } @GetMapping("/{id}/simple") - public ResponseEntity> getChallengeSimple(@PathVariable long id) { + public ResponseEntity> getChallengeSimple( + @PathVariable long id) { ChallengeSimpleResponse challengeSimple = challengeService.getChallengeSimple(id); return ResponseEntity.ok(ResultResponse.success(challengeSimple)); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeControllerDocs.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeControllerDocs.java index 22589b1b..77e398b2 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeControllerDocs.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/ChallengeControllerDocs.java @@ -38,7 +38,7 @@ public interface ChallengeControllerDocs { content = @Content(schema = @Schema(implementation = ChallengeSliceResponse.class))) }) @GetMapping - ResponseEntity> getChallenges( + ResponseEntity> getChallenges( ChallengeSliceRequest challengeSliceRequest ); @@ -51,7 +51,7 @@ ResponseEntity> getChallenges( @ApiResponse(responseCode = "404", description = "(message : \"학급을 찾을 수 없습니다.\")", content = @Content) }) @PostMapping - public ResponseEntity> createChallenge( + ResponseEntity> createChallenge( @RequestBody ChallengeRequest challengeRequest ); @@ -65,7 +65,7 @@ public ResponseEntity> createChallenge( @ApiResponse(responseCode = "500", description = "(message : \"AWS 서버 에러입니다.\")", content = @Content) }) @PostMapping(value = "/reports", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - ResponseEntity> createReport( + ResponseEntity> createReport( @RequestPart ReportRequest reportRequest, @RequestPart @@ -79,7 +79,7 @@ ResponseEntity> createReport( @ApiResponse(responseCode = "404", description = "(message : \"레포트를 찾을 수 없습니다.\")", content = @Content) }) @PatchMapping(value = "/reports/{id}") - public ResponseEntity> confirmReport( + ResponseEntity> confirmReport( @Schema(description = "레포트 id") @PathVariable long id, @@ -102,8 +102,8 @@ public ResponseEntity> confirmReport( """, content = @Content) }) @GetMapping("/running") - public ResponseEntity> getRunningChallenge( - @RequestParam(required = true) + ResponseEntity> getRunningChallenge( + @RequestParam @Parameter(description = "학급 ID", required = true, in = ParameterIn.QUERY) long organizationId ); @@ -125,8 +125,8 @@ public ResponseEntity> getRunningChallenge( """, content = @Content) }) @GetMapping("/running/member") - ResponseEntity> getRunningMemberChallenge( - @RequestParam(required = true) + ResponseEntity> getRunningMemberChallenge( + @RequestParam @Parameter(description = "학급 ID", required = true, in = ParameterIn.QUERY) long organizationId ); @@ -139,12 +139,12 @@ ResponseEntity> getRunningMemberChallenge( content = @Content(schema = @Schema(implementation = ChallengeResponse.class))) }) @GetMapping("/{id}") - public ResponseEntity> getChallengeDetail( + ResponseEntity> getChallengeDetail( @PathVariable @Parameter(description = "함께달리기 ID", required = true, in = ParameterIn.PATH) long id, @RequestParam(required = false) - @Parameter(description = "그룹 ID", required = false, in = ParameterIn.QUERY) + @Parameter(description = "그룹 ID", in = ParameterIn.QUERY) Long groupId); @Operation(summary = "함께달리기 요약 조회", @@ -153,7 +153,7 @@ public ResponseEntity> getChallengeDetail( content = @Content(schema = @Schema(implementation = ChallengeSimpleResponse.class))) }) @GetMapping("/{id}/simple") - ResponseEntity> getChallengeSimple( + ResponseEntity> getChallengeSimple( @PathVariable @Parameter(description = "함께달리기 ID", required = true, in = ParameterIn.PATH) long id diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupController.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupController.java index b51a0910..b4611321 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupController.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupController.java @@ -2,6 +2,7 @@ import com.quiz.ourclass.domain.challenge.dto.request.AutoGroupMatchingRequest; import com.quiz.ourclass.domain.challenge.dto.response.AutoGroupMatchingResponse; +import com.quiz.ourclass.domain.challenge.dto.response.MatchingRoomResponse; import com.quiz.ourclass.domain.challenge.service.GroupService; import com.quiz.ourclass.global.dto.ResultResponse; import java.util.List; @@ -21,37 +22,39 @@ public class GroupController implements GroupControllerDocs { private final GroupService groupService; @PostMapping("/groups/matchingroom") - public ResponseEntity> createMatchingRoom(long challengeId) { + public ResponseEntity> createMatchingRoom( + long challengeId) { return ResponseEntity.ok( ResultResponse.success(groupService.createMatchingRoom(challengeId))); } @PostMapping("/groups/join") - public ResponseEntity> joinMatchingRoom(String key, boolean joinStatus) { + public ResponseEntity> joinMatchingRoom(String key, + boolean joinStatus) { return ResponseEntity.ok( ResultResponse.success(groupService.joinMatchingRoom(key, joinStatus))); } @PostMapping("/groups") - public ResponseEntity> createGroup(String key) { + public ResponseEntity> createGroup(String key) { return ResponseEntity.ok( ResultResponse.success(groupService.createGroup(key))); } @DeleteMapping("/groups/matching") - public ResponseEntity> deleteMatchingMember(String key, Long memberId) { + public ResponseEntity> deleteMatchingMember(String key, Long memberId) { groupService.deleteMatchingMember(key, memberId); - return ResponseEntity.ok(ResultResponse.success(null)); + return ResponseEntity.ok(ResultResponse.success(true)); } @GetMapping("/groups/invite") - public ResponseEntity> inviteMatchingRoom(String key, Long memberId) { + public ResponseEntity> inviteMatchingRoom(String key, Long memberId) { groupService.inviteMatchingRoom(key, memberId); - return ResponseEntity.ok(ResultResponse.success(null)); + return ResponseEntity.ok(ResultResponse.success(true)); } @GetMapping("/groups/matching") - public ResponseEntity> getGroupMatching( + public ResponseEntity>> getGroupMatching( AutoGroupMatchingRequest autoGroupMatchingRequest) { List autoGroupMatchingResponse = // groupService.getGroupMatching(autoGroupMatchingRequest); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupControllerDocs.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupControllerDocs.java index 26b601cd..34574b66 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupControllerDocs.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/controller/GroupControllerDocs.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -27,7 +28,7 @@ public interface GroupControllerDocs { content = @Content(schema = @Schema(implementation = MatchingRoomResponse.class))) }) @PostMapping("/groups/matchingroom") - ResponseEntity> createMatchingRoom( + ResponseEntity> createMatchingRoom( @Parameter(description = "함께달리기 ID", required = true, in = ParameterIn.QUERY) long challengeId ); @@ -44,7 +45,7 @@ ResponseEntity> createMatchingRoom( content = @Content(schema = @Schema(implementation = Boolean.class, description = "초대 응답"))) }) @PostMapping("/groups/join") - ResponseEntity> joinMatchingRoom( + ResponseEntity> joinMatchingRoom( @Parameter(description = "그룹 대기방 KEY", required = true, in = ParameterIn.QUERY) String key, @Parameter(description = "초대 수락 여부", required = true, in = ParameterIn.QUERY) @@ -61,7 +62,7 @@ ResponseEntity> joinMatchingRoom( }) @PostMapping("/groups") - ResponseEntity> createGroup( + ResponseEntity> createGroup( @Parameter(description = "그룹 대기방 KEY", required = true, in = ParameterIn.QUERY) String key ); @@ -73,7 +74,7 @@ ResponseEntity> createGroup( @ApiResponse(responseCode = "200", description = "(message : \"Success\")") }) @DeleteMapping("/groups/matching") - ResponseEntity> deleteMatchingMember( + ResponseEntity> deleteMatchingMember( @Parameter(description = "그룹 대기방 KEY", required = true, in = ParameterIn.QUERY) String key, @Parameter(description = "추방 멤버 ID", required = true, in = ParameterIn.QUERY) @@ -87,7 +88,7 @@ ResponseEntity> deleteMatchingMember( @ApiResponse(responseCode = "200", description = "(message : \"Success\")") }) @GetMapping("/groups/invite") - ResponseEntity> inviteMatchingRoom( + ResponseEntity> inviteMatchingRoom( @Parameter(description = "그룹 대기방 KEY", required = true, in = ParameterIn.QUERY) String key, @Parameter(description = "초대 멤버 ID", required = true, in = ParameterIn.QUERY) @@ -101,7 +102,7 @@ ResponseEntity> inviteMatchingRoom( content = @Content(schema = @Schema(implementation = AutoGroupMatchingResponse.class))) }) @GetMapping("/groups/matching") - ResponseEntity> getGroupMatching( + ResponseEntity>> getGroupMatching( AutoGroupMatchingRequest autoGroupMatchingRequest ); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/mapper/ChallengeMapper.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/mapper/ChallengeMapper.java index 336193cd..f316d90a 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/mapper/ChallengeMapper.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/mapper/ChallengeMapper.java @@ -25,7 +25,6 @@ public interface ChallengeMapper { @Mapping(target = "createTime", source = "challengeGroup.createTime") @Mapping(target = "endStatus", source = "challengeGroup.completeStatus") @Mapping(target = "memberNames", source = "challengeGroup.groupMembers") -//, qualifiedByName = "MemberToString") RunningMemberChallengeResponse groupToRunningMember(ChallengeSimpleDTO challengeSimpleDTO, ChallengeGroup challengeGroup, boolean leaderStatus); @@ -33,13 +32,4 @@ RunningMemberChallengeResponse groupToRunningMember(ChallengeSimpleDTO challenge @Mapping(target = "name", source = "member.name") @Mapping(target = "photo", source = "member.profileImage") MemberSimpleDTO groupMemberToMemberSimpleDTO(GroupMember groupMember); - -// @Named("MemberToString") -// static List memberToString(List groupMembers) { -// return groupMembers.stream() -// .map(groupMember -> { -// MemberSimpleDTO -// }) -// .collect(Collectors.toList()); -// } } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeRepositoryQuerydslImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeRepositoryQuerydslImpl.java index fc371505..1654b5de 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeRepositoryQuerydslImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeRepositoryQuerydslImpl.java @@ -51,7 +51,7 @@ public ChallengeSliceResponse getChallenges(ChallengeSliceRequest request) { .from(challenge) .where(challengeCondition) .offset(pageable.getOffset()) - .limit(pageable.getPageSize() + 1) + .limit(pageable.getPageSize() + 1L) .orderBy(challenge.id.desc()) .fetch(); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/ChallengeServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/ChallengeServiceImpl.java index 1b79f13f..70d9a308 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/ChallengeServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/ChallengeServiceImpl.java @@ -233,7 +233,7 @@ protected void challengeClosing(Challenge challenge) { @EventListener(ApplicationReadyEvent.class) @Transactional - protected void challengeClosingReload() { + public void challengeClosingReload() { List challenges = challengeRepository.findAllByEndStatusIsFalse(); challenges.forEach(challenge -> { log.info(challenge.getEndTime().toString()); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java index 8e6b5ea3..526f7d71 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java @@ -21,11 +21,11 @@ import com.quiz.ourclass.domain.notice.service.SseService; import com.quiz.ourclass.domain.organization.entity.Relationship; import com.quiz.ourclass.domain.organization.repository.MemberOrganizationRepository; -import com.quiz.ourclass.domain.organization.repository.OrganizationRepository; import com.quiz.ourclass.domain.organization.repository.RelationshipRepository; import com.quiz.ourclass.global.dto.MemberSimpleDTO; import com.quiz.ourclass.global.exception.ErrorCode; import com.quiz.ourclass.global.exception.GlobalException; +import com.quiz.ourclass.global.util.ConstantUtil; import com.quiz.ourclass.global.util.RedisUtil; import com.quiz.ourclass.global.util.UserAccessUtil; import java.time.LocalDateTime; @@ -50,25 +50,23 @@ public class GroupServiceImpl implements GroupService { private final MemberRepository memberRepository; private final ChallengeRepository challengeRepository; private final RelationshipRepository relationshipRepository; - private final OrganizationRepository organizationRepository; private final MemberOrganizationRepository memberOrganizationRepository; private final UserAccessUtil accessUtil; private final RedisUtil redisUtil; private final MemberMapper memberMapper; private final FriendlyGroup friendlyGroup; - private final static String REDIS_GROUP_KEY = "CHALLENGE_LEADER:"; @Transactional @Override public MatchingRoomResponse createMatchingRoom(long challengeId) { - long MemberId = accessUtil.getMember() + long memberId = accessUtil.getMember() .orElseThrow(() -> new GlobalException(ErrorCode.MEMBER_NOT_FOUND)).getId(); - String dataKey = makeGroupKey(challengeId, MemberId); + String dataKey = makeGroupKey(challengeId, memberId); Set redisMembers = redisUtil.setMembers(dataKey); if (redisMembers != null && !redisMembers.isEmpty()) { redisUtil.delete(dataKey); } - redisUtil.setAdd(dataKey, String.valueOf(MemberId)); + redisUtil.setAdd(dataKey, String.valueOf(memberId)); Challenge challenge = challengeRepository.findById(challengeId) .orElseThrow(() -> new GlobalException(CHALLENGE_NOT_FOUND)); int minCount = challenge.getMinCount(); @@ -209,7 +207,7 @@ public List getGroupMatching( return getUnfriendlyGroup(autoGroupMatchingRequest); } } - return null; + return new ArrayList<>(); } // TODO : 테스트 끝나고 해당 코드 지우기 @@ -248,7 +246,7 @@ public List testMethod( .filter(Optional::isPresent) .map(Optional::get) .map(memberMapper::memberToMemberSimpleDTO) - .collect(Collectors.toList()); + .toList(); groups.add(testGroup); return groups.stream().map(group -> AutoGroupMatchingResponse.builder() .members(group) @@ -312,8 +310,8 @@ private List getUnfriendlyGroup( return null; } - private static String makeGroupKey(long challengeId, long MemberId) { - return REDIS_GROUP_KEY + challengeId + "_" + MemberId; + private static String makeGroupKey(long challengeId, long memberId) { + return ConstantUtil.REDIS_GROUP_KEY + challengeId + "_" + memberId; } private static long getChallengeIdFromKey(String key) { diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseService.java b/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseService.java index 9648a812..4b08b991 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseService.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseService.java @@ -7,5 +7,5 @@ public interface SseService { SseEmitter subscribe(String lastEventId); - void send(SseDTO SseDto); + void send(SseDTO sseDto); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseServiceImpl.java index e928dc84..c7c58bc4 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/notice/service/SseServiceImpl.java @@ -5,6 +5,7 @@ import com.quiz.ourclass.domain.notice.repository.SseRepository; import com.quiz.ourclass.global.exception.ErrorCode; import com.quiz.ourclass.global.exception.GlobalException; +import com.quiz.ourclass.global.util.ConstantUtil; import com.quiz.ourclass.global.util.UserAccessUtil; import java.io.IOException; import java.time.LocalDateTime; @@ -19,8 +20,6 @@ @Service public class SseServiceImpl implements SseService { - private static final Long DEFAULT_TIMEOUT = 60L * 1000 * 20; - private static final Long REDIRECT_TIME = 5L * 1000; private final SseRepository sseRepository; private final UserAccessUtil accessUtil; @@ -29,7 +28,8 @@ public SseEmitter subscribe(String lastEventId) { long loginUserId = accessUtil.getMember() .orElseThrow(() -> new GlobalException(ErrorCode.MEMBER_NOT_FOUND)).getId(); String emitterId = makeTimeIncludeId(String.valueOf(loginUserId)); - SseEmitter emitter = sseRepository.save(emitterId, new SseEmitter(DEFAULT_TIMEOUT)); + SseEmitter emitter = sseRepository.save(emitterId, + new SseEmitter(ConstantUtil.DEFAULT_TIMEOUT)); // emitter의 상태를 체크함, 완료되었는지 타임아웃이 났는지 checkEmitterStatus(emitter, emitterId); @@ -47,7 +47,6 @@ public SseEmitter subscribe(String lastEventId) { if (lastEventId != null && !lastEventId.isEmpty()) { sendLostData(lastEventId, String.valueOf(loginUserId), emitterId, emitter); } - log.info("SSE연결 요청 : 유저 " + loginUserId + ", 에미터 " + emitterId); return emitter; } @@ -75,7 +74,7 @@ private void sendSse(SseEmitter emitter, String eventId, String emitterId, SseDT try { emitter.send(SseEmitter.event() .id(eventId) - .reconnectTime(REDIRECT_TIME) + .reconnectTime(ConstantUtil.REDIRECT_TIME) .name(dto.eventType().toString()) .data(dto)); } catch (IOException exception) { @@ -90,18 +89,9 @@ private String makeTimeIncludeId(String userId) { //종료 상태 private void checkEmitterStatus(SseEmitter emitter, String emitterId) { - emitter.onCompletion(() -> { - log.info("SSE연결 해제 : 에미터 " + emitter.toString() + ", 에미터 " + emitterId); - sseRepository.deleteById(emitterId); - }); - emitter.onTimeout(() -> { - log.info("SSE연결 타임아웃 : 에미터 " + emitter.toString() + ", 에미터 " + emitterId); - sseRepository.deleteById(emitterId); - }); - emitter.onError((e) -> { - log.info("SSE연결 에러 : 에미터 " + emitter.toString() + ", 에미터 " + emitterId); - sseRepository.deleteById(emitterId); - }); + emitter.onCompletion(() -> sseRepository.deleteById(emitterId)); + emitter.onTimeout(() -> sseRepository.deleteById(emitterId)); + emitter.onError(e -> sseRepository.deleteById(emitterId)); } private void sendLostData(String lastEventId, String userId, String emitterId, diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgController.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgController.java index 6b8fe489..0b637dac 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgController.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgController.java @@ -32,7 +32,7 @@ public class MemberOrgController implements MemberOrgControllerDocs { private final MemberOrgService memberOrgService; @PatchMapping("/{id}/point") - public ResponseEntity> updateMemberExp(@PathVariable long id, + public ResponseEntity> updateMemberExp(@PathVariable long id, @RequestBody UpdateExpRequest updateExpRequest) { UpdateExpResponse updateExpResponse = memberOrgService.updateMemberExp( id, updateExpRequest); @@ -40,7 +40,7 @@ public ResponseEntity> updateMemberExp(@PathVariable long id, } @GetMapping("/{id}/relation") - public ResponseEntity> getMemberRelation( + public ResponseEntity> getMemberRelation( @PathVariable long id, RelationRequest relationRequest) { RelationResponse relationResponse = memberOrgService.getMemberRelation( id, relationRequest); @@ -48,14 +48,14 @@ public ResponseEntity> getMemberRelation( } @GetMapping("/{id}") - public ResponseEntity> getMemberDetail( + public ResponseEntity> getMemberDetail( @PathVariable long id, long memberId) { MemberDetailResponse memberDetail = memberOrgService.getMemberDetail(id, memberId); return ResponseEntity.ok(ResultResponse.success(memberDetail)); } @GetMapping("/{id}/relations") - public ResponseEntity> getMemberRelations( + public ResponseEntity>> getMemberRelations( @PathVariable long id, long memberId, @RequestParam(required = false) Long limit) { List relations = memberOrgService.getMemberRelations( id, memberId, limit); @@ -63,13 +63,14 @@ public ResponseEntity> getMemberRelations( } @GetMapping("/{id}/home") - public ResponseEntity> getOrganizationHome(@PathVariable long id) { + public ResponseEntity> getOrganizationHome( + @PathVariable long id) { OrganizationHomeResponse homeResponse = memberOrgService.getOrganizationHome(id); return ResponseEntity.ok(ResultResponse.success(homeResponse)); } @PostMapping("/tag") - public ResponseEntity> tagGreet( + public ResponseEntity> tagGreet( @RequestBody TagGreetingRequest tagGreetingRequest) { int tagGreetingCount = memberOrgService.tagGreeting(tagGreetingRequest); return ResponseEntity.ok(ResultResponse.success(tagGreetingCount)); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgControllerDocs.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgControllerDocs.java index 4459d9f2..6f053f03 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgControllerDocs.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/MemberOrgControllerDocs.java @@ -16,6 +16,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -35,7 +36,7 @@ public interface MemberOrgControllerDocs { @ApiResponse(responseCode = "404", description = "(message : \"학급 멤버를 찾을 수 없습니다.\")", content = @Content) }) @PatchMapping("/{id}/point") - ResponseEntity> updateMemberExp( + ResponseEntity> updateMemberExp( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @@ -50,7 +51,7 @@ ResponseEntity> updateMemberExp( @ApiResponse(responseCode = "404", description = "(message : \"두 멤버간의 관계를 찾을 수 없습니다.\")", content = @Content) }) @GetMapping("/{id}/relation") - ResponseEntity> getMemberRelation( + ResponseEntity> getMemberRelation( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @@ -64,7 +65,7 @@ ResponseEntity> getMemberRelation( @ApiResponse(responseCode = "404", description = "(message : \"학급 멤버를 찾을 수 없습니다.\")", content = @Content) }) @GetMapping("/{id}") - ResponseEntity> getMemberDetail( + ResponseEntity> getMemberDetail( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @@ -79,14 +80,14 @@ ResponseEntity> getMemberDetail( content = @Content(schema = @Schema(implementation = RelationSimpleResponse.class))) }) @GetMapping("/{id}/relations") - ResponseEntity> getMemberRelations( + ResponseEntity>> getMemberRelations( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @Parameter(description = "멤버 ID", required = true, in = ParameterIn.QUERY) long memberId, @RequestParam(required = false) - @Parameter(description = "상위 n개만 조회 시 추가", required = false, in = ParameterIn.QUERY) + @Parameter(description = "상위 n개만 조회 시 추가", in = ParameterIn.QUERY) Long limit ); @@ -97,7 +98,7 @@ ResponseEntity> getMemberRelations( content = @Content(schema = @Schema(implementation = OrganizationHomeResponse.class))) }) @GetMapping("/{id}/home") - ResponseEntity> getOrganizationHome( + ResponseEntity> getOrganizationHome( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id @@ -110,7 +111,7 @@ ResponseEntity> getOrganizationHome( @ApiResponse(responseCode = "404", description = "(message : \"두 멤버간의 관계를 찾을 수 없습니다.\")", content = @Content) }) @PostMapping("/tag") - ResponseEntity> tagGreet( + ResponseEntity> tagGreet( @RequestBody TagGreetingRequest tagGreetingRequest ); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationController.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationController.java index fa55796a..0286901f 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationController.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationController.java @@ -29,39 +29,42 @@ public class OrganizationController implements OrganizationControllerDocs { private final OrganizationService organizationService; @PostMapping - public ResponseEntity> createOrganization( + public ResponseEntity> createOrganization( @RequestBody OrganizationRequest organizationRequest) { Long organizationId = organizationService.createOrganization(organizationRequest); return ResponseEntity.ok(ResultResponse.success(organizationId)); } @GetMapping - public ResponseEntity> getOrganizations() { + public ResponseEntity>> getOrganizations() { List organizations = organizationService.getOrganizations(); return ResponseEntity.ok(ResultResponse.success(organizations)); } @GetMapping("/{id}/code") - public ResponseEntity> getOrganizationCode(@PathVariable long id) { + public ResponseEntity> getOrganizationCode( + @PathVariable long id) { InviteCodeDTO code = organizationService.getOrganizationCode(id); return ResponseEntity.ok(ResultResponse.success(code)); } @PostMapping("/{id}/join") - public ResponseEntity> joinOrganization(@PathVariable long id, + public ResponseEntity> joinOrganization(@PathVariable long id, @RequestBody InviteCodeDTO inviteCodeDTO) { Long organizationId = organizationService.joinOrganization(id, inviteCodeDTO); return ResponseEntity.ok(ResultResponse.success(organizationId)); } @GetMapping("/{id}/members") - public ResponseEntity> getOrganizationMembers(@PathVariable long id) { + public ResponseEntity>> getOrganizationMembers( + @PathVariable long id) { List members = organizationService.getOrganizationMembers(id); return ResponseEntity.ok(ResultResponse.success(members)); } @PatchMapping("/{id}") - public ResponseEntity> updateOrganizationName(@PathVariable long id, + public ResponseEntity> updateOrganizationName( + @PathVariable long id, @RequestBody UpdateOrganizationRequest updateOrganizationRequest) { UpdateOrganizationResponse updateOrganizationResponse = organizationService.updateOrganizationName( id, updateOrganizationRequest); @@ -69,13 +72,14 @@ public ResponseEntity> updateOrganizationName(@PathVariable lo } @GetMapping("/{id}/rank") - public ResponseEntity> getRanking(@PathVariable long id) { + public ResponseEntity>> getRanking(@PathVariable long id) { List memberRankPoints = organizationService.getRanking(id); return ResponseEntity.ok(ResultResponse.success(memberRankPoints)); } @GetMapping("/{id}/summary") - public ResponseEntity> getSummary(@PathVariable long id) { + public ResponseEntity> getSummary( + @PathVariable long id) { OrganizationSummaryResponse summaryResponse = organizationService.getSummary(id); return ResponseEntity.ok(ResultResponse.success(summaryResponse)); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationControllerDocs.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationControllerDocs.java index a49b3f15..76595537 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationControllerDocs.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/controller/OrganizationControllerDocs.java @@ -16,6 +16,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -33,7 +34,7 @@ public interface OrganizationControllerDocs { content = @Content(schema = @Schema(implementation = Long.class))) }) @PostMapping - ResponseEntity> createOrganization( + ResponseEntity> createOrganization( @RequestBody OrganizationRequest organizationRequest ); @@ -44,7 +45,7 @@ ResponseEntity> createOrganization( content = @Content(schema = @Schema(implementation = OrganizationResponse.class))) }) @GetMapping - ResponseEntity> getOrganizations( + ResponseEntity>> getOrganizations( ); @Operation(summary = "학급 가입코드 생성", @@ -56,7 +57,7 @@ ResponseEntity> getOrganizations( @ApiResponse(responseCode = "404", description = "(message : \"멤버가 존재하지 않습니다.\")", content = @Content) }) @GetMapping("/{id}/code") - ResponseEntity> getOrganizationCode( + ResponseEntity> getOrganizationCode( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id @@ -81,7 +82,7 @@ ResponseEntity> getOrganizationCode( """, content = @Content) }) @PostMapping("/{id}/join") - ResponseEntity> joinOrganization( + ResponseEntity> joinOrganization( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @@ -96,7 +97,7 @@ ResponseEntity> joinOrganization( @ApiResponse(responseCode = "404", description = "(message : \"학급을 찾을 수 없습니다.\")", content = @Content) }) @GetMapping("/{id}/members") - ResponseEntity> getOrganizationMembers( + ResponseEntity>> getOrganizationMembers( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id @@ -110,7 +111,7 @@ ResponseEntity> getOrganizationMembers( @ApiResponse(responseCode = "404", description = "(message : \"멤버가 존재하지 않습니다.\")", content = @Content) }) @PatchMapping("/{id}") - ResponseEntity> updateOrganizationName( + ResponseEntity> updateOrganizationName( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id, @@ -124,7 +125,7 @@ ResponseEntity> updateOrganizationName( content = @Content(schema = @Schema(implementation = MemberRankPoint.class))) }) @GetMapping("/{id}/rank") - ResponseEntity> getRanking( + ResponseEntity>> getRanking( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id @@ -136,7 +137,7 @@ ResponseEntity> getRanking( content = @Content(schema = @Schema(implementation = OrganizationSummaryResponse.class))) }) @GetMapping("/{id}/summary") - ResponseEntity> getSummary( + ResponseEntity> getSummary( @PathVariable @Parameter(description = "학급 ID", required = true, in = ParameterIn.PATH) long id diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java index eddf7d2d..1a27bd83 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java @@ -142,8 +142,7 @@ public int tagGreeting(TagGreetingRequest tagGreetingRequest) { TagGreeting tagGreeting = TagGreeting.builder() .relationship(relationship).date(LocalDateTime.now()).build(); tagGreetingRepository.save(tagGreeting); - int tagGreetingCount = relationship.updateTagGreetingCount(); - return tagGreetingCount; + return relationship.updateTagGreetingCount(); } private List getFriendlyResponse(long organizationId, long memberId, diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/OrganizationServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/OrganizationServiceImpl.java index 429e8185..2d46d931 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/OrganizationServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/OrganizationServiceImpl.java @@ -26,6 +26,7 @@ import com.quiz.ourclass.global.util.ConstantUtil; import com.quiz.ourclass.global.util.RedisUtil; import com.quiz.ourclass.global.util.UserAccessUtil; +import java.security.SecureRandom; import java.time.Duration; import java.time.LocalDate; import java.util.List; @@ -48,6 +49,7 @@ public class OrganizationServiceImpl implements OrganizationService { private final MemberMapper memberMapper; private final RedisUtil redisUtil; private final UserAccessUtil accessUtil; + private final Random rand = new SecureRandom(); @Transactional @Override @@ -98,8 +100,7 @@ public InviteCodeDTO getOrganizationCode(long id) { String redisKey = ConstantUtil.REDIS_ORG_KEY + id; String code = redisUtil.valueGet(redisKey); if (code == null || code.isEmpty()) { - Random random = new Random(); - code = String.valueOf(random.nextInt(1000000)); + code = String.valueOf(rand.nextInt(1000000)); redisUtil.valueSet(redisKey, code, Duration.ofMinutes(ConstantUtil.REDIS_ORG_ALIVE_MINUTE)); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayController.java b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayController.java index 05c0d526..8b5e4dc3 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayController.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayController.java @@ -28,33 +28,35 @@ public class RelayController implements RelayControllerDocs { private final RelayService relayService; @PostMapping - public ResponseEntity> createRelay(@RequestBody RelayRequest relayRequest) { + public ResponseEntity> createRelay( + @RequestBody RelayRequest relayRequest) { long relayId = relayService.createRelay(relayRequest); return ResponseEntity.ok(ResultResponse.success(relayId)); } @GetMapping - public ResponseEntity> getRelays(RelaySliceRequest relaySliceRequest) { + public ResponseEntity> getRelays( + RelaySliceRequest relaySliceRequest) { RelaySliceResponse relays = relayService.getRelays(relaySliceRequest); return ResponseEntity.ok(ResultResponse.success(relays)); } @GetMapping("/{id}") - public ResponseEntity> getRelayDetail(@PathVariable long id) { + public ResponseEntity> getRelayDetail(@PathVariable long id) { RelayResponse relay = relayService.getRelayDetail(id); return ResponseEntity.ok(ResultResponse.success(relay)); } @GetMapping("/running") - public ResponseEntity> getRunningRelay( - @RequestParam(required = true) long organizationId) { + public ResponseEntity> getRunningRelay( + @RequestParam long organizationId) { RunningRelayResponse runningChallengeResponse = relayService.getRunningRelay( organizationId); return ResponseEntity.ok(ResultResponse.success(runningChallengeResponse)); } @PostMapping("/{id}/receive") - public ResponseEntity> receiveRelay(@PathVariable long id, + public ResponseEntity> receiveRelay(@PathVariable long id, @RequestBody ReceiveRelayRequest receiveRelayRequest) { ReceiveRelayResponse receiveRelayResponse = relayService.receiveRelay( id, receiveRelayRequest); @@ -62,13 +64,13 @@ public ResponseEntity> receiveRelay(@PathVariable long id, } @PostMapping("/{id}/send") - public ResponseEntity> sendRelay(@PathVariable long id) { + public ResponseEntity> sendRelay(@PathVariable long id) { SendRelayResponse sendRelayResponse = relayService.sendRelay(id); return ResponseEntity.ok(ResultResponse.success(sendRelayResponse)); } @GetMapping("/{id}/question") - public ResponseEntity> getRelayQuestion(@PathVariable long id) { + public ResponseEntity> getRelayQuestion(@PathVariable long id) { String question = relayService.getRelayQuestion(id); return ResponseEntity.ok(ResultResponse.success(question)); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayControllerDocs.java b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayControllerDocs.java index 246827c6..289784ec 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayControllerDocs.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/controller/RelayControllerDocs.java @@ -5,6 +5,7 @@ import com.quiz.ourclass.domain.relay.dto.request.RelaySliceRequest; import com.quiz.ourclass.domain.relay.dto.response.ReceiveRelayResponse; import com.quiz.ourclass.domain.relay.dto.response.RelayResponse; +import com.quiz.ourclass.domain.relay.dto.response.RelaySliceResponse; import com.quiz.ourclass.domain.relay.dto.response.RunningRelayResponse; import com.quiz.ourclass.domain.relay.dto.response.SendRelayResponse; import com.quiz.ourclass.global.dto.ResultResponse; @@ -38,7 +39,7 @@ public interface RelayControllerDocs { """, content = @Content) }) @PostMapping - ResponseEntity> createRelay( + ResponseEntity> createRelay( @RequestBody RelayRequest relayRequest ); @@ -50,7 +51,7 @@ ResponseEntity> createRelay( content = @Content(schema = @Schema(implementation = RelaySliceRequest.class))) }) @GetMapping - ResponseEntity> getRelays(RelaySliceRequest relaySliceRequest + ResponseEntity> getRelays(RelaySliceRequest relaySliceRequest ); @Operation(summary = "이어달리기 상세 조회", @@ -60,7 +61,7 @@ ResponseEntity> getRelays(RelaySliceRequest relaySliceRequest content = @Content(schema = @Schema(implementation = RelayResponse.class))) }) @GetMapping("/{id}") - ResponseEntity> getRelayDetail( + ResponseEntity> getRelayDetail( @PathVariable @Parameter(description = "이어달리기 id", required = true, in = ParameterIn.PATH) long id @@ -78,8 +79,8 @@ ResponseEntity> getRelayDetail( """, content = @Content) }) @GetMapping("/running") - ResponseEntity> getRunningRelay( - @RequestParam(required = true) + ResponseEntity> getRunningRelay( + @RequestParam @Parameter(description = "학급 id", required = true, in = ParameterIn.QUERY) long organizationId ); @@ -95,7 +96,7 @@ ResponseEntity> getRunningRelay( """, content = @Content) }) @PostMapping("/{id}/receive") - ResponseEntity> receiveRelay( + ResponseEntity> receiveRelay( @PathVariable @Parameter(description = "이어달리기 id", required = true, in = ParameterIn.PATH) long id, @@ -116,7 +117,7 @@ ResponseEntity> receiveRelay( """, content = @Content) }) @PostMapping("/{id}/send") - ResponseEntity> sendRelay( + ResponseEntity> sendRelay( @PathVariable @Parameter(description = "이어달리기 id", required = true, in = ParameterIn.PATH) long id @@ -135,7 +136,7 @@ ResponseEntity> sendRelay( """, content = @Content) }) @GetMapping("/{id}/question") - ResponseEntity> getRelayQuestion( + ResponseEntity> getRelayQuestion( @PathVariable long id ); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepository.java b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepository.java index 332fe481..cb816d09 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepository.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepository.java @@ -8,7 +8,7 @@ public interface RelayRepository extends JpaRepository, RelayRepositoryQuerydsl { - Boolean existsByOrganizationAndEndStatusIsFalse(Organization organization); + boolean existsByOrganizationAndEndStatusIsFalse(Organization organization); Optional findByOrganizationIdAndEndStatusIsFalse(long organizationId); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepositoryQuerydslImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepositoryQuerydslImpl.java index aba485bf..cc487ae3 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepositoryQuerydslImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/repository/RelayRepositoryQuerydslImpl.java @@ -46,7 +46,7 @@ public RelaySliceResponse getRelays(RelaySliceRequest request) { .join(relay.relayRunners, relayMember) .where(relayCondition) .offset(pageable.getOffset()) - .limit(pageable.getPageSize() + 1) + .limit(pageable.getPageSize() + 1L) .orderBy(relay.id.desc()) .fetch(); diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/service/RelayServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/service/RelayServiceImpl.java index a2f83d3e..e59a7992 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/relay/service/RelayServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/relay/service/RelayServiceImpl.java @@ -24,8 +24,10 @@ import com.quiz.ourclass.global.util.FcmUtil; import com.quiz.ourclass.global.util.UserAccessUtil; import com.quiz.ourclass.global.util.scheduler.SchedulingService; +import java.security.SecureRandom; import java.time.LocalDateTime; import java.util.List; +import java.util.Random; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; @@ -44,6 +46,7 @@ public class RelayServiceImpl implements RelayService { private final UserAccessUtil accessUtil; private final SchedulingService schedulingService; private final FcmUtil fcmUtil; + private final Random random = new SecureRandom(); @Transactional @@ -54,7 +57,7 @@ public long createRelay(RelayRequest relayRequest) { Organization organization = organizationRepository.findById(relayRequest.organizationId()) .orElseThrow(() -> new GlobalException(ErrorCode.ORGANIZATION_NOT_FOUND)); int randomCount = organization.getMemberCount() / 2; - int totalCount = (int) (Math.random() * (randomCount + 1) + randomCount); + int totalCount = random.nextInt() * (randomCount + 1) + randomCount; if (relayRepository.existsByOrganizationAndEndStatusIsFalse(organization)) { throw new GlobalException(ErrorCode.EXIST_PROGRESS_RELAY); } @@ -208,7 +211,7 @@ protected void relayClosing(RelayMember relayMember) { @EventListener(ApplicationReadyEvent.class) @Transactional - protected void relayClosingReload() { + public void relayClosingReload() { List relays = relayRepository.findAllByEndStatusIsFalse(); relays.forEach(relay -> { RelayMember lastRunner = relay.getLastRunner(); diff --git a/backEnd/src/main/java/com/quiz/ourclass/global/util/ConstantUtil.java b/backEnd/src/main/java/com/quiz/ourclass/global/util/ConstantUtil.java index 87f4a5a1..3403d53d 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/global/util/ConstantUtil.java +++ b/backEnd/src/main/java/com/quiz/ourclass/global/util/ConstantUtil.java @@ -18,6 +18,9 @@ public abstract class ConstantUtil { public static final String RANKING = "ranking"; public static final String QUIZ_ANSWER = "answer"; public static final String AUTHORIZATION = "Authorization"; + public static final String REDIS_GROUP_KEY = "CHALLENGE_LEADER:"; + public static final Long DEFAULT_TIMEOUT = 60L * 1000 * 20; + public static final Long REDIRECT_TIME = 5L * 1000; // 인스턴스화 방지 private ConstantUtil() {