Files
user-system/frontend/admin/src/services/permissions.ts

112 lines
2.6 KiB
TypeScript
Raw Normal View History

/**
*
*
* API
*/
import { get, post, put, del } from '@/lib/http/client'
import type {
Permission,
CreatePermissionRequest,
UpdatePermissionRequest,
PermissionType,
} from '@/types/permission'
type RawPermissionType = 0 | 1 | 2
interface RawPermission extends Omit<Permission, 'type' | 'children'> {
type: RawPermissionType
children?: RawPermission[]
}
function normalizePermissionType(type: RawPermissionType): PermissionType {
switch (type) {
case 0:
return 'menu'
case 1:
return 'button'
case 2:
return 'api'
default:
return 'api'
}
}
function serializePermissionType(type: PermissionType): RawPermissionType {
switch (type) {
case 'menu':
return 0
case 'button':
return 1
case 'api':
return 2
}
}
function normalizePermission(permission: RawPermission): Permission {
return {
...permission,
type: normalizePermissionType(permission.type),
children: permission.children?.map(normalizePermission),
}
}
/**
*
* GET /api/v1/permissions/tree
*/
export function getPermissionTree(): Promise<Permission[]> {
return get<RawPermission[]>('/permissions/tree').then((permissions) => permissions.map(normalizePermission))
}
/**
*
* GET /api/v1/permissions
*/
export function listPermissions(): Promise<Permission[]> {
return get<RawPermission[]>('/permissions').then((permissions) => permissions.map(normalizePermission))
}
/**
*
* GET /api/v1/permissions/:id
*/
export function getPermission(id: number): Promise<Permission> {
return get<RawPermission>(`/permissions/${id}`).then(normalizePermission)
}
/**
*
* POST /api/v1/permissions
*/
export function createPermission(data: CreatePermissionRequest): Promise<Permission> {
return post<RawPermission>('/permissions', {
...data,
type: serializePermissionType(data.type),
}).then(normalizePermission)
}
/**
*
* PUT /api/v1/permissions/:id
*/
export function updatePermission(id: number, data: UpdatePermissionRequest): Promise<Permission> {
return put<RawPermission>(`/permissions/${id}`, data).then(normalizePermission)
}
/**
*
* DELETE /api/v1/permissions/:id
*/
export function deletePermission(id: number): Promise<void> {
return del<void>(`/permissions/${id}`)
}
/**
*
* PUT /api/v1/permissions/:id/status
*/
export function updatePermissionStatus(id: number, status: 0 | 1): Promise<void> {
return put<void>(`/permissions/${id}/status`, { status })
}