1- import { getApi } from "@/app/api/config/appConfig" ;
2- import { useAuthStore } from "@/domains/shared/store/auth" ;
3- import { useInfiniteQuery , useQuery } from "@tanstack/react-query" ;
4- import { Cocktail , Sort } from "../types/types" ;
5-
6-
1+ import { getApi } from '@/app/api/config/appConfig' ;
2+ import { useAuthStore } from '@/domains/shared/store/auth' ;
3+ import { useInfiniteQuery , useQuery } from '@tanstack/react-query' ;
4+ import { Cocktail , Sort } from '../types/types' ;
75
86interface CocktailResponse {
9- data : Cocktail [ ]
7+ data : Cocktail [ ] ;
108}
119
12- interface KeepResponse {
13- data : Array < { cocktailId :number } >
10+ interface KeepResponse {
11+ data : Array < { cocktailId : number } > ;
1412}
1513
1614interface SearchFilters {
@@ -20,12 +18,10 @@ interface SearchFilters {
2018 alcoholBaseTypes : string [ ] ;
2119}
2220
23-
24- interface CocktailFilter extends SearchFilters {
25- sortBy ?:Sort
21+ interface CocktailFilter extends SearchFilters {
22+ sortBy ?: Sort ;
2623}
2724
28-
2925const fetchKeep = async ( ) : Promise < Set < number > > => {
3026 const res = await fetch ( `${ getApi } /me/bar` , {
3127 method : 'GET' ,
@@ -39,39 +35,34 @@ const fetchKeep = async (): Promise<Set<number>> => {
3935 return new Set ( myKeep . map ( ( v : { cocktailId : number } ) => v . cocktailId ) ) ;
4036} ;
4137
42-
43- const fetchRecipe = async (
38+ const fetchRecipe = async (
4439 lastId : number | null ,
4540 size : number ,
4641 sortBy ?: Sort
47- ) : Promise < Cocktail [ ] > => {
48-
49- const url = new URL ( `${ getApi } /cocktails` )
50- url . searchParams . set ( 'size' , String ( size ) )
51- if ( lastId !== null ) {
52- url . searchParams . set ( 'lastId' , String ( lastId ) ) ;
53- url . searchParams . set ( 'lastValue' , String ( lastId ) ) ;
54- }
55-
56- if ( sortBy ) {
57- url . searchParams . set ( 'sortBy' , String ( sortBy ) )
58- }
42+ ) : Promise < Cocktail [ ] > => {
43+ const url = new URL ( `${ getApi } /cocktails` ) ;
44+ url . searchParams . set ( 'size' , String ( size ) ) ;
45+ if ( lastId !== null ) {
46+ url . searchParams . set ( 'lastId' , String ( lastId ) ) ;
47+ url . searchParams . set ( 'lastValue' , String ( lastId ) ) ;
48+ }
49+
50+ if ( sortBy ) {
51+ url . searchParams . set ( 'sortBy' , String ( sortBy ) ) ;
52+ }
5953
60- const res = await fetch ( url . toString ( ) , {
61- method :'GET'
62- } )
54+ const res = await fetch ( url . toString ( ) , {
55+ method : 'GET' ,
56+ } ) ;
6357
64- if ( ! res . ok ) throw new Error ( '레시피 패치 실패' )
65-
66- const json :CocktailResponse = await res . json ( )
58+ if ( ! res . ok ) throw new Error ( '레시피 패치 실패' ) ;
6759
68- return json . data ?? [ ]
69- }
60+ const json : CocktailResponse = await res . json ( ) ;
7061
71-
62+ return json . data ?? [ ] ;
63+ } ;
7264
7365const searchCocktails = async ( filters : SearchFilters ) : Promise < Cocktail [ ] > => {
74-
7566 const body = {
7667 keyword : filters . keyword ?. trim ( ) ?? '' ,
7768 alcoholStrengths : filters . alcoholStrengths ,
@@ -84,15 +75,14 @@ const searchCocktails = async (filters: SearchFilters): Promise<Cocktail[]> => {
8475 const res = await fetch ( `${ getApi } /cocktails/search` , {
8576 method : 'POST' ,
8677 headers : { 'Content-Type' : 'application/json' } ,
87- body :JSON . stringify ( body )
88- } )
78+ body : JSON . stringify ( body ) ,
79+ } ) ;
8980
90- if ( ! res . ok ) throw new Error ( '검색 POST 실패' )
81+ if ( ! res . ok ) throw new Error ( '검색 POST 실패' ) ;
9182
92- const json :CocktailResponse = await res . json ( )
93- return json . data ?? [ ]
94- }
95-
83+ const json : CocktailResponse = await res . json ( ) ;
84+ return json . data ?? [ ] ;
85+ } ;
9686
9787const hasActiveFilters = ( filters : SearchFilters ) : boolean => {
9888 return ! ! (
@@ -103,59 +93,58 @@ const hasActiveFilters = (filters: SearchFilters): boolean => {
10393 ) ;
10494} ;
10595
96+ export const useCocktailsInfiniteQuery = ( size : number = 20 , sortBy ?: Sort ) => {
97+ const user = useAuthStore ( ( state ) => state . user ) ;
98+ return useInfiniteQuery ( {
99+ queryKey : [ 'cocktails' , 'infinite' , sortBy , size , user ?. id ] ,
100+ queryFn : async ( { pageParam } ) => {
101+ const cocktails = await fetchRecipe ( pageParam , size , sortBy ) ;
106102
107- export const useCocktailsInfiniteQuery = (
108- size : number = 20 ,
109- sortBy ?: Sort
110- ) => {
111- const user = useAuthStore ( ( state ) => state . user ) ;
112- return useInfiniteQuery ( {
113- queryKey : [ 'cocktails' , 'infinite' , sortBy , size , user ?. id ] ,
114- queryFn : async ( { pageParam } ) => {
115- const cocktails = await fetchRecipe ( pageParam , size , sortBy ) ;
116-
117- if ( user ) {
118- const keepId = await fetchKeep ( ) ;
119- return cocktails . map ( ( item ) => ( {
120- ...item ,
121- isKeep : keepId . has ( item . cocktailId ) ,
122- } ) ) ;
123- }
124-
125- return cocktails ;
126- } ,
127- getNextPageParam : ( lastpage ) => {
128- if ( lastpage . length < size ) return undefined ;
129- return lastpage [ lastpage . length - 1 ] ?. cocktailId ?? undefined ;
130- } ,
131- initialPageParam : null as number | null ,
132- } ) ;
133- }
103+ if ( user ) {
104+ const keepId = await fetchKeep ( ) ;
105+ return cocktails . map ( ( item ) => ( {
106+ ...item ,
107+ isKeep : keepId . has ( item . cocktailId ) ,
108+ } ) ) ;
109+ }
134110
111+ return cocktails ;
112+ } ,
113+ getNextPageParam : ( lastpage ) => {
114+ if ( lastpage . length < size ) return undefined ;
115+ return lastpage [ lastpage . length - 1 ] ?. cocktailId ?? undefined ;
116+ } ,
117+ initialPageParam : null as number | null ,
118+ } ) ;
119+ } ;
135120
136- export const useCocktailsSearchQuery = ( filters :SearchFilters ) => {
137- const user = useAuthStore ( state => state . user )
138- const isActive = hasActiveFilters ( filters )
121+ export const useCocktailsSearchQuery = ( filters : SearchFilters ) => {
122+ const user = useAuthStore ( ( state ) => state . user ) ;
123+ const isActive = hasActiveFilters ( filters ) ;
139124
140125 return useQuery ( {
141126 queryKey : [ 'cocktails' , 'search' , filters , user ?. id ] ,
142127 queryFn : async ( ) => {
143- const cocktails = await searchCocktails ( filters )
128+ const cocktails = await searchCocktails ( filters ) ;
144129 if ( user && cocktails . length > 0 ) {
145- const keepId = await fetchKeep ( )
130+ const keepId = await fetchKeep ( ) ;
146131 return cocktails . map ( ( item ) => ( {
147132 ...item ,
148- isKeep : keepId . has ( item . cocktailId )
149- } ) )
133+ isKeep : keepId . has ( item . cocktailId ) ,
134+ } ) ) ;
150135 }
151- return cocktails
136+ return cocktails ;
152137 } ,
153138 enabled : isActive ,
154- refetchOnMount :false ,
155- } )
156- }
139+ refetchOnMount : false ,
140+ } ) ;
141+ } ;
157142
158- export const useCocktails = ( filters : CocktailFilter , infiniteScrollSize : number = 20 , sortBy ?:Sort ) => {
143+ export const useCocktails = (
144+ filters : CocktailFilter ,
145+ infiniteScrollSize : number = 20 ,
146+ sortBy ?: Sort
147+ ) => {
159148 const isSearchMode = hasActiveFilters ( filters ) ;
160149 const infiniteQuery = useCocktailsInfiniteQuery ( infiniteScrollSize , sortBy ) ;
161150 const searchQuery = useCocktailsSearchQuery ( filters ) ;
0 commit comments