- Introduce SUPER_ADMIN, ADMIN, CUSTOMER_SUPPORT with admin-roles helpers and useAdminRole hook - New pages: subscription transactions, system members, issues, FAQ & support, notification broadcast - Services and API paths for admin subscription-transactions, system-members, issues, faq, broadcast - Nav and quick search filtered by role; login accepts all panel roles Made-with: Cursor
66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
import apiClient from "./api/client"
|
|
|
|
/** Internal staff that operate the admin / support panel */
|
|
export interface SystemMember {
|
|
id: string
|
|
email: string
|
|
firstName: string
|
|
lastName: string
|
|
/** Panel role: SUPER_ADMIN | ADMIN | CUSTOMER_SUPPORT */
|
|
role: string
|
|
isActive: boolean
|
|
createdAt: string
|
|
updatedAt?: string
|
|
}
|
|
|
|
export interface CreateSystemMemberPayload {
|
|
email: string
|
|
firstName: string
|
|
lastName: string
|
|
password: string
|
|
role: string
|
|
}
|
|
|
|
export interface PaginatedSystemMembers {
|
|
data: SystemMember[]
|
|
total: number
|
|
page: number
|
|
limit: number
|
|
totalPages: number
|
|
}
|
|
|
|
class SystemMemberService {
|
|
async list(params?: {
|
|
page?: number
|
|
limit?: number
|
|
search?: string
|
|
}): Promise<PaginatedSystemMembers> {
|
|
const response = await apiClient.get<PaginatedSystemMembers>(
|
|
"/admin/system-members",
|
|
{ params },
|
|
)
|
|
return response.data
|
|
}
|
|
|
|
async create(data: CreateSystemMemberPayload): Promise<SystemMember> {
|
|
const response = await apiClient.post<SystemMember>(
|
|
"/admin/system-members",
|
|
data,
|
|
)
|
|
return response.data
|
|
}
|
|
|
|
async update(
|
|
id: string,
|
|
data: Partial<Pick<SystemMember, "firstName" | "lastName" | "role" | "isActive">>,
|
|
): Promise<SystemMember> {
|
|
const response = await apiClient.patch<SystemMember>(
|
|
`/admin/system-members/${id}`,
|
|
data,
|
|
)
|
|
return response.data
|
|
}
|
|
}
|
|
|
|
export const systemMemberService = new SystemMemberService()
|