Skip to content

Commit

Permalink
Dependency upgrade (#39)
Browse files Browse the repository at this point in the history
* JSAEM2-44 fixed: correct the token verify middleware

* JSAEM 2-47 fixed: model name consistent

* JSAEM2-45 fixed: separate the backend files

* feat: create branch for the final

* fixed: return username for session endpoint

* feat: update the family members

* update: fix label data bug

* fixed: get users without self, get username of the trans creator

* fixed: username instead of id

* fix: get status code in res body

* feat: add endpoint to query family members

* fixed: use username instead of id

* fixed: bug

Co-authored-by: Katy <[email protected]>
  • Loading branch information
MichaelCTH and KatyTao authored Mar 11, 2021
1 parent 92c8a58 commit 2f580e8
Show file tree
Hide file tree
Showing 6 changed files with 149 additions and 120 deletions.
2 changes: 1 addition & 1 deletion Model/Family.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const mongoose = require('mongoose');

const Family = new mongoose.Schema({
members: Array,
creator: mongoose.Schema.Types.ObjectId,
creator: String,
transactions: Array,
});

Expand Down
4 changes: 2 additions & 2 deletions Model/Transaction.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const mongoose = require('mongoose');

const Transaction = new mongoose.Schema({
creator: mongoose.Schema.Types.ObjectId,
creator: String,
amount: Number,
labelName: String,
labelName: Object,
date: String,
type: String,
});
Expand Down
2 changes: 2 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const mongooseInit = require('./mongoDB');
const app = express();
const indexRouter = require('./routes/index');
const userRouter = require('./routes/users');
const familyRouter = require('./routes/family');

// DB Init
mongooseInit();
Expand All @@ -19,6 +20,7 @@ app.use(express.urlencoded({ extended: false }));
// Route
app.use('/', indexRouter);
app.use('/', userRouter);
app.use('/', familyRouter);

app.get('*', (req, res) => {
res.sendStatus(404);
Expand Down
134 changes: 134 additions & 0 deletions routes/family.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
const express = require('express');
const Transaction = require('../Model/Transaction');
const mailer = require('../Utils/Mailer');
const Family = require('../Model/Family');
const { verifyToken } = require('../Utils/Auth');
const User = require('../Model/User');

const router = express.Router();

router.post('/family', verifyToken, async (req, res) => {
const { members } = req.body;
if (!members) {
return res.status(400).json({
code: 400,
message: 'Please provide a valid list of members',
});
}

if (members.length === 0) {
return res.status(400).json({ code: 400, message: 'The member list cannot be empty' });
}

const filteredMembers = await User.find({ username: { $in: members } });

if (filteredMembers.length === 0) {
return res.status(400).json({
code: 400,
message: 'The member list does not contain any valid user',
});
}

const family = await Family.findOne({
$or: [{ members: req.authUser.username },
{ creator: req.authUser.username }],
});

if (family) {
family.members = filteredMembers.map((user) => user.username);
family.save();
return res.sendStatus(200);
}

const newFamily = new Family({
creator: req.authUser.username,
members: filteredMembers.map((user) => user.username),
});

newFamily.save((err) => {
if (err) {
return res.status(500).json({
code: 500,
message: 'Unexpected error occurred, please try it later',
});
}

mailer.sendMail({
to: filteredMembers.map((user) => user.email),
subject: 'New Family Group From Money Honey',
body: '',
}, () => { });

return res.sendStatus(200);
});
return null;
});

router.post('/family-transactions', verifyToken, async (req, res) => {
const {
amount, labelName, date, type,
} = req.body;

if (!amount || !labelName || !date || !type) {
return res.status(400).json({
code: 400,
message: 'Please provide valid transaction information: { amount, labelName, date, type }',
});
}

const family = await Family.findOne({
$or: [{ members: req.authUser.username },
{ creator: req.authUser.username }],
});

if (!family) {
return res.status(400).json({
code: 400,
message: 'Please create/join a family first',
});
}

family.transactions.push(new Transaction({
creator: req.authUser.username, amount, labelName, date, type,
}));

family.save((err) => {
if (err) {
return res.status(500).json({
code: 500,
message: 'Unexpected error occurred, please try it later',
});
}
return res.sendStatus(200);
});

return null;
});

router.get('/family-transactions', verifyToken, async (req, res) => {
const family = await Family.findOne({
$or: [{ members: req.authUser.username },
{ creator: req.authUser.username }],
});

if (!family) {
return res.status(404).json({ code: 404, message: 'Family Not Found' });
}

return res.json({ code: 200, data: family.transactions });
});

router.get('/family-members', verifyToken, async (req, res) => {
const family = await Family.findOne({
$or: [{ members: req.authUser.username },
{ creator: req.authUser.username }],
});

if (!family) {
return res.status(404).json({ code: 404, message: 'Family Not Found' });
}

return res.json({ code: 200, data: family.members.map((username) => ({ username, url: 'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg' })) });
});

module.exports = router;
112 changes: 1 addition & 111 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
const express = require('express');
const mongoose = require('mongoose');
const { verifyToken } = require('../Utils/Auth');
const Family = require('../Model/Family');

const User = require('../Model/User');
const Transaction = require('../Model/Transaction');
const mailer = require('../Utils/Mailer');

const router = express.Router();

Expand Down Expand Up @@ -52,112 +50,4 @@ router.get('/backup', verifyToken, (req, res) => {
return null;
});

router.post('/family', verifyToken, async (req, res) => {
const { members } = req.body;
if (!members) {
return res.status(400).json({
code: 400,
message: 'Please provide a valid list of members',
});
}

if (members.length === 0) {
return res.status(400).json({ code: 400, message: 'The member list cannot be empty' });
}

const memberList = members.map((id) => {
try {
return mongoose.Types.ObjectId(id);
} catch (err) {
return null;
}
}).filter((i) => i);

const filteredMembers = await User.find({ _id: { $in: memberList } });

if (filteredMembers.length === 0) {
return res.status(400).json({
code: 400,
message: 'The member list does not contain any valid user',
});
}

const newFamily = new Family({
creator: req.authUser.id,
members: filteredMembers.map((user) => user.id),
});

newFamily.save((err) => {
if (err) {
return res.status(500).json({
code: 500,
message: 'Unexpected error occurred, please try it later',
});
}

mailer.sendMail({
to: filteredMembers.map((user) => user.email),
subject: 'New Family Group From Money Honey',
body: '',
}, () => {});

return res.sendStatus(200);
});
return null;
});

router.post('/family-transactions', verifyToken, async (req, res) => {
const {
amount, labelName, date, type,
} = req.body;

if (!amount || !labelName || !date || !type) {
return res.status(400).json({
code: 400,
message: 'Please provide valid transaction information: { amount, labelName, date, type }',
});
}

const family = await Family.findOne({
$or: [{ members: req.authUser.id },
{ creator: req.authUser.id }],
});

if (!family) {
return res.status(400).json({
code: 400,
message: 'Please create/join a family first',
});
}

family.transactions.push(new Transaction({
creator: req.authUser.id, amount, labelName, date, type,
}));

family.save((err) => {
if (err) {
return res.status(500).json({
code: 500,
message: 'Unexpected error occurred, please try it later',
});
}
return res.sendStatus(200);
});

return null;
});

router.get('/family-transactions', verifyToken, async (req, res) => {
const family = await Family.findOne({
$or: [{ members: req.authUser.id },
{ creator: req.authUser.id }],
});

if (!family) {
return res.status(404).json({ code: 404, message: 'Family Not Found' });
}

return res.json(family.transactions);
});

module.exports = router;
15 changes: 9 additions & 6 deletions routes/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const router = express.Router();
router.get('/users', verifyToken, (req, res) => {
const { contain } = req.query;

User.find((err, userList) => {
User.find({ _id: { $ne: req.authUser.id } }, (err, userList) => {
if (err) {
return res.sendStatus(500);
}
Expand Down Expand Up @@ -43,7 +43,7 @@ router.post('/register', (req, res) => {
);
}

User.find({ username, email }, (err, found) => {
User.find({ email }, (err, found) => {
if (err) {
return res.status(500).json({
code: 500,
Expand Down Expand Up @@ -103,11 +103,14 @@ router.post('/sessions', (req, res) => {
return res.status(401).json({ code: 401, message: 'Please provide valid email and password' });
}

return res.json(getTokenSet({
return res.json({
...getTokenSet({
username: found[0].username,
email: found[0].email,
id: found[0].id,
}, process.env.JWT_SECRET),
username: found[0].username,
email: found[0].email,
id: found[0].id,
}, process.env.JWT_SECRET));
});
});

return null;
Expand Down

0 comments on commit 2f580e8

Please sign in to comment.