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(); } ); };