diff --git a/src/main/java/org/tenten/tentenstomp/domain/member/repository/MemberRepository.java b/src/main/java/org/tenten/tentenstomp/domain/member/repository/MemberRepository.java index 3d6e8bf..768c980 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/member/repository/MemberRepository.java +++ b/src/main/java/org/tenten/tentenstomp/domain/member/repository/MemberRepository.java @@ -4,15 +4,15 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.tenten.tentenstomp.domain.member.entity.Member; -import org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfoMsg; +import org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfo; import java.util.List; import java.util.Optional; public interface MemberRepository extends JpaRepository { - @Query("SELECT NEW org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfoMsg(m.id, m.nickname, m.profileImageUrl) " + + @Query("SELECT NEW org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfo(m.id, m.nickname, m.profileImageUrl) " + "FROM TripMember tm LEFT OUTER JOIN Member m ON tm.member.id = m.id WHERE tm.trip.id = :tripId") - List findTripMemberInfoByTripId(@Param("tripId") Long tripId); - @Query("SELECT NEW org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfoMsg(m.id, m.nickname, m.profileImageUrl) FROM Member m WHERE m.id = :memberId") - Optional findTripMemberInfoByMemberId(@Param("memberId") Long memberId); + List findTripMemberInfoByTripId(@Param("tripId") Long tripId); + @Query("SELECT NEW org.tenten.tentenstomp.domain.trip.dto.response.TripMemberInfo(m.id, m.nickname, m.profileImageUrl) FROM Member m WHERE m.id = :memberId") + Optional findTripMemberInfoByMemberId(@Param("memberId") Long memberId); } diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/request/TripUpdateMsg.java b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/request/TripUpdateMsg.java index 7432110..db575e9 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/request/TripUpdateMsg.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/request/TripUpdateMsg.java @@ -5,8 +5,6 @@ public record TripUpdateMsg( String endDate, Long numberOfPeople, String tripName, - String area, - String subarea, Long budget ) { } diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripInfoMsg.java b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripInfoMsg.java index 95cb2bc..1b24273 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripInfoMsg.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripInfoMsg.java @@ -9,8 +9,6 @@ public record TripInfoMsg( Long numberOfPeople, String tripName, TripStatus tripStatus, - String area, - String subarea, Long budget ) { } diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfo.java b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfo.java new file mode 100644 index 0000000..26cc994 --- /dev/null +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfo.java @@ -0,0 +1,9 @@ +package org.tenten.tentenstomp.domain.trip.dto.response; + +public record TripMemberInfo( + Long memberId, + String name, + String thumbnailUrl +) { + +} \ No newline at end of file diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfoMsg.java b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfoMsg.java index fb7c0e8..5ad957f 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfoMsg.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberInfoMsg.java @@ -3,6 +3,8 @@ public record TripMemberInfoMsg( Long memberId, String name, - String thumbnailUrl + String thumbnailUrl, + Boolean connected ) { + } diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberMsg.java b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberMsg.java index 2100fd2..1518ac5 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberMsg.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/dto/response/TripMemberMsg.java @@ -4,7 +4,6 @@ public record TripMemberMsg( Long tripId, - List connectedMembers, List tripMembers, Long numberOfPeople ) { diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/entity/Trip.java b/src/main/java/org/tenten/tentenstomp/domain/trip/entity/Trip.java index eb7a0fa..5e03804 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/entity/Trip.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/entity/Trip.java @@ -38,8 +38,6 @@ public class Trip extends BaseTimeEntity { private Long numberOfPeople; // μΈμ›μˆ˜ private LocalDate startDate; private LocalDate endDate; - private String area; - private String subarea; private Boolean isDeleted; private String tripName; private Long budget; @@ -69,8 +67,6 @@ public TripInfoMsg changeTripInfo(TripUpdateMsg request) { this.endDate = LocalDate.parse(request.endDate()); this.numberOfPeople = request.numberOfPeople(); this.tripName = request.tripName(); - this.area = request.area(); - this.subarea = request.subarea(); this.budget = request.budget(); LocalDate currentDate = LocalDate.now(); @@ -83,8 +79,7 @@ public TripInfoMsg changeTripInfo(TripUpdateMsg request) { tripStatus = ING; } - return new TripInfoMsg(this.getId(), request.startDate(), request.endDate(), this.getNumberOfPeople(), this.getTripName(), tripStatus, - this.getArea(), this.getSubarea(), this.getBudget()); + return new TripInfoMsg(this.getId(), request.startDate(), request.endDate(), this.getNumberOfPeople(), this.getTripName(), tripStatus, this.getBudget()); } public TripInfoMsg toTripInfo() { @@ -97,8 +92,7 @@ public TripInfoMsg toTripInfo() { } else { tripStatus = ING; } - return new TripInfoMsg(this.getId(), this.startDate.toString(), this.endDate.toString(), this.getNumberOfPeople(), this.getTripName(), tripStatus, - this.getArea(), this.getSubarea(), this.getBudget()); + return new TripInfoMsg(this.getId(), this.startDate.toString(), this.endDate.toString(), this.getNumberOfPeople(), this.getTripName(), tripStatus, this.getBudget()); } public void updateTransportationPriceSum(Integer oldVisitDateTransportationPriceSum, Integer newVisitDateTransportationPriceSum) { diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepository.java b/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepository.java index d61606a..bbbafd3 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepository.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepository.java @@ -1,15 +1,18 @@ package org.tenten.tentenstomp.domain.trip.repository; -import org.tenten.tentenstomp.domain.trip.dto.response.*; +import org.tenten.tentenstomp.domain.trip.dto.response.TripBudgetMsg; +import org.tenten.tentenstomp.domain.trip.dto.response.TripItemMsg; +import org.tenten.tentenstomp.domain.trip.dto.response.TripMemberMsg; +import org.tenten.tentenstomp.domain.trip.dto.response.TripPathMsg; import org.tenten.tentenstomp.domain.trip.entity.Trip; -import java.util.HashMap; +import java.util.HashSet; import java.util.Map; public interface MessageProxyRepository { - TripMemberMsg getTripMemberMsg(Long tripId, Map> tripConnectedMemberMap); + TripMemberMsg getTripMemberMsg(Long tripId, Map> tripConnectedMemberMap); TripBudgetMsg getTripBudgetMsg(Trip trip); diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepositoryImpl.java b/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepositoryImpl.java index 53d97cf..b683f93 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepositoryImpl.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/repository/MessageProxyRepositoryImpl.java @@ -14,7 +14,7 @@ import org.tenten.tentenstomp.global.component.dto.response.TripPathCalculationResult; import java.time.LocalDate; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -31,15 +31,19 @@ public class MessageProxyRepositoryImpl implements MessageProxyRepository{ private final TripItemRepository tripItemRepository; private final PathComponent pathComponent; @Transactional(readOnly = true) - public TripMemberMsg getTripMemberMsg(Long tripId, Map> tripConnectedMemberMap) { + public TripMemberMsg getTripMemberMsg(Long tripId, Map> tripConnectedMemberMap) { Object cached = redisCache.get(MEMBER, Long.toString(tripId)); if (cached != null) { return objectMapper.convertValue(cached, TripMemberMsg.class); } - HashMap connectedMemberMap = tripConnectedMemberMap.getOrDefault(Long.toString(tripId), new HashMap<>()); + HashSet connectedMember = tripConnectedMemberMap.getOrDefault(Long.toString(tripId), new HashSet<>()); Trip trip = tripRepository.getReferenceById(tripId); TripMemberMsg tripMemberMsg = new TripMemberMsg( - tripId, connectedMemberMap.values().stream().toList(), memberRepository.findTripMemberInfoByTripId(tripId), trip.getNumberOfPeople() + tripId, + memberRepository.findTripMemberInfoByTripId(tripId).stream().map( + tm -> new TripMemberInfoMsg(tm.memberId(), tm.name(), tm.thumbnailUrl(), connectedMember.contains(tm.memberId())) + ).toList(), + trip.getNumberOfPeople() ); redisCache.save(MEMBER, Long.toString(tripId), tripMemberMsg); return tripMemberMsg; diff --git a/src/main/java/org/tenten/tentenstomp/domain/trip/service/TripService.java b/src/main/java/org/tenten/tentenstomp/domain/trip/service/TripService.java index 09b8a54..3275de3 100644 --- a/src/main/java/org/tenten/tentenstomp/domain/trip/service/TripService.java +++ b/src/main/java/org/tenten/tentenstomp/domain/trip/service/TripService.java @@ -41,31 +41,36 @@ public class TripService { private final KafkaProducer kafkaProducer; private final PathComponent pathComponent; private final MessageProxyRepository messageProxyRepository; - private final Map> tripConnectedMemberMap = new HashMap<>(); + private final Map> tripConnectedMemberMap = new HashMap<>(); @Transactional public void connectMember(String tripId, MemberConnectMsg memberConnectMsg) { - HashMap connectedMemberMap = tripConnectedMemberMap.getOrDefault(tripId, new HashMap<>()); + HashSet connectedMember = tripConnectedMemberMap.getOrDefault(tripId, new HashSet<>()); Trip trip = tripRepository.getReferenceById(Long.parseLong(tripId)); - Optional tripMemberInfoByMemberId = memberRepository.findTripMemberInfoByMemberId(memberConnectMsg.memberId()); - tripMemberInfoByMemberId.ifPresent(tripMemberInfoMsg -> connectedMemberMap.put(memberConnectMsg.memberId(), tripMemberInfoMsg)); + Optional tripMemberInfoByMemberId = memberRepository.findTripMemberInfoByMemberId(memberConnectMsg.memberId()); + tripMemberInfoByMemberId.ifPresent(tripMemberInfoMsg -> connectedMember.add(tripMemberInfoByMemberId.get().memberId())); TripMemberMsg tripMemberMsg = new TripMemberMsg( - Long.parseLong(tripId), connectedMemberMap.values().stream().toList(), memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)), trip.getNumberOfPeople() + Long.parseLong(tripId), + memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)).stream().map( + tm -> new TripMemberInfoMsg(tm.memberId(), tm.name(), tm.thumbnailUrl(), connectedMember.contains(tm.memberId())) + ).toList(), + trip.getNumberOfPeople() ); - tripConnectedMemberMap.put(tripId, connectedMemberMap); + tripConnectedMemberMap.put(tripId, connectedMember); kafkaProducer.sendAndSaveToRedis(tripMemberMsg); } @Transactional public void getConnectedMember(String tripId) { - HashMap connectedMemberMap = tripConnectedMemberMap.get(tripId); + HashSet connectedMember = tripConnectedMemberMap.getOrDefault(tripId, new HashSet<>()); Trip trip = tripRepository.getReferenceById(Long.parseLong(tripId)); TripMemberMsg tripMemberMsg = new TripMemberMsg( Long.parseLong(tripId), - connectedMemberMap.values().stream().toList(), - memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)), + memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)).stream().map( + tm -> new TripMemberInfoMsg(tm.memberId(), tm.name(), tm.thumbnailUrl(), connectedMember.contains(tm.memberId())) + ).toList(), trip.getNumberOfPeople() ); kafkaProducer.sendAndSaveToRedis(tripMemberMsg); @@ -73,14 +78,18 @@ public void getConnectedMember(String tripId) { @Transactional public void disconnectMember(String tripId, MemberDisconnectMsg memberDisconnectMsg) { - HashMap connectedMemberMap = tripConnectedMemberMap.getOrDefault(tripId, new HashMap<>()); + HashSet connectedMember = tripConnectedMemberMap.getOrDefault(tripId, new HashSet<>()); Trip trip = tripRepository.getReferenceById(Long.parseLong(tripId)); - connectedMemberMap.remove(memberDisconnectMsg.memberId()); + connectedMember.remove(memberDisconnectMsg.memberId()); TripMemberMsg tripMemberMsg = new TripMemberMsg( - Long.parseLong(tripId), connectedMemberMap.values().stream().toList(), memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)), trip.getNumberOfPeople() + Long.parseLong(tripId), + memberRepository.findTripMemberInfoByTripId(Long.parseLong(tripId)).stream().map( + tm -> new TripMemberInfoMsg(tm.memberId(), tm.name(), tm.thumbnailUrl(), connectedMember.contains(tm.memberId())) + ).toList(), + trip.getNumberOfPeople() ); - tripConnectedMemberMap.put(tripId, connectedMemberMap); + tripConnectedMemberMap.put(tripId, connectedMember); kafkaProducer.sendAndSaveToRedis(tripMemberMsg); } @@ -181,7 +190,7 @@ public void updateTripBudget(String tripId, TripBudgetUpdateMsg tripBudgetUpdate } else { tripStatus = ING; } - TripInfoMsg tripInfoMsg = new TripInfoMsg(trip.getId(), trip.getStartDate().toString(), trip.getEndDate().toString(), trip.getNumberOfPeople(), trip.getTripName(), tripStatus, trip.getArea(), trip.getSubarea(), trip.getBudget()); + TripInfoMsg tripInfoMsg = new TripInfoMsg(trip.getId(), trip.getStartDate().toString(), trip.getEndDate().toString(), trip.getNumberOfPeople(), trip.getTripName(), tripStatus, trip.getBudget()); TripBudgetMsg tripBudgetMsg = new TripBudgetMsg(trip.getId(), trip.getBudget(), trip.getTripItemPriceSum() + trip.getTransportationPriceSum()); kafkaProducer.sendAndSaveToRedis(tripBudgetMsg, tripInfoMsg); }