diff --git a/novalon-manage-web/src/api/role.api.ts b/novalon-manage-web/src/api/role.api.ts new file mode 100644 index 0000000..b800eae --- /dev/null +++ b/novalon-manage-web/src/api/role.api.ts @@ -0,0 +1,80 @@ +import request from '@/utils/request' +import type { PageResponse } from './user.api' + +export interface Role { + id: number + name: string + code: string + description: string + status: 'ACTIVE' | 'INACTIVE' + permissions: Permission[] + createdAt: string + updatedAt: string +} + +export interface Permission { + id: number + name: string + code: string + resource: string + action: string +} + +export interface CreateRoleRequest { + name: string + code: string + description: string + permissions: number[] +} + +export interface UpdateRoleRequest { + name?: string + description?: string + status?: 'ACTIVE' | 'INACTIVE' + permissions?: number[] +} + +export interface RolePageRequest { + page: number + size: number + name?: string + code?: string + status?: string + sortBy?: string + sortOrder?: 'asc' | 'desc' +} + +export const roleApi = { + getAll: () => + request.get('/roles'), + + getPage: (params: RolePageRequest) => + request.get>('/roles/page', { params }), + + getById: (id: number) => + request.get(`/roles/${id}`), + + create: (data: CreateRoleRequest) => + request.post('/roles', data), + + update: (id: number, data: UpdateRoleRequest) => + request.put(`/roles/${id}`, data), + + delete: (id: number) => + request.delete(`/roles/${id}`), + + batchDelete: (ids: number[]) => + request.post('/roles/batch-delete', { ids }), + + updateStatus: (id: number, status: 'ACTIVE' | 'INACTIVE') => + request.put(`/roles/${id}/status`, { status }), + + assignPermissions: (id: number, permissionIds: number[]) => + request.post(`/roles/${id}/permissions`, { permissionIds }), + + getPermissions: (id: number) => + request.get(`/roles/${id}/permissions`), + + getAllPermissions: () => + request.get('/permissions'), +}