Skip to content

Commit 6f8603c

Browse files
committed
feat: 리뷰 작성 시 필요한 태그 조회
1 parent 601446a commit 6f8603c

File tree

22 files changed

+192
-75
lines changed

22 files changed

+192
-75
lines changed

perfume-api/src/docs/asciidoc/index.adoc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,14 @@ include::{snippets}/get-reviews/http-request.adoc[]
347347
include::{snippets}/get-reviews/http-response.adoc[]
348348
include::{snippets}/get-reviews/response-fields.adoc[]
349349

350+
== 리뷰 작성을 위한 태그 조회
351+
=== 요청
352+
include::{snippets}/get-all-tags/http-request.adoc[]
353+
354+
=== 응답
355+
include::{snippets}/get-all-tags/http-response.adoc[]
356+
include::{snippets}/get-all-tags/response-fields.adoc[]
357+
350358
== 리뷰 생성
351359
=== 요청
352360
include::{snippets}/create-review/http-request.adoc[]

perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/ReviewController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.perfume.api.review.adapter.in.http.dto.GetReviewsRequestDto;
1616
import io.perfume.api.review.adapter.in.http.dto.GetReviewsResponseDto;
1717
import io.perfume.api.review.adapter.in.http.dto.ReviewLikeResponseDto;
18+
import io.perfume.api.review.adapter.in.http.dto.TagResponseDto;
1819
import io.perfume.api.review.application.facade.ReviewDetailFacadeService;
1920
import io.perfume.api.review.application.in.comment.CreateReviewCommentUseCase;
2021
import io.perfume.api.review.application.in.comment.DeleteReviewCommentUseCase;
@@ -23,7 +24,9 @@
2324
import io.perfume.api.review.application.in.review.CreateReviewUseCase;
2425
import io.perfume.api.review.application.in.review.DeleteReviewUseCase;
2526
import io.perfume.api.review.application.in.review.GetReviewInViewUseCase;
27+
import io.perfume.api.review.application.in.tag.GetTagUseCase;
2628
import java.time.LocalDateTime;
29+
import java.util.List;
2730
import lombok.RequiredArgsConstructor;
2831
import org.springframework.http.HttpStatus;
2932
import org.springframework.http.ResponseEntity;
@@ -44,6 +47,7 @@
4447
@RequiredArgsConstructor
4548
public class ReviewController {
4649

50+
private final GetTagUseCase getTagUseCase;
4751
private final CreateReviewUseCase createReviewUseCase;
4852
private final DeleteReviewUseCase deleteReviewUseCase;
4953
private final ReviewDetailFacadeService reviewDetailFacadeService;
@@ -70,6 +74,11 @@ public ResponseEntity<CustomPage<GetReviewsResponseDto>> getReviews(
7074
return ResponseEntity.ok(new CustomPage<>(responseItems, results));
7175
}
7276

77+
@GetMapping("/tags")
78+
public List<TagResponseDto> getAllTags() {
79+
return getTagUseCase.getAll().stream().map(TagResponseDto::from).toList();
80+
}
81+
7382
@PreAuthorize("isAuthenticated()")
7483
@PostMapping
7584
public CreateReviewResponseDto createReview(
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.perfume.api.review.adapter.in.http.dto;
2+
3+
import io.perfume.api.review.application.in.dto.TagResult;
4+
5+
public record TagResponseDto(Long id, String name) {
6+
public static TagResponseDto from(TagResult tagResult) {
7+
return new TagResponseDto(tagResult.id(), tagResult.name());
8+
}
9+
}

perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/tag/ReviewTagEntity.java renamed to perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/reviewtag/ReviewTagEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.perfume.api.review.adapter.out.persistence.repository.tag;
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
22

33
import io.perfume.api.base.BaseTimeEntity;
44
import jakarta.persistence.EmbeddedId;

perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/tag/ReviewTagId.java renamed to perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/reviewtag/ReviewTagId.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.perfume.api.review.adapter.out.persistence.repository.tag;
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
22

33
import jakarta.persistence.Column;
44
import jakarta.persistence.Embeddable;

perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/tag/ReviewTagJpaRepository.java renamed to perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/reviewtag/ReviewTagJpaRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.perfume.api.review.adapter.out.persistence.repository.tag;
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
22

33
import org.springframework.data.repository.CrudRepository;
44

perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/tag/ReviewTagMapper.java renamed to perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/reviewtag/ReviewTagMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.perfume.api.review.adapter.out.persistence.repository.tag;
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
22

33
import io.perfume.api.review.domain.ReviewTag;
44
import jakarta.validation.constraints.NotNull;

perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/tag/TagPersistenceAdapter.java renamed to perfume-api/src/main/java/io/perfume/api/review/adapter/out/persistence/repository/reviewtag/ReviewTagPersistenceAdapter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
package io.perfume.api.review.adapter.out.persistence.repository.tag;
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
22

33
import io.perfume.api.base.PersistenceAdapter;
4-
import io.perfume.api.review.application.out.tag.TagRepository;
4+
import io.perfume.api.review.application.out.tag.ReviewTagRepository;
55
import io.perfume.api.review.domain.ReviewTag;
66
import java.util.List;
77
import java.util.stream.StreamSupport;
88

99
@PersistenceAdapter
10-
public class TagPersistenceAdapter implements TagRepository {
10+
public class ReviewTagPersistenceAdapter implements ReviewTagRepository {
1111

1212
private final ReviewTagJpaRepository reviewTagRepository;
1313

1414
private final ReviewTagMapper reviewTagMapper;
1515

16-
public TagPersistenceAdapter(
16+
public ReviewTagPersistenceAdapter(
1717
ReviewTagJpaRepository reviewTagRepository, ReviewTagMapper reviewTagMapper) {
1818
this.reviewTagRepository = reviewTagRepository;
1919
this.reviewTagMapper = reviewTagMapper;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.perfume.api.review.adapter.out.persistence.repository.reviewtag;
2+
3+
import static io.perfume.api.review.adapter.out.persistence.repository.reviewtag.QReviewTagEntity.reviewTagEntity;
4+
5+
import com.querydsl.jpa.impl.JPAQueryFactory;
6+
import io.perfume.api.base.PersistenceAdapter;
7+
import io.perfume.api.review.application.out.tag.ReviewTagQueryRepository;
8+
import io.perfume.api.review.domain.ReviewTag;
9+
import java.util.List;
10+
import lombok.RequiredArgsConstructor;
11+
12+
@PersistenceAdapter
13+
@RequiredArgsConstructor
14+
public class ReviewTagQueryPersistenceAdapter implements ReviewTagQueryRepository {
15+
16+
private final ReviewTagMapper reviewTagMapper;
17+
18+
private final JPAQueryFactory jpaQueryFactory;
19+
20+
@Override
21+
public List<ReviewTag> findReviewTags(Long reviewId) {
22+
return jpaQueryFactory
23+
.selectFrom(reviewTagEntity)
24+
.where(reviewTagEntity.id.reviewId.eq(reviewId))
25+
.fetch()
26+
.stream()
27+
.map(reviewTagMapper::toDomain)
28+
.toList();
29+
}
30+
31+
@Override
32+
public List<ReviewTag> findReviewsTags(List<Long> reviewIds) {
33+
return jpaQueryFactory
34+
.selectFrom(reviewTagEntity)
35+
.where(reviewTagEntity.id.reviewId.in(reviewIds))
36+
.fetch()
37+
.stream()
38+
.map(reviewTagMapper::toDomain)
39+
.toList();
40+
}
41+
}
Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,24 @@
11
package io.perfume.api.review.adapter.out.persistence.repository.tag;
22

3-
import static io.perfume.api.review.adapter.out.persistence.repository.tag.QReviewTagEntity.reviewTagEntity;
43
import static io.perfume.api.review.adapter.out.persistence.repository.tag.QTagEntity.tagEntity;
54

65
import com.querydsl.jpa.impl.JPAQueryFactory;
76
import io.perfume.api.base.PersistenceAdapter;
87
import io.perfume.api.review.application.out.tag.TagQueryRepository;
9-
import io.perfume.api.review.domain.ReviewTag;
108
import io.perfume.api.review.domain.Tag;
119
import java.util.List;
10+
import lombok.RequiredArgsConstructor;
1211

12+
@RequiredArgsConstructor
1313
@PersistenceAdapter
1414
public class TagQueryPersistenceAdapter implements TagQueryRepository {
1515

16-
private final TagMapper tagMapper;
17-
18-
private final ReviewTagMapper reviewTagMapper;
19-
2016
private final JPAQueryFactory jpaQueryFactory;
17+
private final TagMapper tagMapper;
2118

22-
public TagQueryPersistenceAdapter(
23-
TagMapper tagMapper, ReviewTagMapper reviewTagMapper, JPAQueryFactory jpaQueryFactory) {
24-
this.tagMapper = tagMapper;
25-
this.jpaQueryFactory = jpaQueryFactory;
26-
this.reviewTagMapper = reviewTagMapper;
19+
@Override
20+
public List<Tag> findAll() {
21+
return jpaQueryFactory.selectFrom(tagEntity).fetch().stream().map(tagMapper::toDomain).toList();
2722
}
2823

2924
@Override
@@ -32,26 +27,4 @@ public List<Tag> findByIds(List<Long> ids) {
3227
.map(tagMapper::toDomain)
3328
.toList();
3429
}
35-
36-
@Override
37-
public List<ReviewTag> findReviewTags(Long reviewId) {
38-
return jpaQueryFactory
39-
.selectFrom(reviewTagEntity)
40-
.where(reviewTagEntity.id.reviewId.eq(reviewId))
41-
.fetch()
42-
.stream()
43-
.map(reviewTagMapper::toDomain)
44-
.toList();
45-
}
46-
47-
@Override
48-
public List<ReviewTag> findReviewsTags(List<Long> reviewIds) {
49-
return jpaQueryFactory
50-
.selectFrom(reviewTagEntity)
51-
.where(reviewTagEntity.id.reviewId.in(reviewIds))
52-
.fetch()
53-
.stream()
54-
.map(reviewTagMapper::toDomain)
55-
.toList();
56-
}
5730
}

0 commit comments

Comments
 (0)