Skip to content

Commit

Permalink
Merge pull request #63 from UMC5th-bias/feat/#62
Browse files Browse the repository at this point in the history
[FEAT #62] 성지순례 검색 api 구현(like 사용)
  • Loading branch information
ppparkta authored Feb 6, 2024
2 parents a0aa461 + 0bbe2f8 commit 0fea7f4
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.favoriteplace.app.controller;

import com.favoriteplace.app.domain.Member;
import com.favoriteplace.app.domain.travel.Rally;
import com.favoriteplace.app.dto.CommonResponseDto;
import com.favoriteplace.app.dto.community.GuestBookRequestDto;
import com.favoriteplace.app.dto.community.PostResponseDto;
Expand Down Expand Up @@ -114,4 +115,24 @@ public CommonResponseDto.RallyResponseDto certifyToPilgrimage(
Member member = securityUtil.getUser();
return pilgrimageCommandService.certifyToPilgrimage(pilgrimageId, member, form);
}

// 성지순례 애니 별 검색
@GetMapping("/category")
public List<RallyDto.SearchAnimeDto> searchAnime(HttpServletRequest request, @RequestParam String value){
Member member = securityUtil.getUserFromHeader(request);
if (value.equals("")){
throw new RestApiException(ErrorCode.RALLY_NOT_FOUND);
}
return pilgrimageQueryService.searchAnime(value, member);
}

// 성지순례 지역 별 검색
@GetMapping("/category/region")
public List<RallyDto.SearchRegionDto> searchRegion(HttpServletRequest request, @RequestParam String value){
Member member = securityUtil.getUserFromHeader(request);
if (value.equals("")){
throw new RestApiException(ErrorCode.PILGRIMAGE_NOT_FOUND);
}
return pilgrimageQueryService.searchRegion(value, member);
}
}
24 changes: 24 additions & 0 deletions src/main/java/com/favoriteplace/app/converter/RallyConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.favoriteplace.app.domain.travel.Address;
import com.favoriteplace.app.domain.travel.Pilgrimage;
import com.favoriteplace.app.domain.travel.Rally;
import com.favoriteplace.app.dto.travel.PilgrimageDto;
import com.favoriteplace.app.dto.travel.RallyDto;

import java.util.List;
Expand Down Expand Up @@ -81,4 +82,27 @@ public static RallyDto.PilgrimageCategoryAnimeDto toPilgrimageCategoryAnimeDto(R
.build();
}

public static RallyDto.SearchAnimeDto toSearchAnimeDto(Rally rally, Long visitedPilgrimages) {
return RallyDto.SearchAnimeDto.builder()
.name(rally.getName())
.pilgrimageNumber(rally.getPilgrimageNumber())
.myPilgrimageNumber(visitedPilgrimages)
.image(rally.getImage().getUrl())
.build();
}

public static RallyDto.SearchRegionDto toSearchRegionDto(String name, List<RallyDto.SearchRegionDetailDto> pilgrimages) {
return RallyDto.SearchRegionDto.builder()
.address(name)
.rallies(pilgrimages)
.build();
}

public static RallyDto.SearchRegionDetailDto toSearchRegionDetailDto(Pilgrimage pilgrimage){
return RallyDto.SearchRegionDetailDto.builder()
.name(pilgrimage.getRallyName())
.image(pilgrimage.getVirtualImage().getUrl())
.detailAddress(pilgrimage.getDetailAddress())
.build();
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/favoriteplace/app/dto/travel/RallyDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import java.util.ArrayList;
import java.util.List;

import static lombok.AccessLevel.PRIVATE;
import static lombok.AccessLevel.PROTECTED;


public class RallyDto {
@Builder
Expand Down Expand Up @@ -75,4 +78,34 @@ public static class PilgrimageCategoryAnimeDto {
Long myPilgrimageNumber;
String image;
}

@Builder
@Getter
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PRIVATE)
public static class SearchAnimeDto {
String name;
Long pilgrimageNumber;
Long myPilgrimageNumber;
String image;
}

@Builder
@Getter
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PRIVATE)
static public class SearchRegionDto {
String address;
List<SearchRegionDetailDto> rallies;
}

@Builder
@Getter
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PRIVATE)
public static class SearchRegionDetailDto {
String name;
String image;
String detailAddress;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.favoriteplace.app.domain.travel.Address;
import com.favoriteplace.app.domain.travel.Rally;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -11,4 +13,6 @@
public interface AddressRepository extends JpaRepository<Address, Long> {
List<Address> findByPilgrimages_Rally(Rally rally);
Address findByStateAndDistrict(String state, String district);
@Query("SELECT distinct a FROM Address a WHERE a.state LIKE %:keyword% OR a.district LIKE %:keyword%")
List<Address> findByStateOrDistrictContaining(@Param("keyword") String keyword);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,7 @@ public interface RallyRepository extends JpaRepository<Rally, Long> {

@Query("select r from Rally r where :pilgrimage MEMBER of r.pilgrimages")
Rally findByPilgrimage(Pilgrimage pilgrimage);

@Query("select r from Rally r where r.name like %:name%")
List<Rally> findByName(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import com.favoriteplace.app.repository.*;
import com.favoriteplace.global.exception.ErrorCode;
import com.favoriteplace.global.exception.RestApiException;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -300,4 +299,36 @@ public long getCompletePilgrimageCount(Member member, Long rallyId){
List<Long> pilgrimageIds = pilgrimages.stream().map(Pilgrimage::getId).toList();
return visitedPilgrimageRepository.countByMemberIdAndPilgrimageIdIn(memberId, pilgrimageIds);
}

/**
* 애니메이션 별 랠리 검색
* @param value 검색어
* @param member 사용자
* @return
*/
public List<RallyDto.SearchAnimeDto> searchAnime(String value, Member member) {
List<Rally> rallyList = rallyRepository.findByName(value);
return rallyList.stream().map(rally -> {
Long visitedPilgrimages = 0L;
if (member != null) {
visitedPilgrimages = visitedPilgrimageRepository.findByDistinctCount(member.getId(), rally.getId());
}
return RallyConverter.toSearchAnimeDto(rally, visitedPilgrimages);
}).collect(Collectors.toList());
}

public List<RallyDto.SearchRegionDto> searchRegion(String value, Member member) {
List<Address> addressList = addressRepository.findByStateOrDistrictContaining(value);

return addressList.stream().map(address-> {
log.info("address=" + address.getState()+' '+address.getDistrict());
List<Pilgrimage> pilgrimages = pilgrimageRepository.findByAddress(address);
String name = address.getState() + ' ' + address.getDistrict();
List<RallyDto.SearchRegionDetailDto> resultList = pilgrimages.stream()
.map(pilgrimage -> {
return RallyConverter.toSearchRegionDetailDto(pilgrimage);
}).collect(Collectors.toList());
return RallyConverter.toSearchRegionDto(name, resultList);
}).collect(Collectors.toList());
}
}

0 comments on commit 0fea7f4

Please sign in to comment.