Uecko_ERP/apps/server/src/routes/auth.routes.ts

76 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-02-01 21:48:13 +00:00
import { validateRequest } from "@common/presentation";
2025-02-05 20:40:59 +00:00
import { validateTabContextHeader, validateUser } from "@contexts/auth/presentation";
2025-02-04 18:25:10 +00:00
import { createLoginController } from "@contexts/auth/presentation/controllers";
2025-02-06 11:55:47 +00:00
import { createLogoutController } from "@contexts/auth/presentation/controllers/logout/logout.controller";
2025-02-04 18:25:10 +00:00
import { createRegisterController } from "@contexts/auth/presentation/controllers/register/register.controller";
2025-02-03 21:54:51 +00:00
import { LoginUserSchema, RegisterUserSchema } from "@contexts/auth/presentation/dto";
2025-02-06 11:55:47 +00:00
import { NextFunction, Request, Response, Router } from "express";
2025-02-01 21:48:13 +00:00
export const authRouter = (appRouter: Router) => {
const authRoutes: Router = Router({ mergeParams: true });
/**
* @api {post} /api/auth/register Register a new user
* @apiName RegisterUser
* @apiGroup Authentication
* @apiVersion 1.0.0
*
* @apiBody {String} username User's unique username.
* @apiBody {String} email User's email address.
* @apiBody {String} password User's password (minimum 8 characters).
*
* @apiSuccess (201) {String} userId The unique ID of the created user.
*
* @apiError (400) {String} message Error message.
*/
2025-02-03 13:12:36 +00:00
authRoutes.post("/register", validateRequest(RegisterUserSchema), (req, res, next) => {
createRegisterController().execute(req, res, next);
});
2025-02-01 21:48:13 +00:00
/**
* @api {post} /api/auth/login Authenticate a user
* @apiName LoginUser
* @apiGroup Authentication
* @apiVersion 1.0.0
*
2025-02-05 20:40:59 +00:00
* @apiHeader {String} Tab ID (x-tab-id)
2025-02-01 21:48:13 +00:00
* @apiBody {String} email User's email address.
* @apiBody {String} password User's password.
*
* @apiSuccess (200) {String} token JWT authentication token.
* @apiSuccess (200) {String} userId The unique ID of the authenticated user.
*
* @apiError (401) {String} message Invalid email or password.
*/
2025-02-04 14:58:33 +00:00
authRoutes.post(
"/login",
validateRequest(LoginUserSchema),
2025-02-05 20:40:59 +00:00
validateTabContextHeader,
2025-02-06 11:55:47 +00:00
(req: Request, res: Response, next: NextFunction) => {
2025-02-04 14:58:33 +00:00
createLoginController().execute(req, res, next);
}
);
2025-02-01 21:48:13 +00:00
/**
* @api {post} /api/auth/logout Logout user
* @apiName LogoutUser
* @apiGroup Authentication
* @apiVersion 1.0.0
*
2025-02-05 20:40:59 +00:00
* @apiHeader {String} Tab ID (x-tab-id)
2025-02-01 21:48:13 +00:00
* @apiHeader {String} Authorization Bearer token.
*
* @apiSuccess (200) {String} message Success message.
*/
2025-02-06 11:55:47 +00:00
authRoutes.post(
"/logout",
validateUser,
validateTabContextHeader,
(req: Request, res: Response, next: NextFunction) => {
createLogoutController().execute(req, res, next);
}
);
2025-02-01 21:48:13 +00:00
appRouter.use("/auth", authRoutes);
};