Merge pull request #590 from CREDO23/feat/add-jotai-tanstack-rbac

[Feat] RBAC | Add jotai & tanstack
This commit is contained in:
Rohan Verma 2025-12-16 22:45:46 -08:00 committed by GitHub
commit 3c3527d498
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 591 additions and 210 deletions

View file

@ -0,0 +1,10 @@
import { getPermissionsResponse } from "@/contracts/types/permissions.types";
import { baseApiService } from "./base-api.service";
class PermissionsApiService {
getPermissions = async () => {
return baseApiService.get(`/api/v1/permissions`, getPermissionsResponse);
};
}
export const permissionsApiService = new PermissionsApiService();

View file

@ -0,0 +1,109 @@
import {
type CreateRoleRequest,
createRoleRequest,
createRoleResponse,
type DeleteRoleRequest,
deleteRoleRequest,
deleteRoleResponse,
type GetRoleByIdRequest,
getRoleByIdRequest,
getRoleByIdResponse,
type GetRolesRequest,
getRolesRequest,
getRolesResponse,
type UpdateRoleRequest,
updateRoleRequest,
updateRoleResponse,
} from "@/contracts/types/roles.types";
import { ValidationError } from "../error";
import { baseApiService } from "./base-api.service";
class RolesApiService {
createRole = async (request: CreateRoleRequest) => {
const parsedRequest = createRoleRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.post(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/roles`,
createRoleResponse,
{
body: parsedRequest.data.data,
},
);
};
getRoles = async (request: GetRolesRequest) => {
const parsedRequest = getRolesRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/roles`,
getRolesResponse,
);
};
getRoleById = async (request: GetRoleByIdRequest) => {
const parsedRequest = getRoleByIdRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/roles/${parsedRequest.data.role_id}`,
getRoleByIdResponse,
);
};
updateRole = async (request: UpdateRoleRequest) => {
const parsedRequest = updateRoleRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.put(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/roles/${parsedRequest.data.role_id}`,
updateRoleResponse,
{
body: parsedRequest.data.data,
},
);
};
deleteRole = async (request: DeleteRoleRequest) => {
const parsedRequest = deleteRoleRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.delete(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/roles/${parsedRequest.data.role_id}`,
deleteRoleResponse,
);
};
}
export const rolesApiService = new RolesApiService();