diff --git a/src/main/java/peer/backend/config/RedisRepositoryConfig.java b/src/main/java/peer/backend/config/RedisRepositoryConfig.java index 3eee7fd08..0db2388c5 100644 --- a/src/main/java/peer/backend/config/RedisRepositoryConfig.java +++ b/src/main/java/peer/backend/config/RedisRepositoryConfig.java @@ -72,4 +72,13 @@ public RedisTemplate privateInformationApiInitRedis() { redisTemplate.setValueSerializer(new StringRedisSerializer()); return redisTemplate; } + +// @Bean("redisTemplateForTeamIds") +// public RedisTemplate teamUserListRedis() { +// RedisTemplate redisTemplate = new RedisTemplate<>(); +// redisTemplate.setConnectionFactory(redisConnectionFactory()); +// redisTemplate.setKeySerializer(new GenericToStringSerializer<>(Long.class)); +// redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); +// return redisTemplate; +// } } diff --git a/src/main/java/peer/backend/controller/dnd/DnDSubController.java b/src/main/java/peer/backend/controller/dnd/DnDSubController.java index 253950ff2..30d0fad40 100644 --- a/src/main/java/peer/backend/controller/dnd/DnDSubController.java +++ b/src/main/java/peer/backend/controller/dnd/DnDSubController.java @@ -6,9 +6,11 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; +import peer.backend.dto.dnd.TeamMember; import peer.backend.dto.dndSub.CalendarEventDTO; import peer.backend.dto.dndSub.DeleteTargetDTO; import peer.backend.dto.dndSub.MemberDTO; +import peer.backend.dto.dndSub.TeamIdentifierDTO; import peer.backend.entity.team.Team; import peer.backend.entity.user.User; import peer.backend.exception.BadRequestException; @@ -28,11 +30,11 @@ public class DnDSubController { @PostMapping("calendar/team-list") @ApiOperation(value = "", notes = "달력을 위한 팀 멤버 리스트를 제공합니다. 임시용") - public ResponseEntity getTeamMemberList(Authentication auth, @RequestBody long teamId) { - Team target = this.dnDSubService.getTeamByTeamId(teamId); + public ResponseEntity getTeamMemberList(Authentication auth, @RequestBody TeamIdentifierDTO data) { + Team target = this.dnDSubService.getTeamByTeamId(data.getTeamId()); // redis 에 자주 쓸 가능성이 있는 team 정보 저장 - this.dnDSubService.saveTeamDataInRedis(Long.toString(teamId), CALENDAR_IDENTIFIER, target); +// this.dnDSubService.saveTeamDataInRedis(Long.toString(data.getTeamId()), CALENDAR_IDENTIFIER, target); // 유효성 검사 if (this.dnDSubService.validCheckForTeam(target) @@ -45,7 +47,7 @@ public ResponseEntity getTeamMemberList(Authentication auth, @RequestBod try { ret = this.dnDSubService.getMemberList(User.authenticationToUser(auth), target); } - catch (NoSuchElementException | BadRequestException e) { + catch (Exception e) { return new ResponseEntity<>(e, HttpStatus.BAD_REQUEST); } if(ret == null) { @@ -57,14 +59,21 @@ public ResponseEntity getTeamMemberList(Authentication auth, @RequestBod @PostMapping("calendar/set-alarm") @ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 설정합니다.") public ResponseEntity setAlarmEvent(Authentication auth, @RequestBody CalendarEventDTO event) { - // redis 에서 team 정보 찾기 - Team target = (Team)this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); - if(target == null) { - target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); - this.dnDSubService.saveTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); - } +// // redis 에서 team 정보 찾기 +// List target = this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); +// if(target == null) { +// this.dnDSubService.getTeamByTeamId(event.getTeamId()).getTeamUsers().forEach(m -> { +// TeamMember member = TeamMember.builder() +// .teamId(m.getTeamId()) +// .userId(m.getUserId()) +// .build(); +// target.add(member); +// }); +// this.dnDSubService.saveTeamMemberInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); +// } // 유효성 검사 + Team target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); if (this.dnDSubService.validCheckForTeam(target) || this.dnDSubService.validCheckUserWithTeam(target, User.authenticationToUser(auth))) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); @@ -84,13 +93,15 @@ public ResponseEntity setAlarmEvent(Authentication auth, @RequestBody Ca @DeleteMapping("calendar/delete-alarm") @ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 삭제합니다.") public ResponseEntity deleteAlarmEvent(Authentication auth, @RequestBody DeleteTargetDTO event) { - Team target = (Team)this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); - if(target == null) { - target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); - this.dnDSubService.saveTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); - } +// Team target = (Team)this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); +// if(target == null) { +// target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); +// this.dnDSubService.saveTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); +// } + // 유효성 검사 + Team target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); if (this.dnDSubService.validCheckForTeam(target) || this.dnDSubService.validCheckUserWithTeam(target, User.authenticationToUser(auth))) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); @@ -110,13 +121,14 @@ public ResponseEntity deleteAlarmEvent(Authentication auth, @RequestBody @ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 갱신합니다.") public ResponseEntity updateAlarmEvent(Authentication auth, @RequestBody CalendarEventDTO event) { // redis 에서 team 정보 찾기 - Team target = (Team)this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); - if(target == null) { - target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); - this.dnDSubService.saveTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); - } +// Team target = (Team)this.dnDSubService.getTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER); +// if(target == null) { +// target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); +// this.dnDSubService.saveTeamDataInRedis(Long.toString(event.getTeamId()), CALENDAR_IDENTIFIER, target); +// } // 유효성 검사 + Team target = this.dnDSubService.getTeamByTeamId(event.getTeamId()); if (this.dnDSubService.validCheckForTeam(target) || this.dnDSubService.validCheckUserWithTeam(target, User.authenticationToUser(auth))) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); diff --git a/src/main/java/peer/backend/dto/dndSub/TeamIdentifierDTO.java b/src/main/java/peer/backend/dto/dndSub/TeamIdentifierDTO.java new file mode 100644 index 000000000..409bbee75 --- /dev/null +++ b/src/main/java/peer/backend/dto/dndSub/TeamIdentifierDTO.java @@ -0,0 +1,8 @@ +package peer.backend.dto.dndSub; + +import lombok.Getter; + +@Getter +public class TeamIdentifierDTO { + private Long teamId; +} diff --git a/src/main/java/peer/backend/service/dnd/DnDSubService.java b/src/main/java/peer/backend/service/dnd/DnDSubService.java index d3fc2cda2..d9e39a113 100644 --- a/src/main/java/peer/backend/service/dnd/DnDSubService.java +++ b/src/main/java/peer/backend/service/dnd/DnDSubService.java @@ -2,10 +2,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import peer.backend.dto.dnd.TeamMember; import peer.backend.dto.dndSub.CalendarEventDTO; import peer.backend.dto.dndSub.DeleteTargetDTO; import peer.backend.dto.dndSub.MemberDTO; @@ -18,7 +18,6 @@ import peer.backend.repository.user.UserRepository; import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; @Service @RequiredArgsConstructor @@ -30,16 +29,31 @@ public class DnDSubService { private Long eventCnt = 0L; - private RedisTemplate redisTemplate; + private final RedisTemplate> redisTemplate; - private final HashSet tempMemeoryEventList; + private final HashSet tempMemoryEventList; - public void saveTeamDataInRedis(String key, String identifier, Object value) { + public void saveTeamDataInRedis(String key, String identifier, Team target) { + List members = new ArrayList<>(); + for (TeamUser teamUser : target.getTeamUsers()) { + TeamMember member = TeamMember.builder() + .teamId(teamUser.getTeamId()) + .userId(teamUser.getUserId()) + .build(); + members.add(member); + } + if (members.isEmpty()) + return ; + String newKey = key + "-" + identifier; + redisTemplate.opsForValue().set(newKey, members); + } + + public void saveTeamMemberInRedis(String key, String identifier, List target) { String newKey = key + "-" + identifier; - redisTemplate.opsForValue().set(newKey, value); + redisTemplate.opsForValue().set(newKey, target); } - public Object getTeamDataInRedis(String key, String identifier) { + public List getTeamDataInRedis(String key, String identifier) { return redisTemplate.opsForValue().get(key + "-" + identifier); } @@ -48,13 +62,15 @@ public Team getTeamByTeamId(Long teamId){ } public boolean validCheckForTeam(Team target) { - return !target.getStatus().equals(TeamStatus.COMPLETE); + System.out.println("error 1"); + return target.getStatus().equals(TeamStatus.COMPLETE) || target.getStatus().equals(TeamStatus.DISPERSE); } public boolean validCheckUserWithTeam(Team target, User requester) { + System.out.println("error 2"); return target.getTeamUsers() .stream() - .anyMatch(member -> member.getUserId().equals(requester.getId())); + .noneMatch(member -> member.getUserId().equals(requester.getId())); } public Long makeTemporaryEventId() { @@ -100,22 +116,22 @@ public Long setEventToAlarm(CalendarEventDTO data) { .title(data.getTitle()) .build(); - this.tempMemeoryEventList.add(saveEvent); + this.tempMemoryEventList.add(saveEvent); return id; } public Long updateEventToAlarm(CalendarEventDTO data){ - if (this.tempMemeoryEventList.stream().noneMatch(event -> event.getEventId().equals(data.getEventId()))) { + if (this.tempMemoryEventList.stream().noneMatch(event -> event.getEventId().equals(data.getEventId()))) { return -1L; } - this.tempMemeoryEventList.remove(data); - this.tempMemeoryEventList.add(data); + this.tempMemoryEventList.remove(data); + this.tempMemoryEventList.add(data); return data.getEventId(); } public void deleteEventFromAlarm(DeleteTargetDTO target) { - CalendarEventDTO filtered = this.tempMemeoryEventList.stream() + CalendarEventDTO filtered = this.tempMemoryEventList.stream() .filter(event -> event.getEventId().equals(target.getEventId())) .findFirst() .orElse(null); @@ -123,11 +139,11 @@ public void deleteEventFromAlarm(DeleteTargetDTO target) { if (filtered == null) throw new NoSuchElementException("이벤트가 존재하지 않습니다."); - this.tempMemeoryEventList.remove(filtered); + this.tempMemoryEventList.remove(filtered); return; } public List getAllEvents() { - return new ArrayList<>(this.tempMemeoryEventList); + return new ArrayList<>(this.tempMemoryEventList); } }