Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I01 criacao conexao com mongo #4

Merged
merged 2 commits into from
Jan 16, 2021
Merged
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
22 changes: 22 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
}
}
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
yarn.lock
node_modules
node_modules
package-lock.json
16 changes: 16 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM node:alpine

WORKDIR /usr/app

COPY package.json ./
COPY index.js ./

RUN npm install

RUN cat package.json

RUN npm start

EXPOSE 3000

# CMD npm start
7 changes: 6 additions & 1 deletion src/app.js → index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
const express = require('express');
const bodyParser = require('body-parser');

const mongoose = require('./src/database/index')

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.listen(5000);
require('./src/controllers/userController')(app);
require('./src/controllers/recipeController')(app);

app.listen(3001);
11 changes: 9 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"description": "Um projeto sobre receitas",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon index.js"
},
"repository": {
"type": "git",
Expand All @@ -19,6 +20,12 @@
"homepage": "https://github.com/bsb-devs/recipes-api#readme",
"dependencies": {
"body-parse": "^0.1.0",
"express": "^4.17.1"
"express": "^4.17.1",
"mongoose": "^5.11.12",
"nodemon": "^2.0.7"
},
"devDependencies": {
"eslint": "^7.17.0",
"eslint-plugin-react": "^7.22.0"
Comment on lines +23 to +29
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nodemon é dependencia de desenvolvimento

}
}
79 changes: 79 additions & 0 deletions src/controllers/recipeController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
const express = require('express');

const Recipe = require('../models/recipeModel');
const User = require('../models/userModel');

const RecipeController = express.Router();

RecipeController.post('/register/:userId', async (req, res) => {
try {
const user = await User.findById(req.params.userId); //Pegando Id do usuario da url
const recipe = await Recipe.create({
...req.body,
user : user,
})
await recipe.save(); //Salvando a receita criada
user.recipes.push(recipe); //Adicionando a receita no array do usuario
await user.save(); //Salvando o usuario antes de devolver a receita

return res.status(201).send(recipe)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

RecipeController.get('/findById/:recipeId', async (req, res) => {
try {
const recipe = await Recipe.findById(req.params.recipeId).populate([
{ path: 'user' },
]); //Pegando Id da receita da url

return res.status(200).send(recipe)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

RecipeController.get('/findAll', async (req, res) => {
try {
const recipes = await Recipe.find().populate([
{ path: 'user' },
]); //Pegando Id da receita da url

return res.status(200).send(recipes)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

RecipeController.delete('/delete/:recipeId', async (req, res) => {
try {
const recipe = await Recipe.findByIdAndDelete(req.params.recipeId); //Pegando Id da receita da url

return res.status(200).send(recipe._id)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

RecipeController.put('/update/:recipeId', async (req, res) => {
try {
const recipe = req.params.recipeId
const update = req.body
const updatedRecipe = await Recipe.findByIdAndUpdate(
recipe,
update,
{
new: true,
useFindAndModify: true,
}
);

return res.status(200).send(updatedRecipe)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});


module.exports = app => app.use('/recipe', RecipeController);
70 changes: 70 additions & 0 deletions src/controllers/userController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
const express = require('express');

const User = require('../models/userModel');

const AuthController = express.Router();

AuthController.post('/register', async (req, res) => {
try {
const user = await User.create(req.body)

return res.status(201).send({ user })
} catch(err) {
return res.status(400).send({ error: 'Registration failed' })
}
});

AuthController.get('/findById/:userId', async (req, res) => {
try {
const user = await User.findById(req.params.userId).populate([
{ path: 'recipes' },
]); //Pegando Id da receita da url

return res.status(200).send(user)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

AuthController.get('/findAll', async (req, res) => {
try {
const users = await User.find(); //Pegando Id da receita da url

return res.status(200).send(users)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});

AuthController.delete('/delete/:userId', async (req, res) => {
try {
const users = await User.findOneAndDelete(req.params.userId); //Pegando Id da receita da url

return res.status(200).send({ message: `this user was deleted : ${users._id}`})
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});


AuthController.put('/update/:userId', async (req, res) => {
try {
const user = req.params.userId
const update = req.body
const updatedUser = await User.findByIdAndUpdate(
user,
update,
{
new: true,
useFindAndModify: true,
}
);

return res.status(200).send(updatedUser)
} catch(err) {
return res.status(400).send({ error: `${err}` })
}
});


module.exports = app => app.use('/user', AuthController);
10 changes: 10 additions & 0 deletions src/database/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const mongoose = require('mongoose');

mongoose.connect(
'mongodb+srv://dev:dev12345@recipescluster.m9dnr.mongodb.net/recipes?retryWrites=true&w=majority',
{ useNewUrlParser: true },
{ useUnifiedTopology: true },
);
mongoose.Promise = global.Promise;

module.exports = mongoose;
30 changes: 30 additions & 0 deletions src/models/exemples
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//User
{
"name":"admin",
"email": "admin@admin.com",
"password": "admin"
}
//Recipe
{
"title": "Batata recheada",
"description": "Minha comida favorita",
"difficulty": 3,
"tags": [
"salgado",
"batata",
"assado"
],
"servings": 1,
"estimatedTime": "1 hora",
"ingredients": [
{
"name":"batata grande",
"qty": "1"
},
{
"name":"Strogonof",
"qty": "10 colheres"
}
],
"directions":"Assar a batata e rechear"
}
61 changes: 61 additions & 0 deletions src/models/recipeModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
const mongoose = require('mongoose');

const RecipeSchema = new mongoose.Schema({
title: {
type: String,
required: true,
},
photo: {
type: String,
},
description: {
type: String,
required: true,
},
difficulty: {
type: Number,
required: true,
},
tags: [
{
type: String,
required: true,
},
],
servings: {
type: Number,
required: true,
},
estimatedTime: {
type: String,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
ingredients: [
{
name: {
type: String,
require: true,
},
qty: {
type: String,
require: true,
}
},
],
directions: {
type: String,
required: true,
},
});

const Recipe = mongoose.model('Recipe', RecipeSchema);

module.exports = Recipe;
43 changes: 43 additions & 0 deletions src/models/userModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
recipes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Recipe',
},
],
favoriteRecipes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Recipe',
},
],
recipesHistory: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Recipe',
},
],
createdAt: {
type: Date,
default: Date.now,
},
});

const User = mongoose.model('User', UserSchema);

module.exports = User;
Loading