import { validateRequest } from "@common/presentation"; import { Router } from "express"; import { createRegisterController } from "./controllers"; import { LoginUserSchema, RegisterUserSchema } from "./dto"; import { checkUser } from "./middleware"; 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. */ authRoutes.post("/register", validateRequest(RegisterUserSchema), (req, res, next) => { createRegisterController().execute(req, res, next); }); /** * @api {post} /api/auth/login Authenticate a user * @apiName LoginUser * @apiGroup Authentication * @apiVersion 1.0.0 * * @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. */ authRoutes.post("/login", validateRequest(LoginUserSchema), checkUser); /** * @api {post} /api/auth/select-company Select an active company * @apiName SelectCompany * @apiGroup Authentication * @apiVersion 1.0.0 * * @apiHeader {String} Authorization Bearer token. * * @apiBody {String} companyId The ID of the company to select. * * @apiSuccess (200) {String} message Success message. * * @apiError (403) {String} message Unauthorized or invalid company selection. */ //authRoutes.post("/select-company", authMiddleware, authController.selectCompany); /** * @api {post} /api/auth/logout Logout user * @apiName LogoutUser * @apiGroup Authentication * @apiVersion 1.0.0 * * @apiHeader {String} Authorization Bearer token. * * @apiSuccess (200) {String} message Success message. */ //authRoutes.post("/logout", authMiddleware, authController.logout); appRouter.use("/auth", authRoutes); };