diff --git a/src/api/service/user-service/index.ts b/src/api/service/user-service/index.ts index 129c4f8b..be48952e 100644 --- a/src/api/service/user-service/index.ts +++ b/src/api/service/user-service/index.ts @@ -1,20 +1,46 @@ import { api } from '@/api/core'; -import { Follow, GetUserPayload, UpdateMePayload, User } from '@/types/service/user'; +import { + FollowParams, + GetUserParams, + UpdateMePayload, + UpdateMyImagePayload, + UpdateMyNotiParams, + User, +} from '@/types/service/user'; export const userServiceRemote = () => ({ - // 1. 사용자 단건 조회 - getUser: async (payload: GetUserPayload) => api.get(`/users/${payload.userId}`), - // 2. 프로필 편집 - updateMe: async (payload: UpdateMePayload) => api.patch('/users', payload), + updateMe: async (payload: UpdateMePayload) => { + return api.patch('/users', payload); + }, - // 3. 회원탈퇴 - deleteMe: async () => api.delete(`/users`), - // 4. 사용자 프로필 이미지 변경 + // 3. 프로필 이미지 편집 + updateMyImage: async (payload: UpdateMyImagePayload) => { + return api.patch(`/users/profile-image`, payload); + }, + + // 4. 알림 설정 변경 + updatMyNotification: async (payload: UpdateMyNotiParams) => { + return api.patch(`/users/notification/${payload.isNotificationEnabled}`); + }, + + // 5. 사용자 단건 조회 + getUser: async (payload: GetUserParams) => { + return api.get(`/users/${payload.userId}`); + }, - // 5. 사용자 팔로우 - followUser: async (payload: Follow) => api.post(`/follows`, payload), + // 1. 사용자 팔로우 + followUser: async (payload: FollowParams) => { + return api.post(`/follows/${payload.followNickname}`); + }, // 6. 사용자 언팔로우 - unfollowUser: async (payload: Follow) => api.delete(`/follows/${payload.followeeId}`), + unfollowUser: async (payload: FollowParams) => { + return api.delete(`/follows/${payload.followNickname}`); + }, + + // 7. 회원탈퇴 + deleteMe: async () => api.delete(`/users`), + + // 8. 사용자 프로필 이미지 변경 }); diff --git a/src/hooks/use-user/use-user-follow/index.ts b/src/hooks/use-user/use-user-follow/index.ts index 63007308..037a2384 100644 --- a/src/hooks/use-user/use-user-follow/index.ts +++ b/src/hooks/use-user/use-user-follow/index.ts @@ -2,14 +2,15 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { API } from '@/api'; import { userKeys } from '@/lib/query-key/query-key-user'; -import { Follow } from '@/types/service/user'; +import { FollowParams } from '@/types/service/user'; -export const useFollowUser = (payload: Follow) => { +export const useFollowUser = (payload: FollowParams) => { const queryClient = useQueryClient(); const query = useMutation({ mutationFn: () => API.userService.followUser(payload), onSuccess: (_data, _variables, _context) => { - queryClient.invalidateQueries({ queryKey: userKeys.item(payload.followeeId) }); + // todo: GetUser는 ID로 호출, follow는 nickname으로 진행 => querykey 타입 불일치로 인한 전체 querykey 삭제 적용 (임시) + queryClient.invalidateQueries({ queryKey: userKeys.all }); console.log('요청 성공'); }, onError: () => { diff --git a/src/hooks/use-user/use-user-get/index.ts b/src/hooks/use-user/use-user-get/index.ts index c7c3b5d5..125908aa 100644 --- a/src/hooks/use-user/use-user-get/index.ts +++ b/src/hooks/use-user/use-user-get/index.ts @@ -2,9 +2,9 @@ import { useQuery } from '@tanstack/react-query'; import { API } from '@/api'; import { userKeys } from '@/lib/query-key/query-key-user'; -import { GetUserPayload } from '@/types/service/user'; +import { GetUserParams } from '@/types/service/user'; -export const useGetUser = ({ userId }: GetUserPayload) => { +export const useGetUser = ({ userId }: GetUserParams) => { const query = useQuery({ queryKey: userKeys.item(userId), queryFn: () => API.userService.getUser({ userId }), diff --git a/src/hooks/use-user/use-user-unfollow/index.ts b/src/hooks/use-user/use-user-unfollow/index.ts index b41f8c8e..0f349b9d 100644 --- a/src/hooks/use-user/use-user-unfollow/index.ts +++ b/src/hooks/use-user/use-user-unfollow/index.ts @@ -2,14 +2,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { API } from '@/api'; import { userKeys } from '@/lib/query-key/query-key-user'; -import { Follow } from '@/types/service/user'; +import { FollowParams } from '@/types/service/user'; -export const useUnfollowUser = (payload: Follow) => { +export const useUnfollowUser = (payload: FollowParams) => { const queryClient = useQueryClient(); const query = useMutation({ mutationFn: () => API.userService.unfollowUser(payload), onSuccess: (_data, _variables, _context) => { - queryClient.invalidateQueries({ queryKey: userKeys.item(payload.followeeId) }); + queryClient.invalidateQueries({ queryKey: userKeys.all }); console.log('요청 성공'); }, onError: () => { diff --git a/src/types/service/user.ts b/src/types/service/user.ts index 15f8e783..8b73a9b4 100644 --- a/src/types/service/user.ts +++ b/src/types/service/user.ts @@ -14,21 +14,24 @@ export interface User { isFollowing: boolean; } -export interface GetUserPayload { +export interface GetUserParams { userId: number; } -export type GetUserResponse = User; - export interface UpdateMePayload { nickName?: string; - profileImage?: string; mbti?: string; profileMessage?: string; } -export type UpdateMeResponse = GetUserResponse; +export interface UpdateMyImagePayload { + file: File; +} + +export interface UpdateMyNotiParams { + isNotificationEnabled: boolean; +} -export interface Follow { - followeeId: number; +export interface FollowParams { + followNickname: string; }