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] 홈/검색/도시 상세 피드 API 리팩토링 및 수정, 로그인한 사용자 '도시 보관' 여부 조회 API 구현 #133

Merged
merged 22 commits into from
Jan 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
de2e1a6
[rename] PlaceRepository 관련 클래스명 변경
jo0oy Jan 26, 2024
656f604
[rename] TripRecordRepository 관련 클래스명 변경
jo0oy Jan 26, 2024
687b24b
[rename] TripRecordScheduleRepository 관련 클래스명 변경
jo0oy Jan 26, 2024
e21ba3a
[move] Move 'CurrencyUnit' Enum class
jo0oy Jan 26, 2024
9f05ce8
[rename] Rename TripRecordRepository method 'findById(Member member)'…
jo0oy Jan 26, 2024
d51d3df
[refactor] CityStore 엔티티 설정 리팩토링
jo0oy Jan 26, 2024
d110be3
[refactor] PlaceStore 엔티티 설정 리팩토링
jo0oy Jan 26, 2024
85e4092
[refactor] TripRecordStore 엔티티 설정 리팩토링
jo0oy Jan 26, 2024
e36d27a
[refactor] PlaceRepositoryImpl 리팩토링 및 주석 추가
jo0oy Jan 26, 2024
124695b
[style] PlaceService 불필요한 line spacing 제거
jo0oy Jan 26, 2024
773f16e
[rename] Rename TripRecordController method 'tripRecordTopList' to 'l…
jo0oy Jan 26, 2024
16d5c11
[rename] Rename TripRecordScheduleVideoController method 'getVideosBy…
jo0oy Jan 26, 2024
2ac0d0a
[rename] TripRecordRepositoryCustom 리스트 조회 메서드명 findTripRecords 복수형으로 변경
jo0oy Jan 26, 2024
fd219be
[rename] TripRecordScheduleVideoRepositoryCustom 리스트 조회 메서드명 복수형으로 변경
jo0oy Jan 26, 2024
780aae7
[refactor] TripRecordRepositoryImpl TODO 제거 및 주석 추가
jo0oy Jan 26, 2024
64174f2
[refactor] TripRecordScheduleImageRepositoryImpl 묵시적 조인 가능성 있는 쿼리 joi…
jo0oy Jan 26, 2024
0b96279
[refactor] TripRecordScheduleVideoRepositoryImpl 묵시적 조인 가능성 있는 쿼리 joi…
jo0oy Jan 26, 2024
fb7b538
[refactor] PlaceRepositoryImpl 통일성을 위해 innerJoin -> join 으로 변경
jo0oy Jan 26, 2024
9813282
[feat] City 엔티티 도시 영문명 필드 추가 및 그에 따른 해당 Request/Response DTO 필드 추가
jo0oy Jan 26, 2024
8fe57d1
[feat] 로그인한 사용자가 도시 보관했는지 여부 응답 DTO 추가
jo0oy Jan 26, 2024
4fa5155
[feat] 로그인한 사용자가 해당 도시 보관했는지 확인 서비스 로직 구현
jo0oy Jan 26, 2024
2391711
[feat] 로그인한 사용자가 해당 도시 보관했는지 확인 조회 API 구현
jo0oy Jan 26, 2024
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
@@ -1,11 +1,12 @@
package com.haejwo.tripcometrue.domain.city.dto.request;

import com.haejwo.tripcometrue.domain.city.entity.City;
import com.haejwo.tripcometrue.domain.city.entity.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.Country;

public record AddCityRequestDto(
String name,
String englishName,
String language,
String timeDifference,
String voltage,
Expand All @@ -18,6 +19,7 @@ public record AddCityRequestDto(
public City toEntity() {
return City.builder()
.name(this.name)
.englishName(this.englishName)
.language(this.language)
.timeDifference(this.timeDifference)
.voltage(this.voltage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
public record CityResponseDto(
Long cityId,
String name,
String englishName,
String language,
String timeDifference,
String voltage,
Expand All @@ -28,6 +29,7 @@ public static CityResponseDto fromEntity(City entity) {
return CityResponseDto.builder()
.cityId(entity.getId())
.name(entity.getName())
.englishName(entity.getEnglishName())
.language(entity.getLanguage())
.timeDifference(entity.getTimeDifference())
.voltage(entity.getVoltage())
Expand All @@ -47,6 +49,7 @@ public static CityResponseDto fromEntity(City entity, String exchangeRate) {
return CityResponseDto.builder()
.cityId(entity.getId())
.name(entity.getName())
.englishName(entity.getEnglishName())
.language(entity.getLanguage())
.timeDifference(entity.getTimeDifference())
.voltage(entity.getVoltage())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.haejwo.tripcometrue.global.entity.BaseTimeEntity;
import com.haejwo.tripcometrue.global.enums.Country;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
Expand All @@ -18,6 +19,7 @@ public class City extends BaseTimeEntity {
@Column(name = "city_id")
private Long id;
private String name;
private String englishName;
private String language;
private String timeDifference;
private String voltage;
Expand All @@ -37,12 +39,13 @@ public class City extends BaseTimeEntity {

@Builder
private City(
Long id, String name, String language, String timeDifference,
Long id, String name, String englishName, String language, String timeDifference,
String voltage, String visa, CurrencyUnit currency, String weatherRecommendation,
String weatherDescription, Integer storeCount, Country country, String imageUrl
) {
this.id = id;
this.name = name;
this.englishName = englishName;
this.language = language;
this.timeDifference = timeDifference;
this.voltage = voltage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.haejwo.tripcometrue.domain.city.dto.response.ExchangeRateResponseDto;
import com.haejwo.tripcometrue.domain.city.dto.response.WeatherResponseDto;
import com.haejwo.tripcometrue.domain.city.entity.City;
import com.haejwo.tripcometrue.domain.city.entity.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import com.haejwo.tripcometrue.domain.city.entity.Weather;
import com.haejwo.tripcometrue.domain.city.exception.CityNotFoundException;
import com.haejwo.tripcometrue.domain.city.repository.CityRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.haejwo.tripcometrue.domain.city.dto.response.CityResponseDto;
import com.haejwo.tripcometrue.domain.city.entity.City;
import com.haejwo.tripcometrue.domain.city.entity.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import com.haejwo.tripcometrue.domain.city.repository.CityRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.haejwo.tripcometrue.domain.city.service;

import com.haejwo.tripcometrue.domain.city.dto.api.ExchangeRateApiDto;
import com.haejwo.tripcometrue.domain.city.entity.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.springframework.data.jpa.repository.JpaRepository;

public interface PlaceRepository extends
JpaRepository<Place, Long>, PlaceCustomRepository
JpaRepository<Place, Long>, PlaceRepositoryCustom
{
List<Place> findByCityId(Long cityId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

import java.util.List;

public interface PlaceCustomRepository {
public interface PlaceRepositoryCustom {

Page<Place> findPlaceWithFilter(Pageable pageable,
Integer storedCount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
import static com.haejwo.tripcometrue.domain.city.entity.QCity.city;
import static com.haejwo.tripcometrue.domain.place.entity.QPlace.place;

public class PlaceCustomRepositoryImpl extends QuerydslRepositorySupport implements PlaceCustomRepository {
public class PlaceRepositoryImpl extends QuerydslRepositorySupport implements PlaceRepositoryCustom {

private final JPAQueryFactory queryFactory;

public PlaceCustomRepositoryImpl(JPAQueryFactory queryFactory) {
public PlaceRepositoryImpl(JPAQueryFactory queryFactory) {
super(Place.class);
this.queryFactory = queryFactory;
}
Expand Down Expand Up @@ -267,12 +267,11 @@ private OrderSpecifier<?>[] getSort(Pageable pageable) {
case "commentCount":
orderSpecifiers.add(new OrderSpecifier<>(direction, place.commentCount));
break;

// TODO: 정렬 기준 예외 처리
}
}
}

// 아무 조건 존재하지 않는 경우, order by null
if(orderSpecifiers.isEmpty()) {
orderSpecifiers.add(new OrderSpecifier(Order.ASC, NullExpression.DEFAULT, NullHandling.Default));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,6 @@ public void removePlace(Long placeId) {
placeRepository.delete(findPlace);
}



private Place findPlaceById(Long placeId) {

Place findPlace = placeRepository.findById(placeId)
Expand All @@ -146,6 +144,4 @@ private Place findPlaceById(Long placeId) {
return findPlace;
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.haejwo.tripcometrue.domain.store.dto.request.CityStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.request.PlaceStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.request.TripRecordStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.response.CheckCityStoredResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.CityStoreResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.PlaceStoreResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.TripRecordStoreResponseDto;
Expand Down Expand Up @@ -116,4 +117,19 @@ public ResponseEntity<ResponseDTO<Long>> getStoredCountForTripRecord(@PathVariab
Long count = storeService.getStoredCountForTripRecord(tripRecordId);
return ResponseEntity.ok(ResponseDTO.okWithData(count));
}

@GetMapping("/v1/cities/{cityId}/stores")
public ResponseEntity<ResponseDTO<CheckCityStoredResponseDto>> checkCityStoredByLoginMember(
@PathVariable("cityId") Long cityId,
@AuthenticationPrincipal PrincipalDetails principalDetails
) {

return ResponseEntity
.ok()
.body(
ResponseDTO.okWithData(
storeService.checkCityStoredByLoginMember(principalDetails, cityId)
)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.haejwo.tripcometrue.domain.store.dto.response;

import lombok.Builder;

public record CheckCityStoredResponseDto(
boolean isStored
) {

@Builder
public CheckCityStoredResponseDto {
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.haejwo.tripcometrue.domain.store.dto.response;
import com.haejwo.tripcometrue.domain.city.entity.City;
import com.haejwo.tripcometrue.domain.city.entity.CurrencyUnit;
import com.haejwo.tripcometrue.global.enums.CurrencyUnit;
import com.haejwo.tripcometrue.domain.store.entity.CityStore;
import com.haejwo.tripcometrue.global.enums.Country;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
package com.haejwo.tripcometrue.domain.store.entity;

import com.haejwo.tripcometrue.domain.city.entity.City;
import com.haejwo.tripcometrue.domain.member.entity.Member;
import com.haejwo.tripcometrue.global.entity.BaseTimeEntity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class CityStore extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "city_store_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "member_id")
Member member;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "city_id")
City city;

@Builder
public CityStore(Member member, City city){
private CityStore(Member member, City city){
this.member = member;
this.city = city;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
package com.haejwo.tripcometrue.domain.store.entity;

import com.haejwo.tripcometrue.domain.member.entity.Member;
import com.haejwo.tripcometrue.domain.place.entity.Place;
import com.haejwo.tripcometrue.global.entity.BaseTimeEntity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class PlaceStore extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "place_store_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "member_id")
Member member;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "place_id")
Place place;

@Builder
public PlaceStore(Member member, Place place){
private PlaceStore(Member member, Place place){
this.member = member;
this.place = place;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,31 @@
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class TripRecordStore extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "trip_record_store_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "member_Id")
Member member;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "trip_record_id")
TripRecord tripRecord;

@Builder
public TripRecordStore(Member member, TripRecord tripRecord){
private TripRecordStore(Member member, TripRecord tripRecord){
this.member = member;
this.tripRecord = tripRecord;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.haejwo.tripcometrue.domain.store.dto.request.CityStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.request.PlaceStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.request.TripRecordStoreRequestDto;
import com.haejwo.tripcometrue.domain.store.dto.response.CheckCityStoredResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.CityStoreResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.PlaceStoreResponseDto;
import com.haejwo.tripcometrue.domain.store.dto.response.TripRecordStoreResponseDto;
Expand All @@ -30,6 +31,8 @@
import com.haejwo.tripcometrue.global.springsecurity.PrincipalDetails;
import jakarta.transaction.Transactional;
import java.util.List;
import java.util.Objects;

import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand Down Expand Up @@ -143,6 +146,25 @@ public void unstoreTripRecord(PrincipalDetails principalDetails, Long tripRecord
tripRecordStoreRepository.delete(tripRecordStore);
}

public CheckCityStoredResponseDto checkCityStoredByLoginMember(PrincipalDetails principalDetails, Long cityId) {

if (Objects.isNull(principalDetails.getMember())) {
return CheckCityStoredResponseDto.builder()
.isStored(false)
.build();
}

Long memberId = principalDetails.getMember().getId();

return CheckCityStoredResponseDto.builder()
.isStored(
cityStoreRepository
.findByMemberIdAndCityId(memberId, cityId)
.isPresent()
)
.build();
}

public Page<CityStoreResponseDto> getStoredCities(PrincipalDetails principalDetails, Pageable pageable) {
Page<CityStore> storedCities = cityStoreRepository.findByMember(principalDetails.getMember(), pageable);
return storedCities.map(CityStoreResponseDto::fromEntity);
Expand Down
Loading
Loading