feat(app): add membership management actions to admin store
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,25 @@ export interface MemberSummary {
|
|||||||
cancelledBookings: number
|
cancelledBookings: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface UserMembership {
|
||||||
|
userId: string
|
||||||
|
membership: {
|
||||||
|
id: string
|
||||||
|
cardTypeId: string
|
||||||
|
remainingTimes: number | null
|
||||||
|
startDate: string
|
||||||
|
expireDate: string
|
||||||
|
status: string
|
||||||
|
cardType: {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
totalTimes: number | null
|
||||||
|
durationDays: number
|
||||||
|
}
|
||||||
|
} | null
|
||||||
|
}
|
||||||
|
|
||||||
export const useAdminStore = defineStore('admin', () => {
|
export const useAdminStore = defineStore('admin', () => {
|
||||||
// ── Week templates ───────────────────────────────────────────────
|
// ── Week templates ───────────────────────────────────────────────
|
||||||
const weekTemplates = ref<WeekTemplate[]>([])
|
const weekTemplates = ref<WeekTemplate[]>([])
|
||||||
@@ -125,6 +144,26 @@ export const useAdminStore = defineStore('admin', () => {
|
|||||||
return get<PaginatedData<MemberSummary>>('/admin/members', cleanParams)
|
return get<PaginatedData<MemberSummary>>('/admin/members', cleanParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getUserMembership(userId: string): Promise<UserMembership> {
|
||||||
|
return get<UserMembership>(`/admin/members/${userId}/membership`)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateUserMembership(
|
||||||
|
userId: string,
|
||||||
|
dto: {
|
||||||
|
cardTypeId: string
|
||||||
|
remainingTimes?: number | null
|
||||||
|
startDate: string
|
||||||
|
expireDate: string
|
||||||
|
},
|
||||||
|
): Promise<any> {
|
||||||
|
return put<any>(`/admin/members/${userId}/membership`, dto)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteUserMembership(userId: string): Promise<void> {
|
||||||
|
return del<void>(`/admin/members/${userId}/membership`)
|
||||||
|
}
|
||||||
|
|
||||||
// ── Time slots ───────────────────────────────────────────────────
|
// ── Time slots ───────────────────────────────────────────────────
|
||||||
async function fetchSlotsByDate(date: string): Promise<TimeSlot[]> {
|
async function fetchSlotsByDate(date: string): Promise<TimeSlot[]> {
|
||||||
return get<TimeSlot[]>('/admin/time-slots', { date })
|
return get<TimeSlot[]>('/admin/time-slots', { date })
|
||||||
@@ -191,6 +230,9 @@ export const useAdminStore = defineStore('admin', () => {
|
|||||||
fetchAdminBookings,
|
fetchAdminBookings,
|
||||||
// Members
|
// Members
|
||||||
fetchMembers,
|
fetchMembers,
|
||||||
|
getUserMembership,
|
||||||
|
updateUserMembership,
|
||||||
|
deleteUserMembership,
|
||||||
// Time slots
|
// Time slots
|
||||||
fetchSlotsByDate,
|
fetchSlotsByDate,
|
||||||
createManualSlot,
|
createManualSlot,
|
||||||
|
|||||||
Reference in New Issue
Block a user