Files
AnimeTV-Backend/src/modules/user/controller/createUser.controller.ts
2025-05-11 01:41:05 +07:00

51 lines
1.5 KiB
TypeScript

import { Prisma } from "@prisma/client";
import { Context } from "elysia";
import { createUserSchema } from "../user.schema";
import { createUserService } from "../services/createUser.service";
import {
returnErrorResponse,
returnWriteResponse,
} from "../../../helpers/callback/httpResponse";
import { mainErrorHandler } from "../../../helpers/error/handler";
/**
* @function createUser
* @description Creates a new user in the database.
*
* @param {Context & { body: Prisma.UserCreateInput }} ctx - The context object containing the request body.
* @param {Prisma.UserCreateInput} ctx.body - The user data to be created.
*
* @returns {Promise<Object>} A response object indicating success or failure.
* @throws {Object} An error response object if validation fails or an error occurs during user creation.
*
* @example
* Request route: POST /users
* Request body:
* {
* "username": "john_doe",
* "email": "john@example.com",
* "password": "password123"
* }
*/
export const createUser = async (
ctx: Context & { body: Prisma.UserCreateInput }
) => {
// Validate the user input using a validation schema
const { error } = createUserSchema.validate(ctx.body);
if (error)
return returnErrorResponse(ctx.set, 400, "Invalid user input", error);
// Create the user in the database using the service
try {
const newUser = await createUserService(ctx.body);
return returnWriteResponse(
ctx.set,
201,
"User created successfully",
newUser
);
} catch (error) {
return mainErrorHandler(ctx.set, error);
}
};