From b7a620f9a5ced2841a933c2946935cd27d4bc127 Mon Sep 17 00:00:00 2001 From: MaroueneA <77628999+MaroueneA@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:04:14 +0100 Subject: [PATCH 01/14] TeamMembersUpdated --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df53d8a..10a7e8c 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ Make sure that you have already created your own **organisation** with your team Edit this file by filling your team composition here: -- [ ] _Student full name_ | _Github username_ | **Scrum Master** -- [ ] _Student full name_ | _Gihub username_ -- [ ] _Student full name_ | _Gihub username_ +- [ ] Eya Chafter | Eya26 | +- [ ] Chaima Rajah | chaimarajah +- [ ] Marouene Addhoum | MaroueneA ## Technologies From 4b84fccc4db38a85c0ab94d9dfedaf4fd621ad93 Mon Sep 17 00:00:00 2001 From: chaimarajah Date: Mon, 27 Dec 2021 21:58:44 +0100 Subject: [PATCH 02/14] my first commit --- poke-mongo/server/index.js | 11 ++++++++--- poke-mongo/server/package.json | 18 ++++++++++++++++++ poke-mongo/server/routes/pokemon.js | 2 ++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 poke-mongo/server/package.json create mode 100644 poke-mongo/server/routes/pokemon.js diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index 66cd61e..5ca0085 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -1,3 +1,8 @@ -/** - * Your server comes here - */ \ No newline at end of file +const express = require ('express') +const app = express () +const port = 8000 +app.listen (port , ()=> { + console.log('listening in port 8000') + +}) + diff --git a/poke-mongo/server/package.json b/poke-mongo/server/package.json new file mode 100644 index 0000000..8a0140a --- /dev/null +++ b/poke-mongo/server/package.json @@ -0,0 +1,18 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.17.2", + "n": "^8.0.1", + "nodemon": "^2.0.15", + "save": "^2.4.0" + } +} diff --git a/poke-mongo/server/routes/pokemon.js b/poke-mongo/server/routes/pokemon.js new file mode 100644 index 0000000..a6ee515 --- /dev/null +++ b/poke-mongo/server/routes/pokemon.js @@ -0,0 +1,2 @@ +const express = require ('express') +const router = express.Router () From 862e7dd24e2e0a102628e48e267ab655008e1934 Mon Sep 17 00:00:00 2001 From: eya26 Date: Mon, 27 Dec 2021 22:32:28 +0100 Subject: [PATCH 03/14] 1st --- poke-mongo/package.json | 21 +++++++++++++++++++++ poke-mongo/server/index.js | 19 ++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 poke-mongo/package.json diff --git a/poke-mongo/package.json b/poke-mongo/package.json new file mode 100644 index 0000000..0d64c62 --- /dev/null +++ b/poke-mongo/package.json @@ -0,0 +1,21 @@ +{ + "name": "poke-mongo", + "version": "1.0.0", + "description": "You are going to build a Pokémon API with Node, Express, and MongoDB. Your API will allow users to perform CRUD operations on each of the 151 original Pokémon, and power a front-end.", + "main": "index.js", + "scripts": { + "start": "node index.js", + "start-dev": "nodemon index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.19.1", + "concurrently": "^6.5.1", + "express": "^4.17.2" + }, + "devDependencies": { + "nodemon": "^2.0.15" + } +} diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index 66cd61e..cf81bb0 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -1,3 +1,16 @@ -/** - * Your server comes here - */ \ No newline at end of file +const express = require("express"); +const res = require("express/lib/response"); +const app = express(); + +app.get("/api/pokemon",(req,res) => { + res.status(200).send("Fetching...") +}) + +app.post("api/pokemon", (req,res) => { + console.log(req.body) + res.status(201).send("Creating user ...") +}) + +app.listen(8000, () => { + console.log("started listening for resquests on port 8000"); +}) \ No newline at end of file From 6c3ab320be52a655dc09e11592cb8293fe94ac49 Mon Sep 17 00:00:00 2001 From: eya26 Date: Tue, 28 Dec 2021 01:52:38 +0100 Subject: [PATCH 04/14] 2nd --- poke-mongo/server/db/index.js | 9 ++-- poke-mongo/server/index.js | 51 ++++++++++++++----- .../server/resources/pokemon/Pokemon.js | 46 +++++++++++++++++ poke-mongo/server/routes/pokemon.js | 2 - 4 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 poke-mongo/server/resources/pokemon/Pokemon.js delete mode 100644 poke-mongo/server/routes/pokemon.js diff --git a/poke-mongo/server/db/index.js b/poke-mongo/server/db/index.js index 433babf..8520825 100644 --- a/poke-mongo/server/db/index.js +++ b/poke-mongo/server/db/index.js @@ -1,3 +1,6 @@ -/** - * Your Database Connection comes here - */ \ No newline at end of file +const mongoose = require("mongoose") +, pokemon = require( './data/pokemon.json' ) +mongoose.connect('mongodb://localhost:27017/Pokemon', +() =>{console.log("successfully connected to the DB")}) + +module.exports = mongoose; diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index 7624888..b3139a9 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -1,19 +1,45 @@ -<<<<<<< HEAD -const express = require ('express') -const app = express () -const port = 8000 -app.listen (port , ()=> { - console.log('listening in port 8000') - -}) - -======= const express = require("express"); -const res = require("express/lib/response"); const app = express(); +const bodyParser= require("body-parser"); + + +const db = require("./db") +const mongoose = require("mongoose"); +const Pokemon = require("./resources/pokemon/Pokemon") +app.use(bodyParser()) app.get("/api/pokemon",(req,res) => { - res.status(200).send("Fetching...") + Pokemon.find({}) + .then((pokemons)=> { + res.status(200).json(pokemons) + }) + +}) + +app.post("/api/pokemon", (req,res) => { + const userData = req.body; + const newPokemon = new Pokemon(userData); + newPokemon.save() + .then(() => { + console.log("Saved!") + res.status(201).json(newPokemon); +}) + .catch((error) => { + console.log("error"); + res.send(error) + }) +}) + +app.put("/api/pokemon/:id", (req,res) => { + const userId = req.params.id + console.log(userId) + res.status(204).send("Updating User...") +}) + +app.delete("/api/pokemon/:id",(req,res) => { + const userId=req.params.id + res.send(`deleting user with id ${userId}...`); + }) @@ -21,4 +47,3 @@ app.get("/api/pokemon",(req,res) => { app.listen(8000, () => { console.log("started listening for resquests on port 8000"); }) ->>>>>>> 862e7dd24e2e0a102628e48e267ab655008e1934 diff --git a/poke-mongo/server/resources/pokemon/Pokemon.js b/poke-mongo/server/resources/pokemon/Pokemon.js new file mode 100644 index 0000000..66dec4e --- /dev/null +++ b/poke-mongo/server/resources/pokemon/Pokemon.js @@ -0,0 +1,46 @@ +const mongoose= require("mongoose") +pokemondata = require( 'C:\Users\Acer\OneDrive\Bureau\project\final-projects\poke-mongo\data\pokemon.json' ); +// connecting to db + +/*const Pokemon = mongoose.model("Pokemon", +{ + number: { type: Number, unique:true }, + name : { type: String, unique:true }, + types : [String], + imgUrl: String +}) +module.exports = Pokemon;*/ + +/* const Pokemon = mongoose.model("Pokemon", +{ + number: { type: Number, unique:true }, + name : { type: String, unique:true }, + types : [String], + imgUrl: String +}) +module.exports = Pokemon; + + // clear all existing documents from the collections + Pokemon.find().remove(); + + // populate the foods collection from json data + // nothing fancy here as Food documents do not reference anything else + for( var i = 0; i < foodData.length; i++ ) { + new Pokemon( pokemondata[ i ] ).save(); + }*/ + + exports.reset = function( req, res ) { + + // get refs to the models we defined above + var Pokemon = mongoose.model( 'Pokemon' ); + // clear all existing documents from the collections + Pokemon.find().remove(); + + // populate the foods collection from json data + // nothing fancy here as Food documents do not reference anything else + for( var i = 0; i < foodData.length; i++ ) { + new Pokemon( pokemondata[ i ] ).save(); + } +} + + diff --git a/poke-mongo/server/routes/pokemon.js b/poke-mongo/server/routes/pokemon.js deleted file mode 100644 index a6ee515..0000000 --- a/poke-mongo/server/routes/pokemon.js +++ /dev/null @@ -1,2 +0,0 @@ -const express = require ('express') -const router = express.Router () From 1fdca208334d12564b49237fd50c8bce4c810fda Mon Sep 17 00:00:00 2001 From: eya26 Date: Tue, 28 Dec 2021 15:02:19 +0100 Subject: [PATCH 05/14] 2nd --- poke-mongo/server/db/index.js | 1 - poke-mongo/server/index.js | 3 +- poke-mongo/server/poulatingDatabase.js | 14 ++++++ .../server/resources/pokemon/Pokemon.js | 46 +++++++++++-------- 4 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 poke-mongo/server/poulatingDatabase.js diff --git a/poke-mongo/server/db/index.js b/poke-mongo/server/db/index.js index 8520825..4128821 100644 --- a/poke-mongo/server/db/index.js +++ b/poke-mongo/server/db/index.js @@ -1,5 +1,4 @@ const mongoose = require("mongoose") -, pokemon = require( './data/pokemon.json' ) mongoose.connect('mongodb://localhost:27017/Pokemon', () =>{console.log("successfully connected to the DB")}) diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index b3139a9..953b192 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -5,9 +5,10 @@ const bodyParser= require("body-parser"); const db = require("./db") const mongoose = require("mongoose"); -const Pokemon = require("./resources/pokemon/Pokemon") + app.use(bodyParser()) + app.get("/api/pokemon",(req,res) => { Pokemon.find({}) .then((pokemons)=> { diff --git a/poke-mongo/server/poulatingDatabase.js b/poke-mongo/server/poulatingDatabase.js new file mode 100644 index 0000000..8a5c2d1 --- /dev/null +++ b/poke-mongo/server/poulatingDatabase.js @@ -0,0 +1,14 @@ + +var request = require('request'); + +var populatingDatabase = function() { + request('../data/pokemon.json', function (error, response, body) { + console.log('error:', error); + console.log('statusCode:', response && response.statusCode); + console.log('body:', body); +}); +}; + + + +populatingDatabase(); \ No newline at end of file diff --git a/poke-mongo/server/resources/pokemon/Pokemon.js b/poke-mongo/server/resources/pokemon/Pokemon.js index 66dec4e..b368e3b 100644 --- a/poke-mongo/server/resources/pokemon/Pokemon.js +++ b/poke-mongo/server/resources/pokemon/Pokemon.js @@ -1,46 +1,52 @@ const mongoose= require("mongoose") -pokemondata = require( 'C:\Users\Acer\OneDrive\Bureau\project\final-projects\poke-mongo\data\pokemon.json' ); // connecting to db +/*const Pokemondata = require('./pokemon.json')*/ -/*const Pokemon = mongoose.model("Pokemon", +const Pokemon = mongoose.model("Pokemon", { number: { type: Number, unique:true }, name : { type: String, unique:true }, types : [String], imgUrl: String }) -module.exports = Pokemon;*/ +module.exports = Pokemon; + +var request = require('request'); + +var insertAllPokemon = function() { + request('../data/pokemon.json', function (error, response, body) { + console.log('error:', error); + console.log('statusCode:', response && response.statusCode); + console.log('body:', body); +}); +}; -/* const Pokemon = mongoose.model("Pokemon", +// NOTE: DO NOT invoke this function as part of your +// server code - it is meant to only be run once so that +// you have access to data to work with +insertAllPokemon(); + +/*exports.reset = function( req, res ) { + + const Pokemon = mongoose.model("Pokemon", { number: { type: Number, unique:true }, name : { type: String, unique:true }, types : [String], imgUrl: String }) -module.exports = Pokemon; + // clear all existing documents from the collections Pokemon.find().remove(); - // populate the foods collection from json data - // nothing fancy here as Food documents do not reference anything else - for( var i = 0; i < foodData.length; i++ ) { - new Pokemon( pokemondata[ i ] ).save(); - }*/ - - exports.reset = function( req, res ) { - - // get refs to the models we defined above - var Pokemon = mongoose.model( 'Pokemon' ); - // clear all existing documents from the collections - Pokemon.find().remove(); // populate the foods collection from json data // nothing fancy here as Food documents do not reference anything else - for( var i = 0; i < foodData.length; i++ ) { - new Pokemon( pokemondata[ i ] ).save(); + for( var i = 0; i < PokemonData.length; i++ ) { + new Pokemon( PokemonData[ i ] ).save(); } -} + }*/ + From 8c5e1003d746b6d0a5861bc1b4f4b4430c084fab Mon Sep 17 00:00:00 2001 From: eya26 Date: Wed, 29 Dec 2021 14:29:23 +0100 Subject: [PATCH 06/14] router --- poke-mongo/server/PopulatingDatabse.js | 10 +++ poke-mongo/server/db/index.js | 5 +- poke-mongo/server/index.js | 38 ++-------- poke-mongo/server/poulatingDatabase.js | 14 ---- .../server/resources/pokemon/Pokemon.js | 43 +----------- .../resources/pokemon/pokemonController.js | 0 .../server/resources/pokemon/pokemonRouter.js | 69 +++++++++++++++++++ 7 files changed, 91 insertions(+), 88 deletions(-) create mode 100644 poke-mongo/server/PopulatingDatabse.js delete mode 100644 poke-mongo/server/poulatingDatabase.js create mode 100644 poke-mongo/server/resources/pokemon/pokemonController.js create mode 100644 poke-mongo/server/resources/pokemon/pokemonRouter.js diff --git a/poke-mongo/server/PopulatingDatabse.js b/poke-mongo/server/PopulatingDatabse.js new file mode 100644 index 0000000..89bb8b5 --- /dev/null +++ b/poke-mongo/server/PopulatingDatabse.js @@ -0,0 +1,10 @@ +var request = require('request'); + +var PopulatingDatabse = function() { + request('../data/pokemon.json', function (error, response, body) { + console.log('error:', error); + console.log('statusCode:', response && response.statusCode); + console.log('body:', body); +}); +}; +PopulatingDatabse(); \ No newline at end of file diff --git a/poke-mongo/server/db/index.js b/poke-mongo/server/db/index.js index 4128821..16b1cb5 100644 --- a/poke-mongo/server/db/index.js +++ b/poke-mongo/server/db/index.js @@ -1,5 +1,6 @@ -const mongoose = require("mongoose") +const mongoose = require("mongoose"); +const { db } = require("../resources/pokemon/Pokemon"); mongoose.connect('mongodb://localhost:27017/Pokemon', () =>{console.log("successfully connected to the DB")}) -module.exports = mongoose; +module.exports = db; diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index 953b192..585b154 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -1,50 +1,26 @@ + const express = require("express"); const app = express(); const bodyParser= require("body-parser"); - +const pokemonRouter = require("./resources/pokemon/pokemonRouter") const db = require("./db") const mongoose = require("mongoose"); +const Pokemon = require("./resources/pokemon/Pokemon"); +const res = require("express/lib/response"); +app.use('/pokemon', pokemonRouter) +//app.use('/api/pokemon/:number',pokemonRouter) app.use(bodyParser()) -app.get("/api/pokemon",(req,res) => { - Pokemon.find({}) - .then((pokemons)=> { - res.status(200).json(pokemons) - }) - -}) -app.post("/api/pokemon", (req,res) => { - const userData = req.body; - const newPokemon = new Pokemon(userData); - newPokemon.save() - .then(() => { - console.log("Saved!") - res.status(201).json(newPokemon); -}) - .catch((error) => { - console.log("error"); - res.send(error) - }) -}) -app.put("/api/pokemon/:id", (req,res) => { - const userId = req.params.id - console.log(userId) - res.status(204).send("Updating User...") -}) -app.delete("/api/pokemon/:id",(req,res) => { - const userId=req.params.id - res.send(`deleting user with id ${userId}...`); -}) app.listen(8000, () => { console.log("started listening for resquests on port 8000"); -}) +}) \ No newline at end of file diff --git a/poke-mongo/server/poulatingDatabase.js b/poke-mongo/server/poulatingDatabase.js deleted file mode 100644 index 8a5c2d1..0000000 --- a/poke-mongo/server/poulatingDatabase.js +++ /dev/null @@ -1,14 +0,0 @@ - -var request = require('request'); - -var populatingDatabase = function() { - request('../data/pokemon.json', function (error, response, body) { - console.log('error:', error); - console.log('statusCode:', response && response.statusCode); - console.log('body:', body); -}); -}; - - - -populatingDatabase(); \ No newline at end of file diff --git a/poke-mongo/server/resources/pokemon/Pokemon.js b/poke-mongo/server/resources/pokemon/Pokemon.js index b368e3b..a49ae6c 100644 --- a/poke-mongo/server/resources/pokemon/Pokemon.js +++ b/poke-mongo/server/resources/pokemon/Pokemon.js @@ -1,8 +1,8 @@ -const mongoose= require("mongoose") +var mongoose= require("mongoose") // connecting to db /*const Pokemondata = require('./pokemon.json')*/ -const Pokemon = mongoose.model("Pokemon", +var Pokemon = mongoose.model("Pokemon", { number: { type: Number, unique:true }, name : { type: String, unique:true }, @@ -11,42 +11,3 @@ const Pokemon = mongoose.model("Pokemon", }) module.exports = Pokemon; -var request = require('request'); - -var insertAllPokemon = function() { - request('../data/pokemon.json', function (error, response, body) { - console.log('error:', error); - console.log('statusCode:', response && response.statusCode); - console.log('body:', body); -}); -}; - -// NOTE: DO NOT invoke this function as part of your -// server code - it is meant to only be run once so that -// you have access to data to work with -insertAllPokemon(); - -/*exports.reset = function( req, res ) { - - const Pokemon = mongoose.model("Pokemon", -{ - number: { type: Number, unique:true }, - name : { type: String, unique:true }, - types : [String], - imgUrl: String -}) - - - // clear all existing documents from the collections - Pokemon.find().remove(); - - - // populate the foods collection from json data - // nothing fancy here as Food documents do not reference anything else - for( var i = 0; i < PokemonData.length; i++ ) { - new Pokemon( PokemonData[ i ] ).save(); - } - }*/ - - - diff --git a/poke-mongo/server/resources/pokemon/pokemonController.js b/poke-mongo/server/resources/pokemon/pokemonController.js new file mode 100644 index 0000000..e69de29 diff --git a/poke-mongo/server/resources/pokemon/pokemonRouter.js b/poke-mongo/server/resources/pokemon/pokemonRouter.js new file mode 100644 index 0000000..7a1b5d1 --- /dev/null +++ b/poke-mongo/server/resources/pokemon/pokemonRouter.js @@ -0,0 +1,69 @@ +const express=require("express"); +const pokemonRouter = express.Router() +const Pokemon = require("./Pokemon"); +const bodyParser= require("body-parser"); +pokemonRouter.use(bodyParser()) +pokemonRouter.get("/",(req,res) => { + Pokemon.find({}) + .then((pokemons) => { + res.status(200).json(pokemons) + }) +}) + +pokemonRouter.get("/:number", (req,res) => { + Pokemon.findOne({ 'number':req.params.number }) + .then((pokemons) => { + res.status(200).json(pokemons) + }) + }); + + pokemonRouter.post("/", (req,res) => { + const userData = req.body; + const newPokemon = new Pokemon(userData); + newPokemon.save() + .then(() => { + console.log("Saved!") + res.status(201).json(newPokemon); +}) + .catch((error) => { + console.log("error"); + res.send(error) + }) +}) +pokemonRouter.put("/:number", (req,res) => { + + Pokemon.findOneAndUpdate({ number:req.params.number}, + { name:req.body.name, + types:req.body.types, + imageUrl:req.body.imageUrl + }) + .then(() => { + console.log("Saved!") + res.status(201).json(Pokemon); +}) + .catch((error) => { + console.log("error"); + res.send(error) +}) +}) + + +pokemonRouter.delete("/:number",(req,res) => { + Pokemon.where().findOneAndRemove({number:req.params.number},function (err, pokemon) { + if (err) return handleError(err); + console.log( pokemon); + }); + + res.send() +}) + +pokemonRouter.delete("/",(req,res) => { + Pokemon.deleteMany({},function (err, pokemon) { + if (err) return handleError(err); + + }); + + res.send() +}) + +module.exports = pokemonRouter; \ No newline at end of file From fd5ad07c49337b67719c468d361c3202d9d66ee3 Mon Sep 17 00:00:00 2001 From: eya26 Date: Wed, 29 Dec 2021 14:58:27 +0100 Subject: [PATCH 07/14] Back done 1 --- .../server/resources/pokemon/Pokemon.js | 2 + .../resources/pokemon/pokemonController.js | 68 +++++++++++++++++++ .../server/resources/pokemon/pokemonRouter.js | 68 +++---------------- 3 files changed, 80 insertions(+), 58 deletions(-) diff --git a/poke-mongo/server/resources/pokemon/Pokemon.js b/poke-mongo/server/resources/pokemon/Pokemon.js index a49ae6c..18b0535 100644 --- a/poke-mongo/server/resources/pokemon/Pokemon.js +++ b/poke-mongo/server/resources/pokemon/Pokemon.js @@ -11,3 +11,5 @@ var Pokemon = mongoose.model("Pokemon", }) module.exports = Pokemon; + + diff --git a/poke-mongo/server/resources/pokemon/pokemonController.js b/poke-mongo/server/resources/pokemon/pokemonController.js index e69de29..5c7e855 100644 --- a/poke-mongo/server/resources/pokemon/pokemonController.js +++ b/poke-mongo/server/resources/pokemon/pokemonController.js @@ -0,0 +1,68 @@ +const Pokemon = require("./Pokemon"); + + + +exports.pokemon_get_all = (req,res) => { + Pokemon.find({}) + .then((pokemons) => { + res.status(200).json(pokemons) + }) +} + + +exports.pokemon_get_one = (req,res) => { + Pokemon.findOne({ 'number':req.params.number }) + .then((pokemons) => { + res.status(200).json(pokemons) + }) + }; + +exports.pokemon_post = (req,res) => { + const userData = req.body; + const newPokemon = new Pokemon(userData); + newPokemon.save() + .then(() => { + console.log("Saved!") + res.status(201).json(newPokemon); +}) + .catch((error) => { + console.log("error"); + res.send(error) + }) +}; + +exports.pokemon_put = (req,res) => { + + Pokemon.findOneAndUpdate({ number:req.params.number}, + { name:req.body.name, + types:req.body.types, + imageUrl:req.body.imageUrl + }) + .then(() => { + console.log("Saved!") + res.status(201).json(Pokemon); +}) + .catch((error) => { + console.log("error"); + res.send(error) +}) +} + +exports.pokemon_delete_one = (req,res) => { + Pokemon.where().findOneAndRemove({number:req.params.number},function (err, pokemon) { + if (err) return handleError(err); + console.log( pokemon); + }); + + res.send() +}; + +exports.pokemon_delete = (req,res) => { + Pokemon.deleteMany({},function (err, pokemon) { + if (err) return handleError(err); + + }); + + res.send() +}; + diff --git a/poke-mongo/server/resources/pokemon/pokemonRouter.js b/poke-mongo/server/resources/pokemon/pokemonRouter.js index 7a1b5d1..3c9e515 100644 --- a/poke-mongo/server/resources/pokemon/pokemonRouter.js +++ b/poke-mongo/server/resources/pokemon/pokemonRouter.js @@ -1,69 +1,21 @@ const express=require("express"); const pokemonRouter = express.Router() const Pokemon = require("./Pokemon"); -const bodyParser= require("body-parser"); -pokemonRouter.use(bodyParser()) -pokemonRouter.get("/",(req,res) => { - Pokemon.find({}) - .then((pokemons) => { - res.status(200).json(pokemons) - }) -}) -pokemonRouter.get("/:number", (req,res) => { - Pokemon.findOne({ 'number':req.params.number }) - .then((pokemons) => { - res.status(200).json(pokemons) - }) - }); +const pokemonController =require("./pokemonController") +const bodyParser= require("body-parser"); - pokemonRouter.post("/", (req,res) => { - const userData = req.body; - const newPokemon = new Pokemon(userData); - newPokemon.save() - .then(() => { - console.log("Saved!") - res.status(201).json(newPokemon); -}) - .catch((error) => { - console.log("error"); - res.send(error) - }) -}) -pokemonRouter.put("/:number", (req,res) => { +pokemonRouter.use(bodyParser()) +pokemonRouter.get("/",pokemonController.pokemon_get_all); - Pokemon.findOneAndUpdate({ number:req.params.number}, - { name:req.body.name, - types:req.body.types, - imageUrl:req.body.imageUrl - }) - .then(() => { - console.log("Saved!") - res.status(201).json(Pokemon); -}) - .catch((error) => { - console.log("error"); - res.send(error) -}) -}) +pokemonRouter.get("/:number",pokemonController.pokemon_get_one); +pokemonRouter.post("/", pokemonController.pokemon_post) + +pokemonRouter.put("/:number", pokemonController.pokemon_put); -pokemonRouter.delete("/:number",(req,res) => { - Pokemon.where().findOneAndRemove({number:req.params.number},function (err, pokemon) { - if (err) return handleError(err); - console.log( pokemon); - }); - - res.send() -}) -pokemonRouter.delete("/",(req,res) => { - Pokemon.deleteMany({},function (err, pokemon) { - if (err) return handleError(err); - - }); - - res.send() -}) +pokemonRouter.delete("/:number",pokemonController.pokemon_delete_one); +pokemonRouter.delete("/",pokemonController.pokemon_delete); module.exports = pokemonRouter; \ No newline at end of file From 2ff403111c069638c22ea3e802138c1cb8daccbf Mon Sep 17 00:00:00 2001 From: MaroueneA <77628999+MaroueneA@users.noreply.github.com> Date: Wed, 29 Dec 2021 18:35:04 +0100 Subject: [PATCH 08/14] Update pokemonRouter.js --- poke-mongo/server/resources/pokemon/pokemonRouter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/poke-mongo/server/resources/pokemon/pokemonRouter.js b/poke-mongo/server/resources/pokemon/pokemonRouter.js index 3c9e515..1e11127 100644 --- a/poke-mongo/server/resources/pokemon/pokemonRouter.js +++ b/poke-mongo/server/resources/pokemon/pokemonRouter.js @@ -2,7 +2,7 @@ const express=require("express"); const pokemonRouter = express.Router() const Pokemon = require("./Pokemon"); -const pokemonController =require("./pokemonController") + const bodyParser= require("body-parser"); pokemonRouter.use(bodyParser()) @@ -18,4 +18,4 @@ pokemonRouter.put("/:number", pokemonController.pokemon_put); pokemonRouter.delete("/:number",pokemonController.pokemon_delete_one); pokemonRouter.delete("/",pokemonController.pokemon_delete); -module.exports = pokemonRouter; \ No newline at end of file +module.exports = pokemonRouter; From 14a5c4baeaf7816d9fc3156fa2249175a5bd1d08 Mon Sep 17 00:00:00 2001 From: MaroueneA <77628999+MaroueneA@users.noreply.github.com> Date: Wed, 29 Dec 2021 18:38:10 +0100 Subject: [PATCH 09/14] Update pokemonRouter.js --- poke-mongo/server/resources/pokemon/pokemonRouter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poke-mongo/server/resources/pokemon/pokemonRouter.js b/poke-mongo/server/resources/pokemon/pokemonRouter.js index 1e11127..a457e9a 100644 --- a/poke-mongo/server/resources/pokemon/pokemonRouter.js +++ b/poke-mongo/server/resources/pokemon/pokemonRouter.js @@ -2,7 +2,7 @@ const express=require("express"); const pokemonRouter = express.Router() const Pokemon = require("./Pokemon"); - +const pokemonController =require("./pokemonController") const bodyParser= require("body-parser"); pokemonRouter.use(bodyParser()) From 11a6f4af1307129a4db1de6a857e9a2a8a94cd89 Mon Sep 17 00:00:00 2001 From: MaroueneA <77628999+MaroueneA@users.noreply.github.com> Date: Wed, 29 Dec 2021 23:57:53 +0100 Subject: [PATCH 10/14] Update index.js --- poke-mongo/server/index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/poke-mongo/server/index.js b/poke-mongo/server/index.js index 585b154..30460ea 100644 --- a/poke-mongo/server/index.js +++ b/poke-mongo/server/index.js @@ -18,9 +18,6 @@ app.use(bodyParser()) - - - app.listen(8000, () => { console.log("started listening for resquests on port 8000"); -}) \ No newline at end of file +}) From 5725a3d371a8b187c9f3651e20d6d6bd9268172b Mon Sep 17 00:00:00 2001 From: eya26 Date: Thu, 30 Dec 2021 00:22:06 +0100 Subject: [PATCH 11/14] 1st front trial --- poke-mongo/client/.gitignore | 23 +++++ poke-mongo/client/README.md | 70 +++++++++++++ poke-mongo/client/package.json | 40 ++++++++ poke-mongo/client/public/favicon.ico | Bin 0 -> 3870 bytes poke-mongo/client/public/index.html | 43 ++++++++ poke-mongo/client/public/logo192.png | Bin 0 -> 5347 bytes poke-mongo/client/public/logo512.png | Bin 0 -> 9664 bytes poke-mongo/client/public/manifest.json | 25 +++++ poke-mongo/client/public/robots.txt | 3 + poke-mongo/client/src/App.css | 92 ++++++++++++++++++ poke-mongo/client/src/App.js | 32 ++++++ poke-mongo/client/src/App.test.js | 8 ++ .../client/src/components/PokemonList.jsx | 32 ++++++ .../client/src/components/addPokemon.jsx | 12 +++ poke-mongo/client/src/index.css | 13 +++ poke-mongo/client/src/index.js | 17 ++++ poke-mongo/client/src/logo.svg | 1 + poke-mongo/client/src/reportWebVitals.js | 13 +++ poke-mongo/client/src/setupTests.js | 5 + poke-mongo/data/logo.png | Bin 0 -> 8990 bytes poke-mongo/data/pokemon.json | 2 +- poke-mongo/package.json | 3 +- 22 files changed, 432 insertions(+), 2 deletions(-) create mode 100644 poke-mongo/client/.gitignore create mode 100644 poke-mongo/client/README.md create mode 100644 poke-mongo/client/package.json create mode 100644 poke-mongo/client/public/favicon.ico create mode 100644 poke-mongo/client/public/index.html create mode 100644 poke-mongo/client/public/logo192.png create mode 100644 poke-mongo/client/public/logo512.png create mode 100644 poke-mongo/client/public/manifest.json create mode 100644 poke-mongo/client/public/robots.txt create mode 100644 poke-mongo/client/src/App.css create mode 100644 poke-mongo/client/src/App.js create mode 100644 poke-mongo/client/src/App.test.js create mode 100644 poke-mongo/client/src/components/PokemonList.jsx create mode 100644 poke-mongo/client/src/components/addPokemon.jsx create mode 100644 poke-mongo/client/src/index.css create mode 100644 poke-mongo/client/src/index.js create mode 100644 poke-mongo/client/src/logo.svg create mode 100644 poke-mongo/client/src/reportWebVitals.js create mode 100644 poke-mongo/client/src/setupTests.js create mode 100644 poke-mongo/data/logo.png diff --git a/poke-mongo/client/.gitignore b/poke-mongo/client/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/poke-mongo/client/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/poke-mongo/client/README.md b/poke-mongo/client/README.md new file mode 100644 index 0000000..58beeac --- /dev/null +++ b/poke-mongo/client/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/poke-mongo/client/package.json b/poke-mongo/client/package.json new file mode 100644 index 0000000..03fbf96 --- /dev/null +++ b/poke-mongo/client/package.json @@ -0,0 +1,40 @@ +{ + "name": "client", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.16.1", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-scripts": "5.0.0", + "web-vitals": "^2.1.2" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "proxy":"http://localhost:8000", + + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/poke-mongo/client/public/favicon.ico b/poke-mongo/client/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/poke-mongo/client/public/index.html b/poke-mongo/client/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/poke-mongo/client/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/poke-mongo/client/public/logo192.png b/poke-mongo/client/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/poke-mongo/client/public/manifest.json b/poke-mongo/client/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/poke-mongo/client/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/poke-mongo/client/public/robots.txt b/poke-mongo/client/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/poke-mongo/client/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/poke-mongo/client/src/App.css b/poke-mongo/client/src/App.css new file mode 100644 index 0000000..1d425ef --- /dev/null +++ b/poke-mongo/client/src/App.css @@ -0,0 +1,92 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.title { + color: red; + text-align: center; + font-family: serif; + size: 600; +} + +.header{ + margin-left: 18%; + display: inline-block; +} +.myLogo { + align-content: center; + display: inline; + float: left; + margin-top: 10px; + margin-left: 30px; + margin-right: autos; + width: 50%; + content:url("https://www.internetmatters.org/wp-content/uploads/2018/01/Pok%C3%A9mon_GO_logo-600x314.png"); +} + +.user { + text-align: center; + white-space: nowrap; + display: inline; + float: left; + margin-top: 100px; + margin-right: 2px; + font-size: large; + color: red; + text-align: center; + font-family: serif; + font-size: 35px; +} + +.button { + background-color: black; + font-weight: 200; + margin-top: 40px; + border: solid 2px; + padding: 10px; + font-size: 20px; + color: white; + width: 20%; + margin-left: 10%; + align-self: center; +} + +.button:hover { + background-color: green; + color: white; +} diff --git a/poke-mongo/client/src/App.js b/poke-mongo/client/src/App.js new file mode 100644 index 0000000..13a0eea --- /dev/null +++ b/poke-mongo/client/src/App.js @@ -0,0 +1,32 @@ +import React, {useState} from 'react'; +import PokemonList from './components/PokemonList'; +import addPokemon from './components/addPokemon'; +import './App.css'; + +export default function App (){ + const [active,setActive] = useState("Add") + return ( +
+
+
+ +
+ {active === "List" && } + {active === "Add" && } + + +
+ +
+ + + ) + +}; + + diff --git a/poke-mongo/client/src/App.test.js b/poke-mongo/client/src/App.test.js new file mode 100644 index 0000000..1f03afe --- /dev/null +++ b/poke-mongo/client/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/poke-mongo/client/src/components/PokemonList.jsx b/poke-mongo/client/src/components/PokemonList.jsx new file mode 100644 index 0000000..0d23e08 --- /dev/null +++ b/poke-mongo/client/src/components/PokemonList.jsx @@ -0,0 +1,32 @@ +import React, { Component } from 'react'; +class PokemonList extends React.Component { + constructor(){ + super(); + this.state={ + pokemons:[{number:0,name:"",types:[],imageUrl:""}] + } + } + + componentDidMount(){ + fetch('./pokemon') + .then(res => res.json()) + .then(pokemons => this.setState({pokemons}, () => console.log('Pokemons fetched', pokemons))) + } + render() { + return( +
+

PokemonList

+
    + {this.state.pokemons.map(pokemon => +
  • {pokemon.name}
  • )} +
+ + + +
+ ); + } + } + + +export default PokemonList; diff --git a/poke-mongo/client/src/components/addPokemon.jsx b/poke-mongo/client/src/components/addPokemon.jsx new file mode 100644 index 0000000..cef3006 --- /dev/null +++ b/poke-mongo/client/src/components/addPokemon.jsx @@ -0,0 +1,12 @@ +import React, { Component } from 'react'; +class addPokemon extends React.Component { + render() { + return ( +
+

Add

+
+ ); + } +} + +export default addPokemon; \ No newline at end of file diff --git a/poke-mongo/client/src/index.css b/poke-mongo/client/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/poke-mongo/client/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/poke-mongo/client/src/index.js b/poke-mongo/client/src/index.js new file mode 100644 index 0000000..ef2edf8 --- /dev/null +++ b/poke-mongo/client/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/poke-mongo/client/src/logo.svg b/poke-mongo/client/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/poke-mongo/client/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/poke-mongo/client/src/reportWebVitals.js b/poke-mongo/client/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/poke-mongo/client/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/poke-mongo/client/src/setupTests.js b/poke-mongo/client/src/setupTests.js new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/poke-mongo/client/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/poke-mongo/data/logo.png b/poke-mongo/data/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4a90444f54cea5b7822f9b5de4d3faa702c263 GIT binary patch literal 8990 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 Date: Thu, 30 Dec 2021 17:44:30 +0100 Subject: [PATCH 12/14] front 2nd --- poke-mongo/client/package.json | 7 ++-- poke-mongo/client/src/App.js | 4 +- .../client/src/components/addPokemon.jsx | 40 +++++++++++++++++-- poke-mongo/package.json | 9 ++++- poke-mongo/server/package.json | 1 + 5 files changed, 51 insertions(+), 10 deletions(-) diff --git a/poke-mongo/client/package.json b/poke-mongo/client/package.json index 03fbf96..d6d1255 100644 --- a/poke-mongo/client/package.json +++ b/poke-mongo/client/package.json @@ -6,10 +6,12 @@ "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", + "axios": "^0.24.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-scripts": "5.0.0", - "web-vitals": "^2.1.2" + "web-vitals": "^2.1.2", + "webpack": "^5.65.0" }, "scripts": { "start": "react-scripts start", @@ -17,8 +19,7 @@ "test": "react-scripts test", "eject": "react-scripts eject" }, - "proxy":"http://localhost:8000", - + "proxy": "http://localhost:8000", "eslintConfig": { "extends": [ "react-app", diff --git a/poke-mongo/client/src/App.js b/poke-mongo/client/src/App.js index 13a0eea..e9a0d5d 100644 --- a/poke-mongo/client/src/App.js +++ b/poke-mongo/client/src/App.js @@ -1,6 +1,6 @@ import React, {useState} from 'react'; import PokemonList from './components/PokemonList'; -import addPokemon from './components/addPokemon'; +import AddPokemon from './components/AddPokemon'; import './App.css'; export default function App (){ @@ -17,7 +17,7 @@ export default function App (){
{active === "List" && } - {active === "Add" && } + {active === "Add" && }
diff --git a/poke-mongo/client/src/components/addPokemon.jsx b/poke-mongo/client/src/components/addPokemon.jsx index cef3006..61bc464 100644 --- a/poke-mongo/client/src/components/addPokemon.jsx +++ b/poke-mongo/client/src/components/addPokemon.jsx @@ -1,12 +1,46 @@ import React, { Component } from 'react'; -class addPokemon extends React.Component { + +import { response } from 'express'; +class AddPokemon extends React.Component { + constructor(){ + super(); + this.state={ + pokemons:[{number:0,name:"",types:[],imageUrl:""}] + } + } + + changeHandler = (e) => { + this.setState({[e.target.name] : e.target.value}) + } + + + + render() { + const {name,types,imgUrl} = this.state return (
-

Add

+
+
+ + +
+
+ + +
+
+ + +
+ + + + +
); } } -export default addPokemon; \ No newline at end of file +export default AddPokemon; \ No newline at end of file diff --git a/poke-mongo/package.json b/poke-mongo/package.json index 0166463..df174c1 100644 --- a/poke-mongo/package.json +++ b/poke-mongo/package.json @@ -12,11 +12,16 @@ "license": "ISC", "dependencies": { "body-parser": "^1.19.1", + "browserify-zlib": "^0.2.0", "concurrently": "^6.5.1", "express": "^4.17.2", - "mongoose": "^6.1.4" + "mongoose": "^6.1.4", + "node-polyfill-webpack-plugin": "^1.1.4", + "path-browserify": "^1.0.1", + "util": "^0.12.4" }, "devDependencies": { - "nodemon": "^2.0.15" + "nodemon": "^2.0.15", + "webpack": "^5.65.0" } } diff --git a/poke-mongo/server/package.json b/poke-mongo/server/package.json index 8a0140a..144fdab 100644 --- a/poke-mongo/server/package.json +++ b/poke-mongo/server/package.json @@ -5,6 +5,7 @@ "main": "index.js", "scripts": { "start": "node index.js", + "start-dev": "nodemon index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", From 0290fc07eae01a66fac90677c11bffdeedee9a99 Mon Sep 17 00:00:00 2001 From: eya26 Date: Fri, 31 Dec 2021 03:35:45 +0100 Subject: [PATCH 13/14] Post to back --- poke-mongo/client/package.json | 1 + poke-mongo/client/src/App.css | 15 ++++++ poke-mongo/client/src/App.js | 14 +++-- .../client/src/components/AddPokemon.css | 45 ++++++++++++++++ .../client/src/components/AddPokemon.js | 52 +++++++++++++++++++ poke-mongo/client/src/components/NavBar.js | 21 ++++++++ .../{PokemonList.jsx => PokemonList.js} | 6 +-- .../client/src/components/addPokemon.jsx | 46 ---------------- poke-mongo/client/src/index.css | 4 ++ poke-mongo/package.json | 1 + .../resources/pokemon/pokemonController.js | 21 ++++---- .../server/resources/pokemon/pokemonRouter.js | 1 + 12 files changed, 164 insertions(+), 63 deletions(-) create mode 100644 poke-mongo/client/src/components/AddPokemon.css create mode 100644 poke-mongo/client/src/components/AddPokemon.js create mode 100644 poke-mongo/client/src/components/NavBar.js rename poke-mongo/client/src/components/{PokemonList.jsx => PokemonList.js} (92%) delete mode 100644 poke-mongo/client/src/components/addPokemon.jsx diff --git a/poke-mongo/client/package.json b/poke-mongo/client/package.json index d6d1255..49d457f 100644 --- a/poke-mongo/client/package.json +++ b/poke-mongo/client/package.json @@ -9,6 +9,7 @@ "axios": "^0.24.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-router-dom": "^6.2.1", "react-scripts": "5.0.0", "web-vitals": "^2.1.2", "webpack": "^5.65.0" diff --git a/poke-mongo/client/src/App.css b/poke-mongo/client/src/App.css index 1d425ef..84c87f1 100644 --- a/poke-mongo/client/src/App.css +++ b/poke-mongo/client/src/App.css @@ -90,3 +90,18 @@ background-color: green; color: white; } + + + +.Login-component { + /* The image used */ + background-image: url(https://i.gadgets360cdn.com/large/pokemon_go_1571750706913.jpg); + + /* Full height */ + height: 100%; + + /* Center and scale the image nicely */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} \ No newline at end of file diff --git a/poke-mongo/client/src/App.js b/poke-mongo/client/src/App.js index e9a0d5d..69cd136 100644 --- a/poke-mongo/client/src/App.js +++ b/poke-mongo/client/src/App.js @@ -1,23 +1,31 @@ import React, {useState} from 'react'; import PokemonList from './components/PokemonList'; import AddPokemon from './components/AddPokemon'; +import NavBar from './components/NavBar'; + import './App.css'; + + export default function App (){ - const [active,setActive] = useState("Add") + const [active,setActive] = useState("NavBar") return (
); } diff --git a/poke-mongo/client/src/components/addPokemon.jsx b/poke-mongo/client/src/components/addPokemon.jsx deleted file mode 100644 index 61bc464..0000000 --- a/poke-mongo/client/src/components/addPokemon.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { Component } from 'react'; - -import { response } from 'express'; -class AddPokemon extends React.Component { - constructor(){ - super(); - this.state={ - pokemons:[{number:0,name:"",types:[],imageUrl:""}] - } - } - - changeHandler = (e) => { - this.setState({[e.target.name] : e.target.value}) - } - - - - - render() { - const {name,types,imgUrl} = this.state - return ( -
-
-
- - -
-
- - -
-
- - -
- - - - -
-
- ); - } -} - -export default AddPokemon; \ No newline at end of file diff --git a/poke-mongo/client/src/index.css b/poke-mongo/client/src/index.css index ec2585e..b749421 100644 --- a/poke-mongo/client/src/index.css +++ b/poke-mongo/client/src/index.css @@ -11,3 +11,7 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } +body, html, .Login-component { + height: 100%; + margin: 0; +} diff --git a/poke-mongo/package.json b/poke-mongo/package.json index df174c1..e0e8473 100644 --- a/poke-mongo/package.json +++ b/poke-mongo/package.json @@ -15,6 +15,7 @@ "browserify-zlib": "^0.2.0", "concurrently": "^6.5.1", "express": "^4.17.2", + "jquery": "^3.6.0", "mongoose": "^6.1.4", "node-polyfill-webpack-plugin": "^1.1.4", "path-browserify": "^1.0.1", diff --git a/poke-mongo/server/resources/pokemon/pokemonController.js b/poke-mongo/server/resources/pokemon/pokemonController.js index 5c7e855..5f2b3cb 100644 --- a/poke-mongo/server/resources/pokemon/pokemonController.js +++ b/poke-mongo/server/resources/pokemon/pokemonController.js @@ -1,7 +1,11 @@ +const { json } = require("body-parser"); +const { render } = require("express/lib/response"); const Pokemon = require("./Pokemon"); + + exports.pokemon_get_all = (req,res) => { Pokemon.find({}) .then((pokemons) => { @@ -18,16 +22,13 @@ exports.pokemon_get_one = (req,res) => { }; exports.pokemon_post = (req,res) => { - const userData = req.body; - const newPokemon = new Pokemon(userData); - newPokemon.save() - .then(() => { - console.log("Saved!") - res.status(201).json(newPokemon); -}) - .catch((error) => { - console.log("error"); - res.send(error) + console.log("the new pokemon is :",req.body); + const newPokemon = new Pokemon(req.body); + newPokemon.save().then((pokemon) =>{ + res.status(201).send(pokemon) + }) + .catch((error)=> { + res.status(500).send(error); }) }; diff --git a/poke-mongo/server/resources/pokemon/pokemonRouter.js b/poke-mongo/server/resources/pokemon/pokemonRouter.js index a457e9a..0ae1317 100644 --- a/poke-mongo/server/resources/pokemon/pokemonRouter.js +++ b/poke-mongo/server/resources/pokemon/pokemonRouter.js @@ -1,6 +1,7 @@ const express=require("express"); const pokemonRouter = express.Router() const Pokemon = require("./Pokemon"); +pokemonRouter.use(express.json()) const pokemonController =require("./pokemonController") const bodyParser= require("body-parser"); From 3a74b48121155e76360c95c7dfeb50bfe969e43f Mon Sep 17 00:00:00 2001 From: eya26 Date: Fri, 31 Dec 2021 23:17:32 +0100 Subject: [PATCH 14/14] Last --- poke-mongo/client/src/App.css | 31 +++++------ poke-mongo/client/src/App.js | 37 ++++++------- .../client/src/components/AddPokemon.css | 18 ++++-- .../client/src/components/AddPokemon.js | 3 +- .../client/src/components/DeletePokemon.js | 52 ++++++++++++++++++ poke-mongo/client/src/components/NavBar.css | 10 ++++ poke-mongo/client/src/components/NavBar.js | 13 +---- .../client/src/components/PokemonList.css | 19 +++++++ .../client/src/components/PokemonList.js | 3 +- poke-mongo/client/src/index.css | 7 +-- ...n-go-logo-transparent-removebg-preview.png | Bin 0 -> 222535 bytes 11 files changed, 136 insertions(+), 57 deletions(-) create mode 100644 poke-mongo/client/src/components/DeletePokemon.js create mode 100644 poke-mongo/client/src/components/NavBar.css create mode 100644 poke-mongo/client/src/components/PokemonList.css create mode 100644 poke-mongo/data/2-24425_pinoy-pokemon-go-pokemon-go-logo-transparent-removebg-preview.png diff --git a/poke-mongo/client/src/App.css b/poke-mongo/client/src/App.css index 84c87f1..90c5ac9 100644 --- a/poke-mongo/client/src/App.css +++ b/poke-mongo/client/src/App.css @@ -56,9 +56,8 @@ margin-left: 30px; margin-right: autos; width: 50%; - content:url("https://www.internetmatters.org/wp-content/uploads/2018/01/Pok%C3%A9mon_GO_logo-600x314.png"); + content: url('https://o.remove.bg/downloads/164a26ba-41cd-4d7d-b500-8075dc058961/2-24425_pinoy-pokemon-go-pokemon-go-logo-transparent-removebg-preview.png'); } - .user { text-align: center; white-space: nowrap; @@ -67,14 +66,14 @@ margin-top: 100px; margin-right: 2px; font-size: large; - color: red; + color: #004478; text-align: center; font-family: serif; - font-size: 35px; + font-size: 70px; } .button { - background-color: black; + background-color: #00559A; font-weight: 200; margin-top: 40px; border: solid 2px; @@ -91,17 +90,15 @@ color: white; } +.Welcome { + background-image: url('https://png.pngtree.com/thumb_back/fw800/back_our/20190628/ourmid/pngtree-elegant-light-blue-line-background-image_272095.jpg'); + width:100%; + height:100%; + + box-sizing:border-box; + background-size:cover; + background-repeat:no-repeat; + background-position:center center; +} -.Login-component { - /* The image used */ - background-image: url(https://i.gadgets360cdn.com/large/pokemon_go_1571750706913.jpg); - - /* Full height */ - height: 100%; - - /* Center and scale the image nicely */ - background-position: center; - background-repeat: no-repeat; - background-size: cover; -} \ No newline at end of file diff --git a/poke-mongo/client/src/App.js b/poke-mongo/client/src/App.js index 69cd136..e919992 100644 --- a/poke-mongo/client/src/App.js +++ b/poke-mongo/client/src/App.js @@ -1,37 +1,36 @@ import React, {useState} from 'react'; import PokemonList from './components/PokemonList'; import AddPokemon from './components/AddPokemon'; +import DeletePokemon from './components/DeletePokemon'; import NavBar from './components/NavBar'; import './App.css'; + export default function App (){ const [active,setActive] = useState("NavBar") return ( +
+
+
+
-
- +
) diff --git a/poke-mongo/client/src/components/AddPokemon.css b/poke-mongo/client/src/components/AddPokemon.css index 020b38d..de4cbbd 100644 --- a/poke-mongo/client/src/components/AddPokemon.css +++ b/poke-mongo/client/src/components/AddPokemon.css @@ -2,13 +2,13 @@ font-family: 'Open Sans', sans-serif; } #submit-button { - background-color: grey; + background-color: #00559A; font-weight: 200; margin-top: 40px; - border: solid 4px; + border: solid 1px; padding: 10px; font-size: 20px; - color: black; + color: white; width: 20%; margin-left: 25%; @@ -26,9 +26,11 @@ font: bold; margin-top: 10px; margin-left:30px; + margin-right: 10px; font-family: Zen Antique; - color: blue; - size: 50px; + color: white; + font-size: 18px; + font-weight: bold; } @@ -42,4 +44,10 @@ label{ size: 70px; font: bold; +} + +.Form { + border-color: blue; + box-sizing:border-box; + position: static; } \ No newline at end of file diff --git a/poke-mongo/client/src/components/AddPokemon.js b/poke-mongo/client/src/components/AddPokemon.js index 21afb93..06b1efa 100644 --- a/poke-mongo/client/src/components/AddPokemon.js +++ b/poke-mongo/client/src/components/AddPokemon.js @@ -3,6 +3,7 @@ import react, {useState} from "react"; import './AddPokemon.css'; import axios from 'axios' + const AddPokemon = () => { const [number, setNumber] = useState(""); const [name, setName] = useState(""); @@ -20,7 +21,7 @@ const AddPokemon = () => { } return ( -
+
diff --git a/poke-mongo/client/src/components/DeletePokemon.js b/poke-mongo/client/src/components/DeletePokemon.js new file mode 100644 index 0000000..d0eaf52 --- /dev/null +++ b/poke-mongo/client/src/components/DeletePokemon.js @@ -0,0 +1,52 @@ +import React, { PureComponent } from 'react'; +import {useState, useEffect} from 'react' ; +import axios from 'axios' +class DeletePokemon extends React.Component { + constructor(){ + super(); + this.state={ + pokemons:[{number:0,name:"",types:[],imageUrl:""}] + } + } + componentDidMount(){ + fetch('./pokemon') + .then(res => res.json()) + .then(pokemons => this.setState({pokemons}, () => console.log('Pokemons fetched', pokemons))) + } + + Delete = () => { + axios.delete('./pokemon/:number', { + number: this.state.number, + name: this.state.name, + types: this.state.types, + imageUrl: this.state.imageUrl + + }) + .then(res => { + const pok = this.state.pokemons.filter(c => c.number !== res); + this.setState({ pok })}) + .catch(error =>console.log(error.message)) + } + + handleDelete = item => { + const Newpokemons = this.state.pokemons.filter(c => c.number !== item.number); + this.setState({ pokemons: Newpokemons }); + }; + render() { + return( +
+

List Of Pokemons

+
    + {this.state.pokemons.map(pokemon => +
  • Name :{pokemon.name}
    types: {pokemon.types}
    +
  • )} +
+
+ ); + } + } + + + + +export default DeletePokemon \ No newline at end of file diff --git a/poke-mongo/client/src/components/NavBar.css b/poke-mongo/client/src/components/NavBar.css new file mode 100644 index 0000000..c1870f5 --- /dev/null +++ b/poke-mongo/client/src/components/NavBar.css @@ -0,0 +1,10 @@ +.HomePage { + margin-top: 100px; + margin-right: 2px; + font-size: large; + color: #174E78; + text-align: center; + font-family: serif; + font-size: 65px; + font-weight: bold; +} \ No newline at end of file diff --git a/poke-mongo/client/src/components/NavBar.js b/poke-mongo/client/src/components/NavBar.js index 2f297c7..b0d6ab0 100644 --- a/poke-mongo/client/src/components/NavBar.js +++ b/poke-mongo/client/src/components/NavBar.js @@ -1,17 +1,10 @@ import React, { Component } from 'react'; -import { Link } from "react-router-dom"; +import './NavBar.css' class NavBar extends React.Component { render() { return ( -
- +
+ Welcome to PokemonGo game
) diff --git a/poke-mongo/client/src/components/PokemonList.css b/poke-mongo/client/src/components/PokemonList.css new file mode 100644 index 0000000..2257e64 --- /dev/null +++ b/poke-mongo/client/src/components/PokemonList.css @@ -0,0 +1,19 @@ +ul{ + min-width: 696px; + list-style: none; + padding-top: 20px; + } + li{ + display: inline; + } + +.titlePok{ + margin-top: 100px; + margin-right: 2px; + font-size: large; + color: #174E78; + text-align: center; + font-family: serif; + font-size: 50px; + font-weight: bold; +} \ No newline at end of file diff --git a/poke-mongo/client/src/components/PokemonList.js b/poke-mongo/client/src/components/PokemonList.js index d0f660a..4787c12 100644 --- a/poke-mongo/client/src/components/PokemonList.js +++ b/poke-mongo/client/src/components/PokemonList.js @@ -1,4 +1,5 @@ import React, { Component } from 'react'; +import './PokemonList.css' class PokemonList extends React.Component { constructor(){ super(); @@ -16,7 +17,7 @@ class PokemonList extends React.Component { render() { return(
-

PokemonList

+

List Of Pokemons

-
+ +
+ {active === "NavBar" && } {active === "List" && } {active === "Add" && } +
diff --git a/poke-mongo/client/src/components/AddPokemon.css b/poke-mongo/client/src/components/AddPokemon.css new file mode 100644 index 0000000..020b38d --- /dev/null +++ b/poke-mongo/client/src/components/AddPokemon.css @@ -0,0 +1,45 @@ +* { + font-family: 'Open Sans', sans-serif; +} +#submit-button { + background-color: grey; + font-weight: 200; + margin-top: 40px; + border: solid 4px; + padding: 10px; + font-size: 20px; + color: black; + width: 20%; + margin-left: 25%; + +} +#submit-button:hover{ + background-color: green; + color: white; + +} +#image { + margin-left: 25%; +} +.input { + display: flex; + font: bold; + margin-top: 10px; + margin-left:30px; + font-family: Zen Antique; + color: blue; + size: 50px; + +} + +label{ + width:5%; +} +#title { + font-family: Zen Antique; + color: navy; + margin-left: 25%; + size: 70px; + font: bold; + +} \ No newline at end of file diff --git a/poke-mongo/client/src/components/AddPokemon.js b/poke-mongo/client/src/components/AddPokemon.js new file mode 100644 index 0000000..21afb93 --- /dev/null +++ b/poke-mongo/client/src/components/AddPokemon.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; +import react, {useState} from "react"; +import './AddPokemon.css'; +import axios from 'axios' + +const AddPokemon = () => { + const [number, setNumber] = useState(""); + const [name, setName] = useState(""); + const [types, setTypes] = useState(""); + const [imageUrl, setImg] = useState(""); + + const submit = () => { + axios.post('./pokemon', { + number, + name, + types, + imageUrl + }).then(res => console.log(res)) + .catch(error =>console.log(error.message)) + } + + return ( +
+
+
+ + setNumber(e.target.value)} /> +
+
+ + setName(e.target.value)} /> +
+
+ + setTypes(e.target.value)} /> +
+
+ + setImg(e.target.value)} /> +
+ + + + +
+
+ ) + +} + + +export default AddPokemon \ No newline at end of file diff --git a/poke-mongo/client/src/components/NavBar.js b/poke-mongo/client/src/components/NavBar.js new file mode 100644 index 0000000..2f297c7 --- /dev/null +++ b/poke-mongo/client/src/components/NavBar.js @@ -0,0 +1,21 @@ +import React, { Component } from 'react'; +import { Link } from "react-router-dom"; +class NavBar extends React.Component { + render() { + return ( +
+ + ) + } +} + +export default NavBar ; \ No newline at end of file diff --git a/poke-mongo/client/src/components/PokemonList.jsx b/poke-mongo/client/src/components/PokemonList.js similarity index 92% rename from poke-mongo/client/src/components/PokemonList.jsx rename to poke-mongo/client/src/components/PokemonList.js index 0d23e08..d0f660a 100644 --- a/poke-mongo/client/src/components/PokemonList.jsx +++ b/poke-mongo/client/src/components/PokemonList.js @@ -6,6 +6,7 @@ class PokemonList extends React.Component { pokemons:[{number:0,name:"",types:[],imageUrl:""}] } } + componentDidMount(){ fetch('./pokemon') @@ -19,10 +20,7 @@ class PokemonList extends React.Component {
    {this.state.pokemons.map(pokemon =>
  • {pokemon.name}
  • )} -
- - - +