Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
d607a9b
feat: sector info 엔티티 생성
ChoiWonYu Nov 23, 2024
9126c27
feat: sector에 선택되었을 때 이미지 url 추가
ChoiWonYu Nov 23, 2024
1d51072
test: sector에 선택되었을 때 이미지 url 추가로 인한 변경 사항 반영
ChoiWonYu Nov 23, 2024
e504ed5
feat: sector info의 기본적인 리포지토리 기능 추가
ChoiWonYu Nov 23, 2024
0117483
feat: 특정 gym 응답으로 제공할 섹터 dto에 선택되었을 때 지도 이미지도 추가한 dto
ChoiWonYu Nov 23, 2024
34a9a34
feat: 변경된 sector 정보 dto를 반환하도록 수정
ChoiWonYu Nov 23, 2024
288d345
refactor: 프로퍼티 순서 변경
ChoiWonYu Nov 23, 2024
c407364
feat: sector의 고정 정보 생성 로직 추가
ChoiWonYu Nov 23, 2024
c812641
refactor: 탈거일 유무에 따른 생성 방법 분기를 sector에서 처리하도록 변경
ChoiWonYu Nov 24, 2024
113636c
feat: 고정 섹터 정보와 가변 섹터 정보를 생성하는 로직 추가
ChoiWonYu Nov 24, 2024
4310dcd
feat: 고정 섹터 정보를 찾을 수 없을 때 예외 처리
ChoiWonYu Nov 24, 2024
0afb1eb
feat: 고정 섹터 정보를 찾을 수 없을 때 반환할 예외
ChoiWonYu Nov 24, 2024
bef83bd
feat: 고정 섹터 정보와 가변 섹터 정보 생성 API
ChoiWonYu Nov 24, 2024
76ecdeb
feat: 고정 섹터 정보 id 추가
ChoiWonYu Nov 24, 2024
06d3f4a
feat: 새로운 removal date에 따른 만료 여부 판단
ChoiWonYu Nov 24, 2024
54d6fa1
feat: 해당 섹터의 클라이밍장은 수정 불가
ChoiWonYu Nov 24, 2024
1d50452
feat: 섹터의 고정 정보 수정 전이와 가변 정보 수정 전이를 각각 다른 이벤트로 처리
ChoiWonYu Nov 24, 2024
7c1ff74
feat: 고정 섹터 정보의 수정을 가변 섹터 정보에 반영하는 dto
ChoiWonYu Nov 24, 2024
34a14cb
feat: 고정 섹터 정보의 수정을 알리는 이벤트
ChoiWonYu Nov 24, 2024
f13e5fc
feat: 고정 섹터 정보 수정 API
ChoiWonYu Nov 24, 2024
95befb2
feat: 여러 섹터 id의 섹터 이름을 변경하는 메서드 추가
ChoiWonYu Nov 24, 2024
0f85b65
feat: 고정 섹터 정보 변경 이벤트에 대한 리스너 추가
ChoiWonYu Nov 24, 2024
9577836
feat: 모든 고정 섹터 정보 조회 API
ChoiWonYu Nov 24, 2024
220561c
feat: 이벤트 domain으로 이동
ChoiWonYu Nov 24, 2024
900a218
feat: 섹터 정보 변경 이벤트에서 만료 여부까지 문제에 반영하도록 수정
ChoiWonYu Nov 26, 2024
2082c6b
fix: 섹터 고정 정보 조회 API의 URI 변경
ChoiWonYu Nov 26, 2024
b0dd8a5
feat: 탈거일 수정 API가 만료 여부도 변경하도록 수정
ChoiWonYu Nov 26, 2024
79f6348
feat: 탈거일 수정 API 호출 시 만료 여부를 다시 판단하는 로직 추가
ChoiWonYu Nov 26, 2024
d868ad2
Merge pull request #100 from SWM-Flash/feature/FLASH-334-sector-info
ChoiWonYu Nov 27, 2024
7727a68
feat: 클라이밍장 즐겨찾기 기능을 위한 유저, 클라이밍 M:N 관계 엔티티
ChoiWonYu Nov 27, 2024
c219860
feat: 기본적인 단건 조회, 생성, 유저 아이디로 클라이밍장 리스트 조회 로직 추가
ChoiWonYu Nov 27, 2024
8012e0d
feat: 멤버 id와 gym id로 관계 엔티티를 생성하는 시나리오 추가
ChoiWonYu Nov 27, 2024
7fb8e45
feat: 멤버 id로 해당 멤버가 어떤 클라이밍장들을 즐겨찾기 했는지 반환하는 시나리오 추가
ChoiWonYu Nov 27, 2024
9013a1a
feat: auth util로 직접 member id를 가져오도록 수정
ChoiWonYu Nov 27, 2024
013cbaf
feat: 삭제와 유저 id, 클라이밍장 id로 데이터를 찾는 메서드 추가
ChoiWonYu Nov 27, 2024
1cc3ee8
feat: 즐겨찾기가 토글처럼 동작하도록 수정
ChoiWonYu Nov 27, 2024
2f2afc4
feat: 즐겨찾기가 토글처럼 동작하는 API
ChoiWonYu Nov 27, 2024
ae27c7b
feat: 시나리오 이름 변경
ChoiWonYu Nov 27, 2024
8e8e6a1
feat: 클라이밍장 service에 즐겨찾기 service를 주입해 즐겨찾기 반영 추가
ChoiWonYu Nov 27, 2024
d2bda44
feat: 클라이밍장 응답에 즐겨찾기를 했는지 여부 필드 추가
ChoiWonYu Nov 27, 2024
09afeee
feat: 클라이밍장 전체 조회 시 해당 유저의 즐겨찾기 목록을 반영해 정렬하도록 수정
ChoiWonYu Nov 27, 2024
04aa7b1
feat: 클라이밍장 전체 조회 dto를 인프라스트럭처 레이어로 이동
ChoiWonYu Nov 27, 2024
4d8c25a
feat: pk 생성 전략
ChoiWonYu Nov 27, 2024
8720723
feat: 즐겨찾기 토글 API uri 설정
ChoiWonYu Nov 27, 2024
92fdde6
feat: 클라이밍장 유효성 검사 로직 추가
ChoiWonYu Nov 27, 2024
10e1a0a
feat: swagger에 tag 추가
ChoiWonYu Nov 28, 2024
cd38ba2
Merge pull request #101 from SWM-Flash/feature/FLASH-339-favorite-gym
ChoiWonYu Nov 28, 2024
44cd10e
Merge pull request #102 from SWM-Flash/integration
ChoiWonYu Nov 28, 2024
ca82cc7
feat: 홀드 테이블, 홀드 생성 및 조회 API 구현
wonyangs Dec 3, 2024
5555722
Merge pull request #103 from SWM-Flash/feature/FLASH-337-hold-color
wonyangs Dec 4, 2024
2e356b4
Merge pull request #104 from SWM-Flash/integration
wonyangs Dec 4, 2024
b307d6f
feat: 클라이밍장 상세 정보 조회 시 sectorId 정보 제공
wonyangs Dec 4, 2024
6108615
feat: Solution에 풀이 일자, 썸네일 url 추가
wonyangs Dec 4, 2024
1b2e478
feat: Problem에 홀드 정보, 썸네일 해설 정보 추가
wonyangs Dec 4, 2024
8ebd9c5
feat: 문제 생성을 일반 유저도 할 수 있도록 Url 수정
wonyangs Dec 4, 2024
fdd769b
feat: 업로드된 해설이 첫 번째 해설인 경우 문제의 썸네일, 출처자 인스타그램id, 썸네일 해설 id를 설정
wonyangs Dec 4, 2024
87788bf
fix: 이미 썸네일이 있는 문제의 경우 해설 업로드를 하더라도 썸네일을 변경하지 않도록 수정
wonyangs Dec 5, 2024
185de1e
feat: 해설 삭제 시 다음 해설이 썸네일, 남은 해설이 없을 시 문제 삭제
wonyangs Dec 5, 2024
994608b
feat: 내가 올린 해설 조회 시 썸네일 이미지와 풀이 날짜를 함께 반환
wonyangs Dec 5, 2024
e43905c
feat: 중복 문제 조회 API 구현
wonyangs Dec 5, 2024
fe78627
feat: 문제 단건 조회 시 홀드색 정보 제공
wonyangs Dec 5, 2024
3569c54
feat: 썸네일 id에 해당하는 해설 썸네일 수정 시 반영
wonyangs Dec 6, 2024
470ed88
Merge pull request #105 from SWM-Flash/feature/FLASH-335-solution-thu…
wonyangs Dec 6, 2024
5e433c3
Merge pull request #106 from SWM-Flash/integration
wonyangs Dec 6, 2024
5ac390c
feat: 해설 상세 조회 API에 정보 추가
wonyangs Dec 10, 2024
68c4b8d
Merge pull request #107 from SWM-Flash/feature/FLASH-399-solution-det…
wonyangs Dec 10, 2024
0b12ad3
Merge pull request #108 from SWM-Flash/integration
wonyangs Dec 10, 2024
bd42cbe
feat: 해설 디테일 조회 API에 풀이 날짜 추가
wonyangs Dec 10, 2024
a171938
Merge pull request #109 from SWM-Flash/feature/FLASH-400-solution-det…
wonyangs Dec 10, 2024
f9a103f
Merge pull request #110 from SWM-Flash/integration
wonyangs Dec 10, 2024
79d4f89
feat: 문제의 홀드 정보 수정 API 구현
wonyangs Dec 13, 2024
95561ab
chore: final 키워드 추가
wonyangs Dec 13, 2024
41908e9
chore: setter 제거 및 메서드 구현
wonyangs Dec 13, 2024
c14f045
chore: url 수정
wonyangs Dec 13, 2024
acd35a4
refactor: problem 애그리거트에서 hold 관련 작업을 담당하는 service 추가 및 로직 이동
wonyangs Dec 13, 2024
1e12e7e
refactor: 메서드명을 updateXXX로 수정
wonyangs Dec 16, 2024
1a7d5ee
Merge pull request #111 from SWM-Flash/feature/FLASH-417-modify-hold-…
wonyangs Dec 16, 2024
02b1aae
Merge pull request #112 from SWM-Flash/integration
wonyangs Dec 17, 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
@@ -0,0 +1,40 @@
package com.first.flash.climbing.favorite.application;

import com.first.flash.climbing.favorite.application.dto.MemberFavoriteGymResponseDto;
import com.first.flash.climbing.favorite.domain.MemberFavoriteGym;
import com.first.flash.climbing.favorite.domain.MemberFavoriteGymRepository;
import com.first.flash.climbing.gym.domian.ClimbingGymIdConfirmRequestedEvent;
import com.first.flash.global.event.Events;
import com.first.flash.global.util.AuthUtil;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class MemberFavoriteGymService {

private final MemberFavoriteGymRepository memberFavoriteGymRepository;

public MemberFavoriteGymResponseDto toggleMemberFavoriteGym(final Long gymId) {
Events.raise(ClimbingGymIdConfirmRequestedEvent.of(gymId));
UUID memberId = AuthUtil.getId();
Optional<MemberFavoriteGym> favoriteGym = memberFavoriteGymRepository.findByMemberIdAndGymId(memberId, gymId);

if (favoriteGym.isPresent()) {
memberFavoriteGymRepository.delete(favoriteGym.get());
} else {
MemberFavoriteGym memberFavoriteGym = MemberFavoriteGym.createDefault(memberId, gymId);
memberFavoriteGymRepository.save(memberFavoriteGym);
}
return MemberFavoriteGymResponseDto.toDtoByStatus(favoriteGym.isPresent());
}

public List<Long> findFavoriteGymIdsByMemberId(final UUID memberId) {
return memberFavoriteGymRepository.findByMemberId(memberId).stream()
.map(MemberFavoriteGym::getGymId)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.first.flash.climbing.favorite.application.dto;

public record MemberFavoriteGymResponseDto(String message) {

public static MemberFavoriteGymResponseDto toDtoByStatus(final boolean present) {
if (present) {
return new MemberFavoriteGymResponseDto("즐겨찾기에서 제거되었습니다.");
}
return new MemberFavoriteGymResponseDto("즐겨찾기에 추가되었습니다.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.first.flash.climbing.favorite.domain;

import com.first.flash.global.domain.BaseEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import java.util.UUID;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Entity
@NoArgsConstructor
@Getter
@ToString
public class MemberFavoriteGym extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private UUID memberId;
private Long gymId;

protected MemberFavoriteGym(final UUID memberId, final Long gymId) {
this.memberId = memberId;
this.gymId = gymId;
}

public static MemberFavoriteGym createDefault(final UUID memberId, final Long gymId) {
return new MemberFavoriteGym(memberId, gymId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.first.flash.climbing.favorite.domain;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

public interface MemberFavoriteGymRepository {

MemberFavoriteGym save(final MemberFavoriteGym memberFavoriteGym);

Optional<MemberFavoriteGym> findById(final Long id);

List<MemberFavoriteGym> findByMemberId(final UUID memberId);

Optional<MemberFavoriteGym> findByMemberIdAndGymId(final UUID memberId, final Long gymId);

void delete(final MemberFavoriteGym memberFavoriteGym);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.first.flash.climbing.favorite.infrastructure;

import com.first.flash.climbing.favorite.domain.MemberFavoriteGym;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberFavoriteGymJpaRepository extends JpaRepository<MemberFavoriteGym, Long> {

MemberFavoriteGym save(final MemberFavoriteGym memberFavoriteGym);

Optional<MemberFavoriteGym> findById(final Long id);

List<MemberFavoriteGym> findByMemberId(final UUID memberId);

Optional<MemberFavoriteGym> findByMemberIdAndGymId(final UUID memberId, final Long gymId);

void delete(final MemberFavoriteGym memberFavoriteGym);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.first.flash.climbing.favorite.infrastructure;

import com.first.flash.climbing.favorite.domain.MemberFavoriteGym;
import com.first.flash.climbing.favorite.domain.MemberFavoriteGymRepository;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor
public class MemberFavoriteGymRepositoryImpl implements MemberFavoriteGymRepository {

private final MemberFavoriteGymJpaRepository memberFavoriteGymJpaRepository;

@Override
public MemberFavoriteGym save(final MemberFavoriteGym memberFavoriteGym) {
return memberFavoriteGymJpaRepository.save(memberFavoriteGym);
}

@Override
public Optional<MemberFavoriteGym> findById(final Long id) {
return memberFavoriteGymJpaRepository.findById(id);
}

@Override
public List<MemberFavoriteGym> findByMemberId(final UUID memberId) {
return memberFavoriteGymJpaRepository.findByMemberId(memberId);
}

@Override
public Optional<MemberFavoriteGym> findByMemberIdAndGymId(final UUID memberId,
final Long gymId) {
return memberFavoriteGymJpaRepository.findByMemberIdAndGymId(memberId, gymId);
}

@Override
public void delete(final MemberFavoriteGym memberFavoriteGym) {
memberFavoriteGymJpaRepository.delete(memberFavoriteGym);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.first.flash.climbing.favorite.ui;

import com.first.flash.climbing.favorite.application.MemberFavoriteGymService;
import com.first.flash.climbing.favorite.application.dto.MemberFavoriteGymResponseDto;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "favorite", description = "즐겨찾기 API")
@RestController
@RequiredArgsConstructor
public class MemberFavoriteGymController {

private final MemberFavoriteGymService memberFavoriteGymService;

@Operation(summary = "클라이밍장 즐겨찾기 생성/삭제", description = "클라이밍장 id로 즐겨찾기 토글")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "즐겨찾기 생성 및 삭제",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = MemberFavoriteGymResponseDto.class))),
@ApiResponse(responseCode = "400", description = "유효하지 않은 요청 형식",
content = @Content(mediaType = "application/json"))
})
@PutMapping("/favorites/{gymId}")
public ResponseEntity<MemberFavoriteGymResponseDto> toggleMemberFavoriteGym(
@PathVariable final Long gymId) {
return ResponseEntity.status(HttpStatus.OK)
.body(memberFavoriteGymService.toggleMemberFavoriteGym(gymId));
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package com.first.flash.climbing.gym.application;

import com.first.flash.climbing.favorite.application.MemberFavoriteGymService;
import com.first.flash.climbing.gym.application.dto.ClimbingGymCreateRequestDto;
import com.first.flash.climbing.gym.application.dto.ClimbingGymCreateResponseDto;
import com.first.flash.climbing.gym.application.dto.ClimbingGymDetailResponseDto;
import com.first.flash.climbing.gym.application.dto.ClimbingGymResponseDto;
import com.first.flash.climbing.gym.infrastructure.dto.ClimbingGymResponseDto;
import com.first.flash.climbing.gym.domian.ClimbingGym;
import com.first.flash.climbing.gym.domian.ClimbingGymRepository;
import com.first.flash.climbing.gym.domian.vo.Difficulty;
import com.first.flash.climbing.gym.exception.exceptions.ClimbingGymNotFoundException;
import com.first.flash.climbing.gym.infrastructure.dto.SectorInfoResponseDto;
import com.first.flash.global.util.AuthUtil;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -19,6 +23,7 @@
public class ClimbingGymService {

private final ClimbingGymRepository climbingGymRepository;
private final MemberFavoriteGymService memberFavoriteGymService;

@Transactional
public ClimbingGymCreateResponseDto save(final ClimbingGymCreateRequestDto createRequestDto) {
Expand All @@ -32,21 +37,21 @@ public ClimbingGym findClimbingGymById(final Long id) {
}

public List<ClimbingGymResponseDto> findAllClimbingGyms() {
return climbingGymRepository.findAll().stream()
.map(ClimbingGymResponseDto::toDto)
.toList();
UUID memberId = AuthUtil.getId();
List<Long> favoriteGymIds = memberFavoriteGymService.findFavoriteGymIdsByMemberId(memberId);
return climbingGymRepository.findAllWithFavorites(favoriteGymIds);
}

public ClimbingGymDetailResponseDto findClimbingGymDetail(final Long id) {
ClimbingGym climbingGym = findClimbingGymById(id);
List<String> sectorNames = findSectorNamesById(id);
List<SectorInfoResponseDto> sectorNames = findSectorNamesById(id);
List<String> difficultyNames = getDifficultyNames(climbingGym);
return new ClimbingGymDetailResponseDto(climbingGym.getGymName(),
climbingGym.getMapImageUrl(), climbingGym.getCalendarImageUrl(),
difficultyNames, sectorNames);
}

private List<String> findSectorNamesById(final Long id) {
private List<SectorInfoResponseDto> findSectorNamesById(final Long id) {
return climbingGymRepository.findGymSectorNamesById(id);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.first.flash.climbing.gym.application.dto;

import com.first.flash.climbing.gym.infrastructure.dto.SectorInfoResponseDto;
import java.util.List;

public record ClimbingGymDetailResponseDto(String gymName, String mapImageUrl,
String calendarImageUrl,
List<String> difficulties,
List<String> sectors) {
List<SectorInfoResponseDto> sectors) {

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.first.flash.climbing.gym.domian;

import com.first.flash.climbing.gym.infrastructure.dto.ClimbingGymResponseDto;
import com.first.flash.climbing.gym.infrastructure.dto.SectorInfoResponseDto;
import java.util.List;
import java.util.Optional;

Expand All @@ -9,7 +11,7 @@ public interface ClimbingGymRepository {

Optional<ClimbingGym> findById(final Long id);

List<ClimbingGym> findAll();
List<ClimbingGymResponseDto> findAllWithFavorites(final List<Long> favoriteGymIds);

List<String> findGymSectorNamesById(final Long id);
List<SectorInfoResponseDto> findGymSectorNamesById(final Long id);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.first.flash.climbing.gym.infrastructure;

import com.first.flash.climbing.gym.domian.ClimbingGym;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

Expand All @@ -10,6 +9,4 @@ public interface ClimbingGymJpaRepository extends JpaRepository<ClimbingGym, Lon
ClimbingGym save(final ClimbingGym gym);

Optional<ClimbingGym> findById(final Long id);

List<ClimbingGym> findAll();
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package com.first.flash.climbing.gym.infrastructure;

import static com.first.flash.climbing.gym.domian.QClimbingGym.climbingGym;
import static com.first.flash.climbing.sector.domain.QSector.sector;

import com.first.flash.climbing.gym.infrastructure.dto.ClimbingGymResponseDto;
import com.first.flash.climbing.gym.infrastructure.dto.SectorInfoResponseDto;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand All @@ -13,12 +18,29 @@ public class ClimbingGymQueryDslRepository {

private final JPAQueryFactory jpaQueryFactory;

public List<String> findSortedSectorNamesByGymId(final Long gymId) {
return jpaQueryFactory.select(sector.sectorName.name)
public List<SectorInfoResponseDto> findSortedSectorNamesByGymId(final Long gymId) {
return jpaQueryFactory.select(
Projections.constructor(SectorInfoResponseDto.class, sector.id,
sector.sectorName.name, sector.selectedImageUrl))
.from(sector)
.where(sector.gymId.eq(gymId), sector.removalInfo.isExpired.isFalse())
.distinct()
.orderBy(sector.sectorName.name.asc())
.fetch();
}

public List<ClimbingGymResponseDto> findAllWithFavorites(final List<Long> favoriteGymIds) {
return jpaQueryFactory.select(
Projections.constructor(ClimbingGymResponseDto.class, climbingGym.id,
climbingGym.gymName, climbingGym.thumbnailUrl, climbingGym.id.in(favoriteGymIds))
)
.from(climbingGym)
.orderBy(
new CaseBuilder()
.when(climbingGym.id.in(favoriteGymIds)).then(1)
.otherwise(0).desc(),
climbingGym.gymName.asc()
)
.fetch();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.first.flash.climbing.gym.domian.ClimbingGym;
import com.first.flash.climbing.gym.domian.ClimbingGymRepository;
import com.first.flash.climbing.gym.infrastructure.dto.ClimbingGymResponseDto;
import com.first.flash.climbing.gym.infrastructure.dto.SectorInfoResponseDto;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
Expand All @@ -25,12 +27,12 @@ public Optional<ClimbingGym> findById(final Long id) {
}

@Override
public List<ClimbingGym> findAll() {
return climbingGymJpaRepository.findAll();
}
public List<ClimbingGymResponseDto> findAllWithFavorites(final List<Long> favoriteGymIds){
return climbingGymQueryDslRepository.findAllWithFavorites(favoriteGymIds);
};

@Override
public List<String> findGymSectorNamesById(final Long id) {
public List<SectorInfoResponseDto> findGymSectorNamesById(final Long id) {
return climbingGymQueryDslRepository.findSortedSectorNamesByGymId(id);
}
}
Loading
Loading