Advertisement
AdzeB

services/internal/controllers/role.controller

Mar 9th, 2025
177
0
6 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { FastifyInstance } from "fastify";
  2. import { z } from "zod";
  3. import {
  4.   FastifyZodOpenApiSchema,
  5.   FastifyZodOpenApiTypeProvider,
  6. } from "fastify-zod-openapi";
  7. import {
  8.   createApiResponse,
  9.   createSuccessResponse,
  10.   createErrorResponse,
  11.   MessageCode,
  12.   InternalMessageCode,
  13.   errorResponseSchema,
  14. } from "../../../types/api-resource";
  15. import { RoleCreationError } from "../../../repositories/role.repository";
  16. import { createRoleSchema, roleResponseSchema } from "../schemas/role.schema";
  17.  
  18. export function registerRoleRoutes(fastify: FastifyInstance) {
  19.   fastify.withTypeProvider<FastifyZodOpenApiTypeProvider>().route({
  20.     method: "POST",
  21.     url: "/role",
  22.     schema: {
  23.       body: createRoleSchema,
  24.       response: {
  25.         201: createApiResponse(roleResponseSchema),
  26.         400: errorResponseSchema,
  27.         500: {
  28.           content: {
  29.             "application/json": {
  30.               schema: errorResponseSchema,
  31.             },
  32.           },
  33.         },
  34.       },
  35.       description: "Create a new role",
  36.       tags: ["Role"],
  37.     } satisfies FastifyZodOpenApiSchema,
  38.     handler: async (request, reply) => {
  39.       const { name, description, logto_id } = request.body;
  40.  
  41.       const roleRepository = fastify.roleRepository;
  42.  
  43.       const db = fastify.db;
  44.  
  45.       if (!roleRepository) {
  46.         return reply
  47.           .status(500)
  48.           .send(
  49.             createErrorResponse(
  50.               "Role repository not found",
  51.               MessageCode.INTERNAL_ERROR,
  52.               500,
  53.               InternalMessageCode.INTERNAL_ERROR
  54.             )
  55.           );
  56.       }
  57.  
  58.       try {
  59.         const role = await roleRepository.create({
  60.           name,
  61.           description,
  62.           logto_id,
  63.         });
  64.  
  65.         return reply
  66.           .status(201)
  67.           .send(createSuccessResponse(role, "Role created successfully", 201));
  68.       } catch (error) {
  69.         if (error instanceof RoleCreationError) {
  70.           return reply
  71.             .status(500)
  72.             .send(
  73.               createErrorResponse(
  74.                 error.message,
  75.                 MessageCode.INTERNAL_ERROR,
  76.                 500,
  77.                 InternalMessageCode.DATABASE_ERROR
  78.               )
  79.             );
  80.         }
  81.  
  82.         return reply
  83.           .status(500)
  84.           .send(
  85.             createErrorResponse(
  86.               "Internal server error",
  87.               MessageCode.INTERNAL_ERROR,
  88.               500,
  89.               InternalMessageCode.INTERNAL_ERROR
  90.             )
  91.           );
  92.       }
  93.     },
  94.   });
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement