Skip to content

Commit

Permalink
Merge pull request #65 from FinalDoubleTen/BE-66-Refactor-STOMP
Browse files Browse the repository at this point in the history
Be 66 refactor stomp
  • Loading branch information
kdjun99 authored Jan 16, 2024
2 parents e77cc97 + e666814 commit 7d235b1
Show file tree
Hide file tree
Showing 17 changed files with 100 additions and 95 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,9 @@ public void getPathAndItems(@DestinationVariable String tripId, @Payload PathAnd
public void updateTripBudget(@DestinationVariable String tripId, @Payload TripBudgetUpdateMsg tripBudgetUpdateMsg) {
tripService.updateTripBudget(tripId, tripBudgetUpdateMsg);
}

@MessageMapping("/trips/{tripId}/updateTransportation")
public void updateTransportation(@DestinationVariable String tripId, @Payload TripTransportationUpdateMsg tripTransportationUpdateMsg) {
tripService.updateTripTransportation(tripId, tripTransportationUpdateMsg);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.springframework.web.bind.annotation.RestController;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemDeleteMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemPriceUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemTransportationUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemVisitDateUpdateMsg;
import org.tenten.tentenstomp.domain.trip.service.TripItemService;

Expand All @@ -28,11 +27,6 @@ public void updateTripItemVisitDate(@DestinationVariable String tripItemId, @Pay
tripItemService.updateTripItemVisitDate(tripItemId, visitDateUpdateMsg);
}

@MessageMapping("/tripItems/{tripItemId}/updateTransportation")
public void updateTripItemTransportation(@DestinationVariable String tripItemId, @Payload TripItemTransportationUpdateMsg tripItemTransportationUpdateMsg) {
tripItemService.updateTripItemTransportation(tripItemId, tripItemTransportationUpdateMsg);
}

@MessageMapping("/tripItems/{tripItemId}/deleteItem")
public void deleteTripItem(@DestinationVariable String tripItemId, @Payload TripItemDeleteMsg tripItemDeleteMsg) {
tripItemService.deleteTripItem(tripItemId, tripItemDeleteMsg);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.tenten.tentenstomp.domain.trip.dto.request;

import org.tenten.tentenstomp.global.common.enums.Transportation;

public record TripTransportationUpdateMsg(
String visitDate,
Transportation transportation
) {
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.tenten.tentenstomp.domain.trip.dto.response;

import org.tenten.tentenstomp.global.common.enums.Transportation;

import java.time.LocalDate;

public record TripItemInfo(
Expand All @@ -10,7 +8,6 @@ public record TripItemInfo(
String name,
String thumbnailUrl,
Long contentTypeId,
Transportation transportation,
Long seqNum,
LocalDate visitDate,
Long price
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
package org.tenten.tentenstomp.domain.trip.dto.response;

import org.tenten.tentenstomp.global.common.enums.Transportation;

import java.time.LocalDate;

public record TripItemInfoMsg(
Long tripItemId,
Long tourItemId,
String name,
String thumbnailUrl,
String category,
Transportation transportation,
Long seqNum,
String visitDate,
Long price
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.tenten.tentenstomp.domain.trip.dto.response;

import org.tenten.tentenstomp.global.common.enums.Transportation;

public record TripPathInfoMsg(
Long fromTripItemId,
Long toTripItemId,
Expand All @@ -11,7 +9,6 @@ public record TripPathInfoMsg(
String fromLatitude,
String toLongitude,
String toLatitude,
Transportation transportation,
PathInfo pathInfo

) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.tenten.tentenstomp.domain.trip.dto.request.TripUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.response.TripInfoMsg;
import org.tenten.tentenstomp.global.common.BaseTimeEntity;
import org.tenten.tentenstomp.global.common.enums.Transportation;
import org.tenten.tentenstomp.global.common.enums.TripStatus;
import org.tenten.tentenstomp.global.converter.MapConverter;

Expand Down Expand Up @@ -50,6 +51,9 @@ public class Trip extends BaseTimeEntity {
@Convert(converter = MapConverter.class)
@Column(columnDefinition = "JSON")
private Map<String, Integer> tripPathPriceMap;
@Convert(converter = MapConverter.class)
@Column(columnDefinition = "JSON")
private Map<String, Transportation> tripTransportationMap;

@OneToMany(mappedBy = "trip", fetch = LAZY, cascade = REMOVE)
private final List<TripMember> tripMembers = new ArrayList<>();
Expand All @@ -70,7 +74,7 @@ public TripInfoMsg changeTripInfo(TripUpdateMsg request) {
this.budget = request.budget();
LocalDate currentDate = LocalDate.now();

TripStatus tripStatus = null;
TripStatus tripStatus;
if (currentDate.isBefore(this.startDate)) {
tripStatus = BEFORE;
} else if (currentDate.isAfter(this.endDate)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.tenten.tentenstomp.domain.member.entity.Member;
import org.tenten.tentenstomp.domain.tour.entity.TourItem;
import org.tenten.tentenstomp.global.common.BaseTimeEntity;
import org.tenten.tentenstomp.global.common.enums.Transportation;

import java.time.LocalDate;

import static jakarta.persistence.EnumType.STRING;
import static jakarta.persistence.GenerationType.IDENTITY;
import static jakarta.persistence.InheritanceType.JOINED;

Expand All @@ -29,8 +26,6 @@ public class TripItem extends BaseTimeEntity {
@Column(name = "tripItemId")
private Long id;

@Enumerated(STRING)
private Transportation transportation;
private Long seqNum; // 방문 순서
private LocalDate visitDate;
@ColumnDefault("0")
Expand All @@ -56,11 +51,4 @@ public void updatePrice(Long price) {
public void updateVisitDate(LocalDate visitDate) {
this.visitDate = visitDate;
}

public void updateTransportation(Transportation transportation) {
this.transportation = transportation;
}
public int compareWithSeqNum(TripItem compare) {
return Long.compare(this.seqNum, compare.seqNum);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.tenten.tentenstomp.domain.trip.entity.Trip;
import org.tenten.tentenstomp.global.cache.RedisCache;
import org.tenten.tentenstomp.global.common.enums.Category;
import org.tenten.tentenstomp.global.common.enums.Transportation;
import org.tenten.tentenstomp.global.component.PathComponent;
import org.tenten.tentenstomp.global.component.dto.response.TripPathCalculationResult;

Expand All @@ -18,6 +19,7 @@
import java.util.Map;

import static org.tenten.tentenstomp.global.common.constant.TopicConstant.*;
import static org.tenten.tentenstomp.global.common.enums.Transportation.CAR;

@Repository
@RequiredArgsConstructor
Expand Down Expand Up @@ -64,7 +66,7 @@ public TripItemMsg getTripItemMsg(Long tripId, String visitDate) {
}
List<TripItemInfo> tripInfos = tripItemRepository.getTripItemInfoByTripIdAndVisitDate(tripId, LocalDate.parse(visitDate));
List<TripItemInfoMsg> tripItemInfoMsgs = tripInfos.stream().map(t -> new TripItemInfoMsg(
t.tripItemId(), t.tourItemId(), t.name(), t.thumbnailUrl(), Category.fromCode(t.contentTypeId()).getName(), t.transportation(), t.seqNum(), t.visitDate().toString(), t.price()
t.tripItemId(), t.tourItemId(), t.name(), t.thumbnailUrl(), Category.fromCode(t.contentTypeId()).getName(), t.seqNum(), t.visitDate().toString(), t.price()
)).toList();
TripItemMsg tripItemMsg = new TripItemMsg(tripId, visitDate, tripItemInfoMsgs);
redisCache.save(TRIP_ITEM, Long.toString(tripId), visitDate, tripItemMsg);
Expand All @@ -77,7 +79,10 @@ public TripPathMsg getTripPathMsg(Long tripId, String visitDate) {
if (cached != null) {
return objectMapper.convertValue(cached, TripPathMsg.class);
}
TripPathCalculationResult tripPath = pathComponent.getTripPath(tripItemRepository.findTripPlaceByTripIdAndVisitDate(tripId, LocalDate.parse(visitDate)));
Trip trip = tripRepository.getReferenceById(tripId);
Map<String, Transportation> tripTransportationMap = trip.getTripTransportationMap();
Transportation transportation = tripTransportationMap.getOrDefault(visitDate, CAR);
TripPathCalculationResult tripPath = pathComponent.getTripPath(tripItemRepository.findTripPlaceByTripIdAndVisitDate(tripId, LocalDate.parse(visitDate)), transportation);
TripPathMsg tripPathMsg = new TripPathMsg(tripId, visitDate, tripPath.tripPathInfoMsgs());
redisCache.save(PATH, Long.toString(tripId), visitDate, tripPathMsg);
return tripPathMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@

public interface TripItemRepository extends JpaRepository<TripItem, Long> {
@Query("SELECT NEW org.tenten.tentenstomp.domain.trip.dto.response.TripItemInfo(" +
"ti.id, t.id, t.title, t.originalThumbnailUrl, t.contentTypeId, ti.transportation, ti.seqNum, ti.visitDate, ti.price" +
"ti.id, t.id, t.title, t.originalThumbnailUrl, t.contentTypeId, ti.seqNum, ti.visitDate, ti.price" +
") FROM TripItem ti LEFT OUTER JOIN TourItem t ON ti.tourItem.id = t.id WHERE ti.trip.id = :tripId AND ti.visitDate = :visitDate ORDER BY ti.seqNum ASC")
List<TripItemInfo> getTripItemInfoByTripIdAndVisitDate(@Param("tripId") Long tripId, @Param("visitDate") LocalDate visitDate);
@Lock(PESSIMISTIC_WRITE)
@Query("SELECT ti FROM TripItem ti JOIN FETCH ti.tourItem WHERE ti.trip.id = :tripId AND ti.visitDate = :visitDate ORDER BY ti.seqNum ASC")
List<TripItem> findTripItemByTripIdAndVisitDate(@Param("tripId") Long tripId, @Param("visitDate") LocalDate visitDate);
@Query("SELECT NEW org.tenten.tentenstomp.global.component.dto.request.TripPlace(" +
"ti.id, ti.seqNum, ti.transportation, t.longitude, t.latitude, ti.price" +
"ti.id, ti.seqNum, t.longitude, t.latitude, ti.price" +
") FROM TripItem ti LEFT OUTER JOIN TourItem t ON ti.tourItem.id = t.id WHERE ti.trip.id = :tripId AND ti.visitDate = :visitDate ORDER BY ti.seqNum ASC")
List<TripPlace> findTripPlaceByTripIdAndVisitDate(@Param("tripId") Long tripId, @Param("visitDate") LocalDate visitDate);
@Lock(PESSIMISTIC_WRITE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.springframework.transaction.annotation.Transactional;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemDeleteMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemPriceUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemTransportationUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.request.TripItemVisitDateUpdateMsg;
import org.tenten.tentenstomp.domain.trip.dto.response.TripBudgetMsg;
import org.tenten.tentenstomp.domain.trip.dto.response.TripItemMsg;
Expand All @@ -15,6 +14,7 @@
import org.tenten.tentenstomp.domain.trip.repository.MessageProxyRepository;
import org.tenten.tentenstomp.domain.trip.repository.TripItemRepository;
import org.tenten.tentenstomp.domain.trip.repository.TripRepository;
import org.tenten.tentenstomp.global.common.enums.Transportation;
import org.tenten.tentenstomp.global.component.PathComponent;
import org.tenten.tentenstomp.global.component.dto.request.TripPlace;
import org.tenten.tentenstomp.global.component.dto.response.TripPathCalculationResult;
Expand All @@ -26,6 +26,8 @@
import java.util.Map;
import java.util.Optional;

import static org.tenten.tentenstomp.global.common.enums.Transportation.CAR;

@Service
@RequiredArgsConstructor
public class TripItemService {
Expand All @@ -51,7 +53,7 @@ public void updateTripItemPrice(String tripItemId, TripItemPriceUpdateMsg priceU
Trip trip = tripItem.getTrip();
trip.updateTripItemPriceSum(oldPrice, newPrice);
tripItem.updatePrice(newPrice);
List<TripItem> tripItems = trip.getTripItems();
List<TripItem> tripItems = tripItemRepository.findTripItemByTripIdAndVisitDate(tripItem.getTrip().getId(), LocalDate.parse(priceUpdateMsg.visitDate()));
TripBudgetMsg tripBudgetMsg = new TripBudgetMsg(trip.getId(), trip.getBudget(), trip.getTripItemPriceSum() + trip.getTransportationPriceSum());
TripItemMsg tripItemMsg = TripItemMsg.fromTripItemList(trip.getId(), tripItem.getVisitDate().toString(), tripItems, tripItem.getId(), priceUpdateMsg);
kafkaProducer.sendAndSaveToRedis(tripBudgetMsg, tripItemMsg);
Expand All @@ -74,8 +76,11 @@ public void updateTripItemVisitDate(String tripItemId, TripItemVisitDateUpdateMs
} else {
TripItem tripItem = optionalTripItem.get();
Trip trip = tripRepository.getReferenceById(tripItem.getTrip().getId());
Map<String, Transportation> tripTransportationMap = trip.getTripTransportationMap();
LocalDate pastDate = tripItem.getVisitDate();
Transportation pastDateTransportation = tripTransportationMap.getOrDefault(pastDate.toString(), CAR);
LocalDate newDate = LocalDate.parse(visitDateUpdateMsg.newVisitDate());
Transportation newDateTransportation = tripTransportationMap.getOrDefault(newDate.toString(), CAR);

List<TripItem> pastDateTripItems = tripItemRepository.findTripItemByTripIdAndVisitDate(tripItem.getTrip().getId(), pastDate);
List<TripItem> newDateTripItems = tripItemRepository.findTripItemByTripIdAndVisitDate(tripItem.getTrip().getId(), newDate);
Expand All @@ -97,8 +102,8 @@ public void updateTripItemVisitDate(String tripItemId, TripItemVisitDateUpdateMs
tripItem.updateVisitDate(LocalDate.parse(visitDateUpdateMsg.newVisitDate()));
newDateTripItems.add(tripItem);

TripPathCalculationResult pastDateTripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newPastDateTripItems));
TripPathCalculationResult newDateTripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newDateTripItems));
TripPathCalculationResult pastDateTripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newPastDateTripItems), pastDateTransportation);
TripPathCalculationResult newDateTripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newDateTripItems), newDateTransportation);

Map<String, Integer> tripPathPriceMap = trip.getTripPathPriceMap();
trip.updateTransportationPriceSum(tripPathPriceMap.getOrDefault(pastDate.toString(), 0), pastDateTripPath.pathPriceSum());
Expand Down Expand Up @@ -131,8 +136,10 @@ public void deleteTripItem(String tripItemId, TripItemDeleteMsg tripItemDeleteMs
} else {
TripItem tripItem = optionalTripItem.get();
Trip trip = tripRepository.getReferenceById(tripItem.getTrip().getId());
Map<String, Transportation> tripTransportationMap = trip.getTripTransportationMap();

LocalDate visitDate = tripItem.getVisitDate();
Transportation transportation = tripTransportationMap.getOrDefault(visitDate.toString(), CAR);

List<TripItem> tripItems = tripItemRepository.findTripItemByTripIdAndVisitDate(tripItem.getTrip().getId(), visitDate);
Long seqNum = tripItem.getSeqNum();
Expand All @@ -148,7 +155,7 @@ public void deleteTripItem(String tripItemId, TripItemDeleteMsg tripItemDeleteMs
}

tripItemRepository.delete(tripItem);
TripPathCalculationResult tripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newTripItems));
TripPathCalculationResult tripPath = pathComponent.getTripPath(TripPlace.fromTripItems(newTripItems), transportation);
Map<String, Integer> tripPathPriceMap = trip.getTripPathPriceMap();
trip.updateTransportationPriceSum(tripPathPriceMap.getOrDefault(visitDate.toString(), 0), tripPath.pathPriceSum());
tripPathPriceMap.put(visitDate.toString(), tripPath.pathPriceSum());
Expand All @@ -164,45 +171,4 @@ public void deleteTripItem(String tripItemId, TripItemDeleteMsg tripItemDeleteMs

}

@Transactional
public void updateTripItemTransportation(String tripItemId, TripItemTransportationUpdateMsg tripItemTransportationUpdateMsg) {
Optional<TripItem> optionalTripItem = tripItemRepository.findTripItemForUpdate(Long.parseLong(tripItemId));
if (optionalTripItem.isEmpty()) {
Trip trip = tripRepository.getReferenceById(tripItemTransportationUpdateMsg.tripId());
kafkaProducer.sendWithOutCaching(
messageProxyRepository.getTripItemMsg(trip.getId(), tripItemTransportationUpdateMsg.visitDate()),
messageProxyRepository.getTripPathMsg(trip.getId(), tripItemTransportationUpdateMsg.visitDate()),
messageProxyRepository.getTripBudgetMsg(trip)
);
} else {
TripItem tripItem = optionalTripItem.get();
Trip trip = tripRepository.getReferenceById(tripItem.getTrip().getId());

LocalDate visitDate = tripItem.getVisitDate();
List<TripItem> tripItems = tripItemRepository.findTripItemByTripIdAndVisitDate(tripItem.getTrip().getId(), visitDate);
for (TripItem newTripItem : tripItems) {
if (newTripItem.getId().equals(tripItem.getId())) {
newTripItem.updateTransportation(tripItemTransportationUpdateMsg.transportation());
}
}

tripItem.updateTransportation(tripItemTransportationUpdateMsg.transportation());
tripItemRepository.save(tripItem);

TripPathCalculationResult tripPath = pathComponent.getTripPath(TripPlace.fromTripItems(tripItems));
Map<String, Integer> tripPathPriceMap = trip.getTripPathPriceMap();
trip.updateTransportationPriceSum(tripPathPriceMap.getOrDefault(visitDate.toString(), 0), tripPath.pathPriceSum());
tripPathPriceMap.put(visitDate.toString(), tripPath.pathPriceSum());
tripRepository.save(trip);

TripItemMsg tripItemMsg = TripItemMsg.fromTripItemList(trip.getId(), visitDate.toString(), tripItems);
TripPathMsg tripPathMsg = new TripPathMsg(trip.getId(), visitDate.toString(), tripPath.tripPathInfoMsgs());
TripBudgetMsg tripBudgetMsg = new TripBudgetMsg(trip.getId(), trip.getBudget(), trip.getTripItemPriceSum() + trip.getTransportationPriceSum());

kafkaProducer.sendAndSaveToRedis(tripItemMsg, tripPathMsg, tripBudgetMsg);
}

}


}
Loading

0 comments on commit 7d235b1

Please sign in to comment.