Skip to content

Commit

Permalink
Merge pull request #725 from peer-42seoul/724-hotfix-dnd-sub-module-h…
Browse files Browse the repository at this point in the history
…otfix

724 hotfix dnd sub module hotfix
  • Loading branch information
Paul2021-R authored Jan 29, 2024
2 parents 5d6cdef + 9088da0 commit 162bb2a
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 36 deletions.
9 changes: 9 additions & 0 deletions src/main/java/peer/backend/config/RedisRepositoryConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,13 @@ public RedisTemplate<Long, String> privateInformationApiInitRedis() {
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}

// @Bean("redisTemplateForTeamIds")
// public RedisTemplate<Long, Object> teamUserListRedis() {
// RedisTemplate<Long, Object> redisTemplate = new RedisTemplate<>();
// redisTemplate.setConnectionFactory(redisConnectionFactory());
// redisTemplate.setKeySerializer(new GenericToStringSerializer<>(Long.class));
// redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
// return redisTemplate;
// }
}
52 changes: 32 additions & 20 deletions src/main/java/peer/backend/controller/dnd/DnDSubController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,11 +30,11 @@ public class DnDSubController {

@PostMapping("calendar/team-list")
@ApiOperation(value = "", notes = "달력을 위한 팀 멤버 리스트를 제공합니다. 임시용")
public ResponseEntity<Object> getTeamMemberList(Authentication auth, @RequestBody long teamId) {
Team target = this.dnDSubService.getTeamByTeamId(teamId);
public ResponseEntity<Object> 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)
Expand All @@ -45,7 +47,7 @@ public ResponseEntity<Object> 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) {
Expand All @@ -57,14 +59,21 @@ public ResponseEntity<Object> getTeamMemberList(Authentication auth, @RequestBod
@PostMapping("calendar/set-alarm")
@ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 설정합니다.")
public ResponseEntity<Object> 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<TeamMember> 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);
Expand All @@ -84,13 +93,15 @@ public ResponseEntity<Object> setAlarmEvent(Authentication auth, @RequestBody Ca
@DeleteMapping("calendar/delete-alarm")
@ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 삭제합니다.")
public ResponseEntity<Object> 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);
Expand All @@ -110,13 +121,14 @@ public ResponseEntity<Object> deleteAlarmEvent(Authentication auth, @RequestBody
@ApiOperation(value = "", notes = "알람으로 기록된 이벤트를 갱신합니다.")
public ResponseEntity<Object> 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);
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/peer/backend/dto/dndSub/TeamIdentifierDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package peer.backend.dto.dndSub;

import lombok.Getter;

@Getter
public class TeamIdentifierDTO {
private Long teamId;
}
48 changes: 32 additions & 16 deletions src/main/java/peer/backend/service/dnd/DnDSubService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -18,7 +18,6 @@
import peer.backend.repository.user.UserRepository;

import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;

@Service
@RequiredArgsConstructor
Expand All @@ -30,16 +29,31 @@ public class DnDSubService {

private Long eventCnt = 0L;

private RedisTemplate<String, Object> redisTemplate;
private final RedisTemplate<String, List<TeamMember>> redisTemplate;

private final HashSet<CalendarEventDTO> tempMemeoryEventList;
private final HashSet<CalendarEventDTO> tempMemoryEventList;

public void saveTeamDataInRedis(String key, String identifier, Object value) {
public void saveTeamDataInRedis(String key, String identifier, Team target) {
List<TeamMember> 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<TeamMember> target) {
String newKey = key + "-" + identifier;
redisTemplate.opsForValue().set(newKey, value);
redisTemplate.opsForValue().set(newKey, target);
}

public Object getTeamDataInRedis(String key, String identifier) {
public List<TeamMember> getTeamDataInRedis(String key, String identifier) {
return redisTemplate.opsForValue().get(key + "-" + identifier);
}

Expand All @@ -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() {
Expand Down Expand Up @@ -100,34 +116,34 @@ 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);

if (filtered == null)
throw new NoSuchElementException("이벤트가 존재하지 않습니다.");

this.tempMemeoryEventList.remove(filtered);
this.tempMemoryEventList.remove(filtered);
return;
}

public List<CalendarEventDTO> getAllEvents() {
return new ArrayList<>(this.tempMemeoryEventList);
return new ArrayList<>(this.tempMemoryEventList);
}
}

0 comments on commit 162bb2a

Please sign in to comment.