60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
|
|
import WebClient from "@/shared/web-client"
|
||
|
|
|
||
|
|
export interface User {
|
||
|
|
id: string
|
||
|
|
username: string
|
||
|
|
role: "admin" | "user"
|
||
|
|
createdAt: string
|
||
|
|
updatedAt: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface CreateUserRequest {
|
||
|
|
username: string
|
||
|
|
password: string
|
||
|
|
role: "admin" | "user"
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UpdateUserRequest {
|
||
|
|
username?: string
|
||
|
|
password?: string
|
||
|
|
role?: "admin" | "user"
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UsersResponse {
|
||
|
|
data: User[]
|
||
|
|
total: number
|
||
|
|
page: number
|
||
|
|
pageSize: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UsersQuery {
|
||
|
|
page?: number
|
||
|
|
pageSize?: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getUsers(query?: UsersQuery): Promise<UsersResponse> {
|
||
|
|
const params = new URLSearchParams()
|
||
|
|
if (query?.page) params.append("page", query.page.toString())
|
||
|
|
if (query?.pageSize) params.append("pageSize", query.pageSize.toString())
|
||
|
|
|
||
|
|
const queryString = params.toString()
|
||
|
|
const { data } = await WebClient.get<UsersResponse>(
|
||
|
|
`/users${queryString ? `?${queryString}` : ""}`
|
||
|
|
)
|
||
|
|
return data
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function createUser(request: CreateUserRequest): Promise<User> {
|
||
|
|
const { data } = await WebClient.post<User>("/users", request)
|
||
|
|
return data
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function updateUser(id: string, request: UpdateUserRequest): Promise<User> {
|
||
|
|
const { data } = await WebClient.put<User>(`/users/${id}`, request)
|
||
|
|
return data
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function deleteUser(id: string): Promise<void> {
|
||
|
|
await WebClient.delete<void>(`/users/${id}`)
|
||
|
|
}
|