-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlikeSongQuery.ts
More file actions
96 lines (87 loc) · 3.08 KB
/
likeSongQuery.ts
File metadata and controls
96 lines (87 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { deleteLikeSongArray, getLikeSong } from '@/lib/api/likeSong';
import { postTotalStatArray } from '@/lib/api/totalStat';
import { PersonalSong } from '@/types/song';
// 🎵 좋아요 한 곡 리스트 가져오기
export function useLikeSongQuery() {
return useQuery({
queryKey: ['likeSong'],
queryFn: async () => {
const response = await getLikeSong();
if (!response.success) {
return [];
}
return response.data || [];
},
staleTime: 1000 * 60 * 5,
gcTime: 1000 * 60 * 5,
});
}
// 🎵 곡 좋아요 추가 - useToggleLikeMutation만 사용
// export function usePostLikeSongMutation() {
// const queryClient = useQueryClient();
// return useMutation({
// mutationFn: (songId: string) =>
// Promise.all([
// postLikeSong({ songId }),
// postTotalStat({ songId, countType: 'like_count', isMinus: false }),
// ]),
// onSuccess: () => {
// queryClient.invalidateQueries({ queryKey: ['likeSong'] });
// },
// });
// }
// 🎵 곡 좋아요 취소 - useDeleteLikeSongArrayMutation만 사용
// export function useDeleteLikeSongMutation() {
// const queryClient = useQueryClient();
// return useMutation({
// mutationFn: (songId: string) =>
// Promise.all([
// deleteLikeSong({ songId }),
// postTotalStat({ songId, countType: 'like_count', isMinus: true }),
// ]),
// onMutate: async (songId: string) => {
// queryClient.cancelQueries({ queryKey: ['likeSong'] });
// const prev = queryClient.getQueryData(['likeSong']);
// queryClient.setQueryData(['likeSong'], (old: PersonalSong[]) =>
// old.filter(song => song.song_id !== songId),
// );
// return { prev };
// },
// onError: (error, songId, context) => {
// console.error('error', error);
// alert(error.message ?? 'POST 실패');
// queryClient.setQueryData(['likeSong'], context?.prev);
// },
// onSettled: () => {
// queryClient.invalidateQueries({ queryKey: ['likeSong'] });
// },
// });
// }
// 🎵 여러 곡 좋아요 취소
export function useDeleteLikeSongArrayMutation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (songIds: string[]) =>
Promise.all([
deleteLikeSongArray({ songIds }),
postTotalStatArray({ songIds, countType: 'like_count', isMinus: true }),
]),
onMutate: async (songIds: string[]) => {
queryClient.cancelQueries({ queryKey: ['likeSong'] });
const prev = queryClient.getQueryData(['likeSong']);
queryClient.setQueryData(['likeSong'], (old: PersonalSong[]) =>
old.filter(song => !songIds.includes(song.song_id)),
);
return { prev };
},
onError: (error, songIds, context) => {
console.error('error', error);
alert(error.message ?? 'POST 실패');
queryClient.setQueryData(['likeSong'], context?.prev);
},
onSettled: () => {
queryClient.invalidateQueries({ queryKey: ['likeSong'] });
},
});
}