Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
271 changes: 271 additions & 0 deletions src/controller/controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
const {
createUserObject,
checkExpense,
createExpenseObject,
} = require('../services/services.js');

const {
models: { User, Expense },
} = require('../models/models.js');

const getUsers = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

try {
const users = await User.findAll();

res.statusCode = 200;
res.send(users);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const getSingleUser = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;

try {
const user = await User.findByPk(Number(id));

if (user) {
res.statusCode = 200;
res.send(user);
} else {
res.statusCode = 404;
res.send({ error: 'User not found!' });
}
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const createUser = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { name } = req.body;

if (!name) {
res.statusCode = 400;
res.send({ error: 'Bad request!' });

return;
}

try {
const user = await createUserObject(name);

res.statusCode = 201;
res.send(user);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const deleteUser = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;

try {
const user = await User.findByPk(Number(id));

if (!user) {
res.statusCode = 404;
res.send({ error: 'User not found!' });

return;
}

await user.destroy();

res.statusCode = 204;
res.end();
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const updateUser = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;
const { name } = req.body;

try {
const user = await User.findByPk(Number(id));

if (!user) {
res.statusCode = 404;
res.send({ error: 'User not found!' });

return;
}

await user.update({ name });

res.statusCode = 200;
res.send(user);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const getExpenses = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { userId, from, to, categories } = req.query;

try {
const allExpenses = await Expense.findAll();
const filteredExpenses = checkExpense(
userId,
from,
to,
categories,
allExpenses,
);

res.statusCode = 200;
res.send(filteredExpenses);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const getSingleExpense = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;

try {
const expense = await Expense.findByPk(Number(id));

if (!expense) {
res.statusCode = 404;
res.send({ error: 'Expense not found!' });

return;
}

res.statusCode = 200;
res.send(expense);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const createExpense = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { userId, title, amount, category, note, spentAt } = req.body;

if (!userId || !title || !amount) {
res.statusCode = 400;
res.send({ error: 'Bad request!' });

return;
}

try {
const expense = await createExpenseObject({
userId,
title,
amount,
category,
note,
spentAt,
});

if (!expense) {
res.statusCode = 400;
res.send({ error: 'could not create expense!' });

return;
}

res.statusCode = 201;
res.send(expense);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const deleteExpense = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;

try {
const expense = await Expense.findByPk(Number(id));

if (!expense) {
res.statusCode = 404;
res.send({ error: 'Expense not found!' });

return;
}

await expense.destroy();

res.statusCode = 204;
res.end();
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

const updateExpense = async (req, res) => {
res.setHeader('Content-Type', 'application/json');

const { id } = req.params;
const { title, amount, category, note, spentAt } = req.body;

try {
const expense = await Expense.findByPk(Number(id));

if (!expense) {
res.statusCode = 404;
res.send({ error: 'Expense not found!' });

return;
}

await expense.update({
title,
amount,
category,
note,
spentAt,
});

res.statusCode = 200;
res.send(expense);
} catch (err) {
res.statusCode = 500;
res.send({ error: 'Internal server error!' });
}
};

module.exports = {
createUser,
getUsers,
deleteUser,
getSingleUser,
updateUser,
getExpenses,
getSingleExpense,
createExpense,
deleteExpense,
updateExpense,
};
47 changes: 44 additions & 3 deletions src/createServer.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,49 @@
'use strict';
const express = require('express');
const {
createUser,
getUsers,
getSingleUser,
deleteUser,
updateUser,
getExpenses,
getSingleExpense,
createExpense,
deleteExpense,
updateExpense,
} = require('./controller/controller.js');

const createServer = () => {
// your code goes here
};
const cors = require('cors');

function createServer() {

const app = express();

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

app.get('/users', getUsers);

app.get('/users/:id', getSingleUser);

app.post('/users', createUser);

app.delete('/users/:id', deleteUser);

app.patch('/users/:id', updateUser);

app.get('/expenses', getExpenses);

app.get('/expenses/:id', getSingleExpense);

app.post('/expenses', createExpense);

app.delete('/expenses/:id', deleteExpense);

app.patch('/expenses/:id', updateExpense);

return app;
}

module.exports = {
createServer,
Expand Down
2 changes: 1 addition & 1 deletion src/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const sequelize = new Sequelize({
host: POSTGRES_HOST || 'localhost',
dialect: 'postgres',
port: POSTGRES_PORT || 5432,
password: POSTGRES_PASSWORD || '123',
password: POSTGRES_PASSWORD || '848677',
});

module.exports = {
Expand Down
38 changes: 37 additions & 1 deletion src/models/Expense.model.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,45 @@
'use strict';

const { sequelize } = require('../db.js');
const { DataTypes } = require('sequelize');

const Expense = sequelize.define(
// your code goes here
'expenses',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
userId: {
type: DataTypes.INTEGER,
allowNull: false,
},
spentAt: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
},
title: {
type: DataTypes.STRING,
allowNull: false,
},
amount: {
type: DataTypes.INTEGER,
allowNull: false,
},
category: {
type: DataTypes.STRING,
allowNull: true,
},
note: {
type: DataTypes.STRING,
allowNull: true,
},
},
{
timestamps: false,
},
);

module.exports = {
Expand Down
Loading
Loading