Initial commit
This commit is contained in:
122
src/services/roleManagerService.ts
Normal file
122
src/services/roleManagerService.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { fetchWrapper } from '@KTXC/utils/helpers/fetch-wrapper';
|
||||
import type { ApiResponse, Role } from '@/types';
|
||||
|
||||
/**
|
||||
* Role Manager Service
|
||||
* API client for role management operations
|
||||
*/
|
||||
class RoleManagerService {
|
||||
private baseUrl = '/user/roles';
|
||||
private transactionCounter = 0;
|
||||
|
||||
private getTransaction(): string {
|
||||
return `txn-${Date.now()}-${++this.transactionCounter}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* List all roles
|
||||
*/
|
||||
async listRoles(): Promise<Role[]> {
|
||||
const response = await fetchWrapper.post<ApiResponse<Role[]>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'role.list',
|
||||
data: {}
|
||||
},
|
||||
{ skipLogoutOnError: true }
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch single role
|
||||
*/
|
||||
async fetchRole(rid: string): Promise<Role> {
|
||||
const response = await fetchWrapper.post<ApiResponse<Role>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'role.fetch',
|
||||
data: { rid }
|
||||
}
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new role
|
||||
*/
|
||||
async createRole(roleData: {
|
||||
label: string;
|
||||
description?: string;
|
||||
permissions?: string[];
|
||||
}): Promise<Role> {
|
||||
const response = await fetchWrapper.post<ApiResponse<Role>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'role.create',
|
||||
data: roleData
|
||||
}
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update role
|
||||
*/
|
||||
async updateRole(rid: string, updates: {
|
||||
label?: string;
|
||||
description?: string;
|
||||
permissions?: string[];
|
||||
}): Promise<boolean> {
|
||||
const response = await fetchWrapper.post<ApiResponse<boolean>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'role.update',
|
||||
data: { rid, ...updates }
|
||||
}
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete role
|
||||
*/
|
||||
async deleteRole(rid: string): Promise<boolean> {
|
||||
const response = await fetchWrapper.post<ApiResponse<boolean>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'role.delete',
|
||||
data: { rid }
|
||||
}
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available permissions (grouped with metadata)
|
||||
*/
|
||||
async listPermissions(): Promise<import('@/types').PermissionGroup> {
|
||||
const response = await fetchWrapper.post<ApiResponse<import('@/types').PermissionGroup>>(
|
||||
`${this.baseUrl}/v1`,
|
||||
{
|
||||
version: 1,
|
||||
transaction: this.getTransaction(),
|
||||
operation: 'permissions.list',
|
||||
data: {}
|
||||
}
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const roleManagerService = new RoleManagerService();
|
||||
Reference in New Issue
Block a user