Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9633850
FTApi-M: Creation of the basic structure of API modules. Added the fo…
MariaFernandaSSO Feb 8, 2023
7762547
FTApi-M: Addition of the following scripts to the 'package.json' file…
MariaFernandaSSO Feb 8, 2023
39332a9
FTApi-M: Creation of sequelize-cli base structure
MariaFernandaSSO Feb 8, 2023
05a855b
FTApi-M:
MariaFernandaSSO Feb 8, 2023
de5e65d
FTApi-M: Local database setup and beer model migration
MariaFernandaSSO Feb 8, 2023
8bd76a2
FTApi-M: Creation of controller and routes files referring to the bee…
MariaFernandaSSO Feb 8, 2023
2369add
FTApi-M: Attempt to migrate seeders, error encountered: Geometry type…
MariaFernandaSSO Feb 8, 2023
82a1bf8
FTApi-M: (fix): corrected coordinate field error
MariaFernandaSSO Feb 9, 2023
979b292
FTApi-M:
MariaFernandaSSO Feb 9, 2023
91db556
FTApi-M: Added dotenv module to configure environment variables
MariaFernandaSSO Feb 9, 2023
7d1e057
FTApi-M: (fix): Fixed error when saving 'abv' field data
MariaFernandaSSO Feb 9, 2023
834af89
FTApi-M: Line and whitspace formatting
MariaFernandaSSO Feb 9, 2023
8f6e844
FTApi-M: change the 'init' script; adding server startup with nodemon
MariaFernandaSSO Feb 9, 2023
e368c31
FTApi-M: Creation of the start_bd script that will migrate the models…
MariaFernandaSSO Feb 9, 2023
1b6cde1
FTApi-M: Added start script for test deployment on the railway
MariaFernandaSSO Feb 9, 2023
89a535f
FTApi-M: Additional bench for seeders
MariaFernandaSSO Feb 9, 2023
ea97cf6
FTApi-M: (fix) 'abv' table size fix
MariaFernandaSSO Feb 9, 2023
35d6387
FTApi-M: (fix) 'description' table size fix
MariaFernandaSSO Feb 9, 2023
26e665a
FTApi-M: Change in the start script to do only migrations and seeders…
MariaFernandaSSO Feb 9, 2023
ea14ddc
FTApi-M: test in vercel
MariaFernandaSSO Feb 9, 2023
ffc68ed
FTApi-M: Vercel test error due to branch 'main' which cannot be updat…
MariaFernandaSSO Feb 9, 2023
25cb041
FTApi-M: start script fix
MariaFernandaSSO Feb 9, 2023
d6a528e
FTApi-M: Postman collection added for download
MariaFernandaSSO Feb 9, 2023
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
7 changes: 7 additions & 0 deletions api/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
DB_HOST="127.0.0.1"
DB_USER="root"
DB_PASS=
DB_NAME="db_beer"
DB_DIALECT=mysql
PORT_API=3000
DB_PORT=3306
2 changes: 2 additions & 0 deletions api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
.vercel
25 changes: 25 additions & 0 deletions api/config/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require('dotenv').config();
module.exports = {
"development": {
"username": process.env.DB_USER,
"password": process.env.DB_PASS,
"database": process.env.DB_NAME,
"host": process.env.DB_HOST,
"dialect": process.env.DB_DIALECT
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": process.env.DB_USER,
"password": process.env.DB_PASS,
"database": process.env.DB_NAME,
"host": process.env.DB_HOST,
"dialect": process.env.DB_DIALECT,
"port": process.env.DB_PORT
}
}
107 changes: 107 additions & 0 deletions api/controllers/beerController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
const { Op } = require('sequelize')
const database = require('../models')

class BeerController {

static async getAllBeers(req, res) {
try {
const allBeers = await database.Beer.findAll()
return res.status(200).json(allBeers)
} catch (error) {
return res.status(500).json(error.message)
}
}

static async getOneBeerByID(req,res){
const { id } = req.params
try{
const beer = await database.Beer.findOne({
where: {
id: Number(id)
}
})
return res.status(200).json(beer)
}
catch(error){
return res.status(500).json(error.message)
}
}

static async getOneBeerByABV(req,res){
const { abv } = req.params
try{
const beer = await database.Beer.findOne({
where: {
abv: Number(abv)
}
})
return res.status(200).json(beer)
}
catch(error){
return res.status(500).json(error.message)
}
}

static async getOneBeerByIBU(req,res){
const { ibu } = req.params
try{
const beer = await database.Beer.findOne({
where: {
ibu: Number(ibu)
}
})
return res.status(200).json(beer)
}
catch(error){
return res.status(500).json(error.message)
}
}

static async createBeer(req, res) {
const newBeer = req.body
try {
const newBeerCreated = await database.Beer.create(newBeer)
return res.status(201).json(newBeerCreated)
} catch(error) {
return res.status(500).json(error.message)
}
}

static async updateBeer(req, res) {
const { id } = req.params
const newData = req.body
try {
await database.Beer.update(newData, {
where: {
id: Number(id)
}
})
const beerUpdated = await database.Beer.findOne({
where: {
id: Number(id)
}
})
return res.status(200).json(beerUpdated)
} catch(error) {
return res.status(500).json(error.message)
}
}

static async deleteBeer(req, res) {
const { id } = req.params
try {
await database.Beer.destroy({
where: {
id: Number(id)
}
})
return res.status(200).json({
mensagem: `successfully deleted beer with id: ${id} `
})
} catch(error) {
return res.status(500).json(error.message)
}
}
}

module.exports = BeerController
20 changes: 20 additions & 0 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
require('dotenv').config();
const express = require('express')
const routes = require('./routes')
const port = process.env.PORT_API
const server = express()

routes(server)


server.get('/', (req, res) => {
return res.status(200).json({
"mensagem": "API Beers running"
})
})

server.listen(port, () => {
console.log(`Server is on in ${port}`)
})

module.exports = server
62 changes: 62 additions & 0 deletions api/migrations/20230208214022-create-beer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('Beers', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
abv: {
type: Sequelize.DOUBLE,
allowNull: false
},
address: {
type: Sequelize.STRING
},
category: {
type: Sequelize.STRING
},
city: {
type: Sequelize.STRING
},
coordinates: {
type: Sequelize.TEXT
},
country: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING,
allowNull: false,
defaultValue: 'Sem descrição'
},
ibu: {
type: Sequelize.INTEGER,
allowNull: false
},
name: {
type: Sequelize.STRING
},
state: {
type: Sequelize.STRING
},
website: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('Beers');
}
};
42 changes: 42 additions & 0 deletions api/models/beer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
'use strict'
const { Model } = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Beer extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
Beer.init(
{
abv: DataTypes.DOUBLE,
address: DataTypes.STRING,
category: DataTypes.STRING,
city: DataTypes.STRING,
coordinates: {
type: DataTypes.TEXT,
get: function() {
return JSON.parse(this.getDataValue('coordinates'));
},
set: function(val) {
return this.setDataValue('coordinates', JSON.stringify(val));
}
},
country: DataTypes.STRING,
description: DataTypes.STRING,
ibu: DataTypes.INTEGER,
name: DataTypes.STRING,
state: DataTypes.STRING,
website: DataTypes.STRING
},
{
sequelize,
modelName: 'Beer'
}
)
return Beer
}
43 changes: 43 additions & 0 deletions api/models/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const process = require('process');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.js')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf('.') !== 0 &&
file !== basename &&
file.slice(-3) === '.js' &&
file.indexOf('.test.js') === -1
);
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});

Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
Loading