diff --git a/api/app/models/index.js b/api/app/models/index.js index e4092f2..e80f26d 100644 --- a/api/app/models/index.js +++ b/api/app/models/index.js @@ -20,7 +20,7 @@ db.Sequelize = Sequelize; db.sequelize = sequelize; db.user = require("../models/user.models")(sequelize, Sequelize); -db.tutorials = require("../models/tutorial.models")(sequelize, Sequelize); -db.labels = require("../models/label.models")(sequelize, Sequelize); +//db.tutorials = require("../models/tutorial.models")(sequelize, Sequelize); +db.transaction = require("../models/transaction.models")(sequelize, Sequelize); module.exports = db; diff --git a/api/app/models/transaction.models.js b/api/app/models/transaction.models.js new file mode 100644 index 0000000..0e3ca18 --- /dev/null +++ b/api/app/models/transaction.models.js @@ -0,0 +1,39 @@ +module.exports = (sequelize, Sequelize) => { + const Transaction = sequelize.define("Transaction", { + userId: { + type: Sequelize.BIGINT, + field: 'userId', + }, + name: { + type: Sequelize.STRING, + field: 'str_name', + defaultValue: 'Gasto' + }, + description: { + type: Sequelize.STRING, + field: 'str_description', + defaultValue: '' + }, + date: { + type: Sequelize.STRING, + field: 'str_date', + defaultValue: '01/01/2000' + }, + amount: { + type: Sequelize.FLOAT, + field: 'amount', + defaultValue: 0 + } + }, { + tableName: 'tb_transaction', + freezeTableName: true, + timestamps: true, + + createdAt: 'dt_created_at', + updatedAt: 'dt_updated_at', + deletedAt: 'dt_deleted_at', + }); + + + return Transaction; +} \ No newline at end of file diff --git a/api/app/models/user.models.js b/api/app/models/user.models.js index 2a0548b..897465b 100644 --- a/api/app/models/user.models.js +++ b/api/app/models/user.models.js @@ -12,6 +12,7 @@ module.exports = (sequelize, Sequelize) => { updatedAt: 'dt_updated_at', deletedAt: 'dt_deleted_at', }); + return User; } \ No newline at end of file diff --git a/api/app/routes/controllers/index.js b/api/app/routes/controllers/index.js index 0ffd010..e6ebe20 100644 --- a/api/app/routes/controllers/index.js +++ b/api/app/routes/controllers/index.js @@ -4,5 +4,6 @@ const router = express.Router(); router.use('/cadastro', require('./cadastro').default); router.use('/login', require('./login').default); +router.use('/transaction', require('./transaction').default); export default router; diff --git a/api/app/routes/controllers/login.js b/api/app/routes/controllers/login.js index 7573a78..a58dbd0 100644 --- a/api/app/routes/controllers/login.js +++ b/api/app/routes/controllers/login.js @@ -4,7 +4,7 @@ import { user as UserEntity } from '../../models/index'; const routes = express.Router(); -routes.get('/', +routes.post('/', async (req, res) => { let response = null; try { @@ -20,8 +20,8 @@ routes.get('/', const response = await UserEntity.findOne({ where: { email: email, password: password } }); if (response) { - return res.status(400).json({ - "id": response.id, + return res.status(200).json({ + "userId": response.id, "name": response.name }) } else { diff --git a/api/app/routes/controllers/transaction.js b/api/app/routes/controllers/transaction.js new file mode 100644 index 0000000..3e4ff11 --- /dev/null +++ b/api/app/routes/controllers/transaction.js @@ -0,0 +1,95 @@ +import express from 'express'; +import httpStatus from 'http-status'; +import { user as UserEntity } from '../../models/index'; +import { transaction as Transaction } from '../../models/index'; + + +const routes = express.Router(); + +routes.post('/', //Cria transações + async (req, res) => { + let response = null; + try { + // logics + const check = await UserEntity.findOne({ where: { id: req.body.userId } }) + if (check) { + response = await Transaction.create(req.body); + + return res.status(httpStatus.OK).json(response); + } else { + return res.status(401).json({ message: 'Login e tente novamente' }) + } + + } catch (err) { + //handle error + console.log("###############################################") + console.log(err) + console.log("###############################################") + + } + + }); + +routes.get('/', //Retorna lista de transações pelo id do usuario (userId). + async (req, res) => { + try { + const list = await Transaction.findAll({ where: { userId: req.body.userId } }); + + if (list.length > 0) { + return res.status(httpStatus.OK).json(list) + } else { + return res.status(404).json({ message: "Usuario não encontrado" }) + } + } catch (err) { + //handle error + console.log("###############################################") + console.log(err) + console.log("###############################################") + + } + }); +routes.put('/', //Atualiza transação + async (req, res) => { + try { + var transaction = await Transaction.findOne({ where: { id: req.body.id } }) + if (transaction) { + + transaction = await transaction.update({ + name: req.body.name, + description: req.body.description, + date: req.body.date, + amount: req.body.amount + }) + return res.status(httpStatus.OK).json(transaction) + } else { + return res.status(404).json({ message: "Transação não encontrada" }) + } + + } catch (err) { + console.log("###############################################") + console.log(err) + console.log("###############################################") + } + }); +routes.delete('/', + async (req, res) => { // Deleta uma transação por id. + try { + let transaction = await Transaction.findOne({ where: { id: req.body.id } }); + if (transaction) { + + Transaction.destroy({ where: { id: req.body.id } }) + + return res.status(httpStatus.OK).json({ message: "Transação excluida com sucesso" }); + } else { + return res.status(404).json({ message: "Transação não encontrada" }) + } + + } catch (err) { + console.log("###############################################") + console.log(err) + console.log("###############################################") + } + + }) + +export default routes; diff --git a/api/migrations/Transaction.js b/api/migrations/Transaction.js new file mode 100644 index 0000000..e96dfed --- /dev/null +++ b/api/migrations/Transaction.js @@ -0,0 +1,39 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.createTable('tb_transaction', { + + id: { + type: Sequelize.BIGINT, + allowNull: false, + autoIncrement: true, + }, + userId: { + type: Sequelize.BIGINT, + allowNull: false, + }, + str_name: { + type: Sequelize.STRING, + allowNull: false + }, + amount: { + type: Sequelize.FLOAT, + allowNull: false + + }, + str_description: { type: Sequelize.STRING }, + str_date: { type: Sequelize.STRING }, + + dt_created_at: { type: Sequelize.DATE }, + dt_updated_at: { type: Sequelize.DATE }, + }); + }, + + down: async (queryInterface, Sequelize) => { + + await queryInterface.dropTable('tb_transaction'); + + + } +}; diff --git a/api/migrations/20201122205733-User.js b/api/migrations/User.js similarity index 100% rename from api/migrations/20201122205733-User.js rename to api/migrations/User.js