| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import jwt from "jsonwebtoken";
- import {
- User
- } from "../../../models/User";
- import {
- LoginResult,
- LoginInput
- } from "./types";
- import redis from "../../../config/redis";
- const login = async (input: LoginInput): Promise<LoginResult> => {
- const {
- password,
- mail
- } = input;
- const user = await User.findOne({
- mail
- });
- if (!user) {
- return {
- message: "user-not-found",
- code: 404,
- };
- }
- if (user.password !== password) {
- return {
- message: "wrong-password",
- code: 401,
- };
- }
- if (!user.isPhoneVerified) {
- return {
- message: "please-verify-your-phone-first",
- code: 403,
- payload: {
- userID: user._id.toString()
- }
- };
- }
- if (!user.isApproved) {
- return {
- message: "your-account-is-currently-under-review-we-will-get-back-to-you",
- code: 200,
- };
- }
- const accessToken = jwt.sign(
- {
- companyName: user.companyName,
- fullName: user.fullName,
- userID: user._id,
- mail: user.mail
- },
- process.env.JWT_SECRET as string,
- {
- expiresIn: "4h"
- }
- );
- await redis.setex(user._id.toString(), 14400, accessToken);
- const refreshToken = jwt.sign(
- {
- companyName: user.companyName,
- fullName: user.fullName,
- userID: user._id,
- mail: user.mail
- },
- process.env.JWT_SECRET as string,
- {
- expiresIn: "30d"
- }
- );
- user.refreshToken = refreshToken;
- await user.save();
- return {
- message: "login-successful",
- code: 200,
- payload: {
- refreshToken,
- accessToken,
- user: {
- phoneNumber: user.phoneNumber,
- companyName: user.companyName,
- userID: user._id.toString(),
- firstName: user.firstName,
- lastName: user.lastName,
- fullName: user.fullName,
- mail: user.mail,
- },
- },
- };
- };
- export default login;
|