core/identity-gateway/src/modules/roles/role.controller.ts
Tiago Yamamoto ebb405c4e4 feat: Update dashboard and identity-gateway infrastructure
- Add Tenants module to Identity Gateway
- Update Dashboard Auth context and components
- Refactor token service and user/role controllers
- Add Quadlet container definitions for dev environment
2025-12-31 17:41:04 -03:00

94 lines
3 KiB
TypeScript

import { FastifyInstance } from "fastify";
import { RoleService } from "./role.service";
import { authGuard } from "../../core/auth.guard";
import { TokenService } from "../../core/token.service";
export const registerRoleRoutes = (
app: FastifyInstance,
roleService: RoleService,
tokenService: TokenService
) => {
// List all roles
app.get(
"/roles",
{ preHandler: authGuard(tokenService) },
async () => {
return roleService.listRoles();
}
);
// Get role by ID
app.get(
"/roles/:id",
{ preHandler: authGuard(tokenService) },
async (request) => {
const { id } = request.params as { id: string };
return roleService.findById(id);
}
);
// Create role
app.post(
"/roles",
{ preHandler: authGuard(tokenService) },
async (request, reply) => {
const { name, description } = request.body as { name: string; description?: string };
if (!name) {
reply.code(400).send({ message: "Name is required" });
return;
}
const role = await roleService.createRole(name, description);
reply.code(201).send(role);
}
);
// Update role
app.put(
"/roles/:id",
{ preHandler: authGuard(tokenService) },
async (request) => {
const { id } = request.params as { id: string };
const { name, description } = request.body as { name: string; description?: string };
return roleService.updateRole(id, name, description);
}
);
// Delete role
app.delete(
"/roles/:id",
{ preHandler: authGuard(tokenService) },
async (request, reply) => {
const { id } = request.params as { id: string };
await roleService.deleteRole(id);
reply.code(204).send();
}
);
// Assign role to user
app.post(
"/roles/:roleId/users/:userId",
{ preHandler: authGuard(tokenService) },
async (request, reply) => {
const { roleId, userId } = request.params as { roleId: string; userId: string };
const { tenantId } = request.body as { tenantId: string };
if (!tenantId) {
reply.code(400).send({ message: "tenantId is required" });
return;
}
await roleService.assignRoleToUser(userId, tenantId, roleId);
reply.code(201).send({ success: true });
}
);
// Remove role from user
app.delete(
"/roles/:roleId/users/:userId",
{ preHandler: authGuard(tokenService) },
async (request, reply) => {
const { roleId, userId } = request.params as { roleId: string; userId: string };
const { tenantId } = request.body as { tenantId: string };
await roleService.removeRoleFromUser(userId, tenantId, roleId);
reply.code(204).send();
}
);
};