Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
203 changes: 108 additions & 95 deletions src/controllers/auth.controller.ts
Original file line number Diff line number Diff line change
@@ -1,95 +1,108 @@
import { Request, Response } from "express";
import { HTTPSTATUS } from "../config/http.config";
import { asyncHandler } from "../middlewares/asyncHandler.middlerware";
import {
forgotPasswordSchema,
loginSchema,
registerSchema,
resendOtpSchema,
resetPasswordSchema,
verifyOtpSchema,
} from "../validators/auth.validator";
import {
forgotPasswordService,
loginService,
registerService,
resendOtpService,
resetPasswordService,
verifyOtpService,
} from "../services/auth.service";

export const registerController = asyncHandler(
async (req: Request, res: Response) => {
const body = registerSchema.parse(req.body);

const result = await registerService(body);

return res.status(HTTPSTATUS.CREATED).json({
message: "Verification code sent to your email",
data: result,
});
}
);

export const loginController = asyncHandler(
async (req: Request, res: Response) => {
const body = loginSchema.parse({
...req.body,
});
const { user, accessToken, expiresAt, reportSetting } =
await loginService(body);

return res.status(HTTPSTATUS.OK).json({
message: "User logged in successfully",
user,
accessToken,
expiresAt,
reportSetting,
});
}
);

export const verifyOtpController = asyncHandler(
async (req: Request, res: Response) => {
const body = verifyOtpSchema.parse(req.body);
const result = await verifyOtpService(body);

return res.status(HTTPSTATUS.OK).json({
message: "Email verified successfully",
data: result,
});
}
);

export const resendOtpController = asyncHandler(
async (req: Request, res: Response) => {
const body = resendOtpSchema.parse(req.body);
const result = await resendOtpService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);

export const forgotPasswordController = asyncHandler(
async (req: Request, res: Response) => {
const body = forgotPasswordSchema.parse(req.body);
const result = await forgotPasswordService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);

export const resetPasswordController = asyncHandler(
async (req: Request, res: Response) => {
const body = resetPasswordSchema.parse(req.body);
const result = await resetPasswordService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);
import { Request, Response } from "express";
import { HTTPSTATUS } from "../config/http.config";
import { asyncHandler } from "../middlewares/asyncHandler.middlerware";
import {
forgotPasswordSchema,
loginSchema,
registerSchema,
resendOtpSchema,
resetPasswordSchema,
verifyOtpSchema,
} from "../validators/auth.validator";
import {
forgotPasswordService,
loginService,
registerService,
resendOtpService,
resetPasswordService,
verifyOtpService,
} from "../services/auth.service";

const resendCooldowns = new Map<string, number>();

export const registerController = asyncHandler(
async (req: Request, res: Response) => {
const body = registerSchema.parse(req.body);

const result = await registerService(body);

return res.status(HTTPSTATUS.CREATED).json({
message: "Verification code sent to your email",
data: result,
});
}
);

export const loginController = asyncHandler(
async (req: Request, res: Response) => {
const body = loginSchema.parse({
...req.body,
});
const { user, accessToken, expiresAt, reportSetting } =
await loginService(body);

return res.status(HTTPSTATUS.OK).json({
message: "User logged in successfully",
user,
accessToken,
expiresAt,
reportSetting,
});
}
);

export const verifyOtpController = asyncHandler(
async (req: Request, res: Response) => {
const body = verifyOtpSchema.parse(req.body);
const result = await verifyOtpService(body);

return res.status(HTTPSTATUS.OK).json({
message: "Email verified successfully",
data: result,
});
}
);

export const resendOtpController = asyncHandler(
async (req: Request, res: Response) => {
const body = resendOtpSchema.parse(req.body);
const { email } = body;

const now = Date.now();
const lastSent = resendCooldowns.get(email);
if (lastSent && now - lastSent < 60000) {
return res.status(429).json({
message: "Too many requests. Please wait before requesting another code.",
});
}
resendCooldowns.set(email, now);

const result = await resendOtpService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);

export const forgotPasswordController = asyncHandler(
async (req: Request, res: Response) => {
const body = forgotPasswordSchema.parse(req.body);
const result = await forgotPasswordService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);

export const resetPasswordController = asyncHandler(
async (req: Request, res: Response) => {
const body = resetPasswordSchema.parse(req.body);
const result = await resetPasswordService(body);

return res.status(HTTPSTATUS.OK).json({
message: result.message,
});
}
);
Loading