AutoCatBackend/routes/user.js

81 lines
2.2 KiB
JavaScript

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const User = require('../models/user');
const makeError = error => ({ success: false, error });
router.post('/signup', async (req, res) => {
const { login, password } = req.body;
if(login && password) {
try {
let collection = req.db.collection('users');
let users = await collection.find({ login }).toArray();
if(users.length == 0) {
let user = new User(login, password);
await collection.insertOne(user.toDB());
user.token = jwt.sign({ login }, '#IWantToBelieve', { expiresIn: '365d' });
res.send({ success: true, data: user });
} else {
res.send(makeError('User already exists'));
}
} catch(ex) {
res.send(makeError('Error creating user'));
console.error(ex);
}
} else {
res.send(makeError('Invalid parameters'));
}
});
router.post('/login', async (req, res) => {
const { login, password } = req.body;
if(login && password) {
try {
let users = req.db.collection('users');
let me = await users.findOne({ login });
if(me) {
me = User.fromDB(me);
if(!me.checkPassword(password)) {
res.send(makeError('Incorrect login or password'));
return;
}
me.token = jwt.sign({ login }, '#IWantToBelieve', { expiresIn: '365d' });
res.send({ success: true, data: me });
} else {
res.send(makeError('Incorrect login or password'));
}
} catch(ex) {
res.send(makeError('Error logging in'));
console.error(ex);
}
} else {
res.send(makeError('Invalid parameters'));
}
});
router.get('/', async (req, res) => {
const { login } = req.query;
let users = await req.db.collection('users').find({ login }).toArray();
if(users.length > 0) {
res.send({ success: true, data: User.fromDB(users[0]) });
} else {
res.status(204).send(makeError('There is no such user'));
}
});
router.get('/find', async (req, res) => {
const { login } = req.query;
let users = await req.db.collection('users').find({ login: { $regex: new RegExp(`.*${login}.*`, 'i') } }).toArray();
users = users.map(user => {
user.contacts = [];
return User.fromDB(user);
});
let code = users.length > 0 ? 200 : 204;
res.status(code).send({ success: true, data: { users } });
});
module.exports = router;