Split /users into routes/controller/service

This commit is contained in:
Maciej Ziarkowski 2019-08-19 14:31:35 +01:00
parent 90da2a1522
commit 54bd565cc8
4 changed files with 102 additions and 72 deletions

View File

@ -1,78 +1,20 @@
import express from 'express'; import express from 'express';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { authUser, createUser, getUserById, getNewUserAPIKey, deleteUser } from './services/user'; import { authUser, getNewUserAPIKey, logout } from './services/user';
import { queryLocation } from './services/search'; import { queryLocation } from './services/search';
import buildingsRouter from './routes/buildingsRouter'; import buildingsRouter from './routes/buildingsRouter';
import usersRouter from './routes/usersRouter';
const server = express.Router() const server = express.Router();
// parse POSTed json body // parse POSTed json body
server.use(bodyParser.json()); server.use(bodyParser.json());
server.use('/buildings', buildingsRouter); server.use('/buildings', buildingsRouter);
server.use('/users', usersRouter);
// POST new user
server.post('/users', function (req, res) {
const user = req.body;
if (req.session.user_id) {
res.send({ error: 'Already signed in' });
return
}
if (user.email) {
if (user.email != user.confirm_email) {
res.send({ error: 'Email did not match confirmation.' });
return
}
} else {
user.email = null;
}
createUser(user).then(function (result) {
if (result.user_id) {
req.session.user_id = result.user_id;
res.send({ user_id: result.user_id });
} else {
req.session.user_id = undefined;
res.send({ error: result.error });
}
}).catch(function (err) {
console.error(err);
res.send(err)
});
});
// GET own user info
server.route('/users/me')
.get(function (req, res) {
if (!req.session.user_id) {
res.send({ error: 'Must be logged in' });
return
}
getUserById(req.session.user_id).then(function (user) {
res.send(user);
}).catch(function (error) {
res.send(error);
});
})
.delete((req, res) => {
if (!req.session.user_id) {
return res.send({ error: 'Must be logged in' });
}
console.log(`Deleting user ${req.session.user_id}`);
deleteUser(req.session.user_id).then(
() => logout(req.session)
).then(() => {
res.send({ success: true });
}).catch(err => {
res.send({ error: err });
});
})
// POST user auth // POST user auth
server.post('/login', function (req, res) { server.post('/login', function (req, res) {
@ -98,15 +40,6 @@ server.post('/logout', function (req, res) {
}); });
}); });
function logout(session) {
return new Promise((resolve, reject) => {
session.user_id = undefined;
session.destroy(err => {
if (err) return reject(err);
return resolve();
});
});
}
// POST generate API key // POST generate API key
server.post('/api/key', function (req, res) { server.post('/api/key', function (req, res) {

View File

@ -0,0 +1,65 @@
import * as userService from '../services/user';
function createUser(req, res) {
const user = req.body;
if (req.session.user_id) {
res.send({ error: 'Already signed in' });
return;
}
if (user.email) {
if (user.email != user.confirm_email) {
res.send({ error: 'Email did not match confirmation.' });
return;
}
} else {
user.email = null;
}
userService.createUser(user).then(function (result) {
if (result.user_id) {
req.session.user_id = result.user_id;
res.send({ user_id: result.user_id });
} else {
req.session.user_id = undefined;
res.send({ error: result.error });
}
}).catch(function (err) {
console.error(err);
res.send(err);
});
}
function getCurrentUser(req, res) {
if (!req.session.user_id) {
res.send({ error: 'Must be logged in' });
return;
}
userService.getUserById(req.session.user_id).then(function (user) {
res.send(user);
}).catch(function (error) {
res.send(error);
});
}
function deleteCurrentUser(req, res) {
if (!req.session.user_id) {
return res.send({ error: 'Must be logged in' });
}
console.log(`Deleting user ${req.session.user_id}`);
userService.deleteUser(req.session.user_id).then(
() => userService.logout(req.session)
).then(() => {
res.send({ success: true });
}).catch(err => {
res.send({ error: err });
});
}
export default {
createUser,
getCurrentUser,
deleteCurrentUser,
};

View File

@ -0,0 +1,14 @@
import express from 'express';
import userController from '../controllers/userController';
const router = express.Router();
router.post('/', userController.createUser);
router.route('/me')
.get(userController.getCurrentUser)
.delete(userController.deleteCurrentUser);
export default router;

View File

@ -140,4 +140,22 @@ function deleteUser(id) {
}); });
} }
export { getUserById, createUser, authUser, getNewUserAPIKey, authAPIUser, deleteUser } function logout(session: Express.Session) {
return new Promise((resolve, reject) => {
session.user_id = undefined;
session.destroy(err => {
if (err) return reject(err);
return resolve();
});
});
}
export {
getUserById,
createUser,
authUser,
getNewUserAPIKey,
authAPIUser,
deleteUser,
logout
};