This repository has been archived on 2025-11-04. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
qoverflow/server/routes/user/Login.js
2022-08-18 18:28:04 -04:00

57 lines
1.5 KiB
JavaScript

const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');
const Token = require('server/db/models/Token');
const Badge = require('server/db/models/Badge');
const getUserLevel = require('server/utils/getUserLevel');
async function Login(req, res) {
const { user } = req;
const { remember } = req.body;
const secretKey = mongoose.Types.ObjectId();
const accessToken = jwt.sign({ id: user.id }, secretKey.toString());
await Token.deleteMany({ user: user.username });
const token = await Token.create({
_id: secretKey,
token: accessToken,
expires: !remember,
user: user.username,
});
const badges = await Badge.find({ title: { $in: user.badges } });
const badgeCount = badges.reduce(
(acc, badge) => {
if (badge.rank === 'Gold') {
acc.gold = acc.gold + 1;
} else if (badge.rank === 'Silver') {
acc.silver = acc.silver + 1;
} else if (badge.rank === 'Bronze') {
acc.bronze = acc.bronze + 1;
}
return acc;
},
{
gold: 0,
silver: 0,
bronze: 0,
}
);
return res.send({
token: token.token,
user: {
username: user.username,
email: user.email,
points: user.points,
level: getUserLevel(user.points),
badgeCount,
},
});
}
module.exports = Login;