Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor : 접속한 멤버 정보 BE -> FE 리턴 값 수정 #70

Merged
merged 6 commits into from
Jan 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -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<Member, Long> {
@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<TripMemberInfoMsg> 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<TripMemberInfoMsg> findTripMemberInfoByMemberId(@Param("memberId") Long memberId);
List<TripMemberInfo> 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<TripMemberInfo> findTripMemberInfoByMemberId(@Param("memberId") Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ public record TripUpdateMsg(
String endDate,
Long numberOfPeople,
String tripName,
String area,
String subarea,
Long budget
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ public record TripInfoMsg(
Long numberOfPeople,
String tripName,
TripStatus tripStatus,
String area,
String subarea,
Long budget
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.tenten.tentenstomp.domain.trip.dto.response;

public record TripMemberInfo(
Long memberId,
String name,
String thumbnailUrl
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
public record TripMemberInfoMsg(
Long memberId,
String name,
String thumbnailUrl
String thumbnailUrl,
Boolean connected
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

public record TripMemberMsg(
Long tripId,
List<TripMemberInfoMsg> connectedMembers,
List<TripMemberInfoMsg> tripMembers,
Long numberOfPeople
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();

Expand All @@ -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() {
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String, HashMap<Long, TripMemberInfoMsg>> tripConnectedMemberMap);
TripMemberMsg getTripMemberMsg(Long tripId, Map<String, HashSet<Long>> tripConnectedMemberMap);

TripBudgetMsg getTripBudgetMsg(Trip trip);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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<String, HashMap<Long, TripMemberInfoMsg>> tripConnectedMemberMap) {
public TripMemberMsg getTripMemberMsg(Long tripId, Map<String, HashSet<Long>> tripConnectedMemberMap) {
Object cached = redisCache.get(MEMBER, Long.toString(tripId));
if (cached != null) {
return objectMapper.convertValue(cached, TripMemberMsg.class);
}
HashMap<Long, TripMemberInfoMsg> connectedMemberMap = tripConnectedMemberMap.getOrDefault(Long.toString(tripId), new HashMap<>());
HashSet<Long> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,46 +41,55 @@ public class TripService {
private final KafkaProducer kafkaProducer;
private final PathComponent pathComponent;
private final MessageProxyRepository messageProxyRepository;
private final Map<String, HashMap<Long, TripMemberInfoMsg>> tripConnectedMemberMap = new HashMap<>();
private final Map<String, HashSet<Long>> tripConnectedMemberMap = new HashMap<>();

@Transactional
public void connectMember(String tripId, MemberConnectMsg memberConnectMsg) {
HashMap<Long, TripMemberInfoMsg> connectedMemberMap = tripConnectedMemberMap.getOrDefault(tripId, new HashMap<>());
HashSet<Long> connectedMember = tripConnectedMemberMap.getOrDefault(tripId, new HashSet<>());
Trip trip = tripRepository.getReferenceById(Long.parseLong(tripId));
Optional<TripMemberInfoMsg> tripMemberInfoByMemberId = memberRepository.findTripMemberInfoByMemberId(memberConnectMsg.memberId());
tripMemberInfoByMemberId.ifPresent(tripMemberInfoMsg -> connectedMemberMap.put(memberConnectMsg.memberId(), tripMemberInfoMsg));
Optional<TripMemberInfo> 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<Long, TripMemberInfoMsg> connectedMemberMap = tripConnectedMemberMap.get(tripId);
HashSet<Long> 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);
}

@Transactional
public void disconnectMember(String tripId, MemberDisconnectMsg memberDisconnectMsg) {
HashMap<Long, TripMemberInfoMsg> connectedMemberMap = tripConnectedMemberMap.getOrDefault(tripId, new HashMap<>());
HashSet<Long> 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);

}
Expand Down Expand Up @@ -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);
}
Expand Down