2026-07-11 08:59:20 +09:00
|
|
|
import { http } from './http'
|
|
|
|
|
import type { Member } from './auth'
|
|
|
|
|
|
|
|
|
|
export type MemberStatus = 'ACTIVE' | 'DORMANT' | 'BANNED'
|
|
|
|
|
export type MemberTier = 'FREE' | 'AD_FREE' | 'PREMIUM'
|
|
|
|
|
export type MemberRole = 'USER' | 'ADMIN'
|
|
|
|
|
|
2026-07-11 11:38:54 +09:00
|
|
|
export interface DogDetail {
|
|
|
|
|
id: number
|
|
|
|
|
name: string
|
|
|
|
|
breed: string | null
|
|
|
|
|
size: string | null
|
|
|
|
|
gender: string | null
|
|
|
|
|
neutered: boolean
|
|
|
|
|
birthDate: string | null
|
|
|
|
|
imageUrl: string | null
|
|
|
|
|
}
|
|
|
|
|
export interface CheckInDetail {
|
|
|
|
|
spotName: string
|
|
|
|
|
region: string | null
|
|
|
|
|
checkedInAt: string
|
|
|
|
|
}
|
|
|
|
|
export interface MatchDetail {
|
|
|
|
|
id: number
|
|
|
|
|
direction: string
|
|
|
|
|
counterpartDog: string
|
|
|
|
|
status: string
|
|
|
|
|
createdAt: string
|
|
|
|
|
}
|
|
|
|
|
export interface SubscriptionDetail {
|
|
|
|
|
tier: string
|
|
|
|
|
platform: string
|
|
|
|
|
startedAt: string
|
|
|
|
|
expiresAt: string
|
|
|
|
|
active: boolean
|
|
|
|
|
}
|
|
|
|
|
export interface MemberDetail {
|
|
|
|
|
member: Member
|
|
|
|
|
dogs: DogDetail[]
|
|
|
|
|
checkIns: CheckInDetail[]
|
|
|
|
|
matches: MatchDetail[]
|
|
|
|
|
subscriptions: SubscriptionDetail[]
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-11 08:59:20 +09:00
|
|
|
/** 관리자 회원관리 API — /api/admin/members (ADMIN 전용) */
|
|
|
|
|
export const adminMembersApi = {
|
|
|
|
|
list: () => http.get<Member[]>('/api/admin/members'),
|
|
|
|
|
|
2026-07-11 11:38:54 +09:00
|
|
|
detail: (id: number) => http.get<MemberDetail>(`/api/admin/members/${id}`),
|
|
|
|
|
|
2026-07-11 08:59:20 +09:00
|
|
|
updateStatus: (id: number, status: MemberStatus) =>
|
|
|
|
|
http.put<Member>(`/api/admin/members/${id}/status`, { status }),
|
|
|
|
|
|
|
|
|
|
updateTier: (id: number, tier: MemberTier) =>
|
|
|
|
|
http.put<Member>(`/api/admin/members/${id}/tier`, { tier }),
|
|
|
|
|
|
|
|
|
|
updateRole: (id: number, role: MemberRole) =>
|
|
|
|
|
http.put<Member>(`/api/admin/members/${id}/role`, { role }),
|
|
|
|
|
|
|
|
|
|
remove: (id: number) => http.del<void>(`/api/admin/members/${id}`),
|
|
|
|
|
}
|