Skip to content

Commit

Permalink
Merge pull request #105 from agiledev-students-fall2023/database-set-up
Browse files Browse the repository at this point in the history
set up database, create expense model, update addExpense routes, fix a bug in addExpense component
  • Loading branch information
HedwigO authored Nov 24, 2023
2 parents 14ea49e + 328fa48 commit c6e2c09
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 21 deletions.
15 changes: 14 additions & 1 deletion back-end/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
const express = require("express"); // CommonJS import style!
const app = express(); // instantiate an Express object
const cors = require("cors");
require("dotenv").config({ silent: true });
const mongoose = require("mongoose");

const eventRoute = require("./routes/eventRoute");
const addExpenseRoute = require("./routes/addExpenseRoute");
Expand All @@ -11,12 +13,23 @@ const addFriendRoute = require("./routes/addFriendRoute");
const eventsRoute = require("./routes/eventsRoute");
const addEventRoute = require("./routes/addEventRoute");
const loginRoute = require("./routes/loginRoute");
const addEventMemberRoute = require('./routes/addEventMemberRoute');
const addEventMemberRoute = require("./routes/addEventMemberRoute");
const addExpensePayerRoute = require("./routes/addExpensePayerRoute");
const userInfoPageRoute = require("./routes/UserInfoPageRoute");
const signupRoute = require("./routes/signupRoute");
const forgotPasswordRoute = require("./routes/forgotPasswordRoute");

// connect to the database
// console.log(`Conneting to MongoDB at ${process.env.MONGODB_URI}`)
try {
mongoose.connect(process.env.MONGODB_URI);
console.log(`Connected to MongoDB.`);
} catch (err) {
console.log(
`Error connecting to MongoDB user account authentication will fail: ${err}`
);
}

app.use(cors());
app.use(express.json());

Expand Down
43 changes: 43 additions & 0 deletions back-end/models/Expense.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// const splitDetailsSchema = new Schema({
// user: userSchema,
// settlement: settlementSchema
// });

const expenseSchema = new Schema({
name: {
type: String,
required: true,
},
description: String,
totalAmount: {
type: Number,
required: true,
},
date: {
type: Date,
required: true,
},
// paidBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}
paidBy: {
type: String,
required: true,
},
// splitDetails: [splitDetailsSchema]
splitDetails: [
{
user: String,
settlement: String,
},
],
});

// create mongoose Model
const Expense = mongoose.model("Expense", expenseSchema);

// export the model so other modules can import it
module.exports = {
Expense,
};
4 changes: 3 additions & 1 deletion back-end/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
"axios": "^1.6.1",
"c8": "^8.0.1",
"cors": "^2.8.5",
"express": "^4.18.2"
"express": "^4.18.2",
"express-validator": "^7.0.1",
"mongoose": "^8.0.1"
},
"devDependencies": {
"c8": "^8.0.1",
Expand Down
71 changes: 52 additions & 19 deletions back-end/routes/addExpenseRoute.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,56 @@
const express = require('express');
const express = require("express");
const { body, validationResult } = require("express-validator");
const router = express.Router();
const { Expense } = require("../models/Expense.js");

router.post("/", async (req, res) => {
// assemble an object with the data we want to send
const response = {
router.post(
"/",
// validation rules
[
body("name").not().isEmpty().withMessage("Name is required"),
body("amount").isNumeric().withMessage("Amount should be a number"),
body("date").not().isEmpty().withMessage("Date is required"),
body("personPaid")
.not()
.isEmpty()
.withMessage("Person who paid is required"),
// Add other validation rules as needed
],
async (req, res) => {
// Check for validation errors
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}

try {
// Create a new Expense object
const newExpense = new Expense({
name: req.body.name,
description: req.body.description,
totalAmount: req.body.amount,
date: new Date(req.body.date),
paidBy: req.body.personPaid,
splitDetails: req.body.peopleSplit.map((split) => ({
user: split.user,
settlement: split.settlement,
})),
});

// Save the Expense object to the database
await newExpense.save();

// Send a success response
res.status(201).json({
status: "Success",
message: "congratulations on sending us this data!",
data: {
name: req.body.name,
amount: req.body.amount,
date: req.body.date,
personPaid: req.body.personPaid,
peopleSplit: req.body.peopleSplit,
splitMethod: req.body.splitMethod,
amountDetails: req.body.amountDetails
},
};
// ... then send a response of some kind to client
res.json(response);
});
message: "Expense added successfully",
data: newExpense,
});
} catch (error) {
// Handle any errors that occur during saving to database
res.status(500).json({ status: "Error", message: error.message });
}
}
);

module.exports = router;
module.exports = router;
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"dependencies": {
"dotenv": "^16.3.1",
"react-router-dom": "^6.17.0"
},
"devDependencies": {
Expand Down
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,11 @@ [email protected]:
resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz"
integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==

dotenv@^16.3.1:
version "16.3.1"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz"
integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==

emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
Expand Down

0 comments on commit c6e2c09

Please sign in to comment.