Skip to content

Commit 2f9a838

Browse files
authored
Merge pull request #317 from JEOLLOGA/feat/#316/blog-review-v2
[FEAT] 템플스테이 상세 블로그 리뷰 API V2 전환
2 parents 2f68de3 + 1fad939 commit 2f9a838

File tree

13 files changed

+61
-32
lines changed

13 files changed

+61
-32
lines changed

next.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const nextConfig: NextConfig = {
77
reactStrictMode: true,
88

99
images: {
10-
domains: ['noms.templestay.com', 'www.templestay.com'],
10+
domains: ['noms.templestay.com', 'www.templestay.com', 'blogthumb.pstatic.net'],
1111
},
1212

1313
webpack(config) {

src/apis/templeInfo/axios.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ export const getTempleImages = async (id: number) => {
1010
return res.data;
1111
};
1212

13-
export const getTempleReviews = async (templestayId: string, page: number) => {
14-
const res = await instance.get('/public/templestay/reviews', {
15-
params: { templestayId, page },
13+
export const getTempleReviews = async (id: number, page: number) => {
14+
const res = await instance.get(`/v2/api/templestay/${id}/reviews`, {
15+
params: { page },
1616
});
1717
return res.data;
1818
};

src/apis/templeInfo/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ export const useGetTempleImages = (id: number) => {
2424
return { data, isLoading, isError };
2525
};
2626

27-
export const useGetTempleReviews = (templestayId: string, page: number) => {
28-
const { data, isLoading, isError } = useQuery<ReviewsResponse>({
29-
queryKey: ['reviews', templestayId, page],
30-
queryFn: () => getTempleReviews(templestayId, page),
27+
export const useGetTempleReviews = (id: number, page: number) => {
28+
const { data, isLoading, isError } = useQuery({
29+
queryKey: ['reviews', id, page],
30+
queryFn: () => getTempleReviews(id, page),
31+
select: (res: ApiResponse<ReviewsResponse>) => res.data,
3132
});
3233

3334
return { data, isLoading, isError };

src/apis/templeInfo/prefetch.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { queryOptions } from '@tanstack/react-query';
22

3+
import { ApiResponse } from '@apis/response';
34
import { getTempleImages, getTempleReviews, getTempleDetails } from './axios';
45
import { TemplestayImgsResponse, ReviewsResponse, TempleDetail } from './type';
56

@@ -15,8 +16,9 @@ export const templeImagesQueryOptions = (id: number) =>
1516
queryFn: () => getTempleImages(id),
1617
});
1718

18-
export const templeReviewsQueryOptions = (templestayId: string, page: number) =>
19-
queryOptions<ReviewsResponse>({
20-
queryKey: ['reviews', templestayId, page],
21-
queryFn: () => getTempleReviews(templestayId, page),
19+
export const templeReviewsQueryOptions = (id: number, page: number) =>
20+
queryOptions({
21+
queryKey: ['reviews', id, page],
22+
queryFn: () => getTempleReviews(id, page),
23+
select: (res: ApiResponse<ReviewsResponse>) => res.data,
2224
});

src/apis/templeInfo/type.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ export interface Review {
3333
}
3434

3535
export interface ReviewsResponse {
36-
templestayId: string;
36+
id: number;
37+
reviewCount: number;
3738
page: number;
3839
pageSize: number;
3940
totalPages: number;
40-
reviewCount: number;
4141
reviews?: Review[];
4242
}

src/app/detail/[templestayId]/TempleDetailClient.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ const TempleDetailClient = ({ id }: TempleDetailClientProps) => {
144144
</StickyTapBar>
145145
</div>
146146
<div className={styles.templeDetailMiddle}>
147-
<TempleReview />
147+
<TempleReview templeId={id} />
148148
<TempleSchedule schedule={data.schedule} />
149149
<TemplePrice templestayPrice={data.price} />
150150
<TempleInfo introduction={data.introduction} />

src/app/detail/[templestayId]/blog/BlogReviewClient.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useState, useEffect } from 'react';
1111
import * as styles from './style.css';
1212

1313
interface BlogReviewClientProps {
14-
templestayId: string;
14+
templestayId: number;
1515
initialPage: number;
1616
}
1717

src/app/detail/[templestayId]/blog/page.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,21 @@ const BlogReviewPage = async ({
1111
searchParams: Promise<{ page?: string }>;
1212
}) => {
1313
const { templestayId } = await params;
14+
const id = Number(templestayId);
1415
const { page } = await searchParams;
1516
const currentPage = parseInt(page || '1', 10);
1617

1718
const queryClient = new QueryClient();
1819

19-
const cachedData = queryClient.getQueryData(['reviews', templestayId, currentPage]);
20+
const cachedData = queryClient.getQueryData(['reviews', id, currentPage]);
2021

2122
if (!cachedData) {
22-
await queryClient.prefetchQuery(templeReviewsQueryOptions(templestayId, currentPage));
23+
await queryClient.prefetchQuery(templeReviewsQueryOptions(id, currentPage));
2324
}
2425

2526
return (
2627
<HydrationBoundary state={dehydrate(queryClient)}>
27-
<BlogReviewClient templestayId={templestayId} initialPage={currentPage} />
28+
<BlogReviewClient templestayId={id} initialPage={currentPage} />
2829
</HydrationBoundary>
2930
);
3031
};

src/app/detail/[templestayId]/page.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@ const TempleDetailPage = async ({ params }: { params: Promise<{ templestayId: st
1313
if (!Number.isInteger(id) || id <= 0) {
1414
throw new Error(`Invalid templestay ID: ${templestayId}`);
1515
}
16-
const stringId = templestayId;
1716
const queryClient = new QueryClient();
1817

1918
await Promise.all([
2019
queryClient.prefetchQuery(templeDetailQueryOptions(id)),
2120
queryClient.prefetchQuery(templeImagesQueryOptions(id)),
22-
queryClient.prefetchQuery(templeReviewsQueryOptions(stringId, 1)),
21+
queryClient.prefetchQuery(templeReviewsQueryOptions(id, 1)),
2322
]);
2423

2524
return (

src/components/card/reviewCard/reviewCard/ReviewCard.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const emptyMediumImage = '/assets/images/img_gray_light_leaf_medium.png';
22
const emptySmallImage = '/assets/images/img_gray_light_leaf_small.png';
33

4+
import Image from 'next/image';
5+
46
import * as styles from './reviewCard.css';
57
import CardInfo from '../cardInfo/CardInfo';
68

@@ -27,14 +29,26 @@ const ReviewCard = ({
2729
window.open(reviewLink, '_blank');
2830
};
2931
const emptyImage = size === 'small' ? emptyMediumImage : emptySmallImage;
32+
const dimensions = size === 'small' ? { width: 240, height: 115 } : { width: 335, height: 118 };
3033

3134
return (
3235
<button className={styles.cardContainer({ size })} onClick={handleButtonClick}>
3336
{blogImage ? (
34-
<img className={styles.cardImage({ size })} src={blogImage} alt="thumbnail" />
37+
<Image
38+
className={styles.cardImage({ size })}
39+
src={blogImage}
40+
alt="thumbnail"
41+
width={dimensions.width}
42+
height={dimensions.height}
43+
/>
3544
) : (
3645
<div className={styles.emptyImage({ size })}>
37-
<img src={emptyImage} alt="빈 이미지"></img>
46+
<Image
47+
src={emptyImage}
48+
alt="빈 이미지"
49+
width={dimensions.width}
50+
height={dimensions.height}
51+
/>
3852
</div>
3953
)}
4054
<div className={styles.cardContent({ size })}>

0 commit comments

Comments
 (0)