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
125 changes: 125 additions & 0 deletions 4-natours/starter/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
const express = require('express');
const morgan = require('morgan');
const app = express();

app.use(express.json());
app.use(morgan('tiny'));

app.use((req, res, next) => {
console.log('Hello from the middleware');
next();
});

const tourRouter = require('./routes/tourRoutes');
const userRouter = require('./routes/userRoutes');

app.use('/api/v1/tours', tourRouter);
app.use('/api/v1/users', userRouter);

module.exports = app;

//-----------CLOSURES

// const heavyDuty = (index) => {
// const bigArray = new Array(10000).fill('😀');
// console.log('created!!!');
// return bigArray[in dex];
// };

// console.log(heavyDuty(688));
// console.log(heavyDuty(800));
// console.log(heavyDuty(900));

// const heavyDuty2 = (index) => {
// const bigArray = new Array(10000).fill('😀');
// console.log('created Again!!!');
// return (index) => {
// return bigArray[index];
// };
// };

// const getHeavyDuty = heavyDuty2();
// console.log(getHeavyDuty(600));
// console.log(getHeavyDuty(800));
// console.log(getHeavyDuty(600));

//-------Encapsulation(closures)

// const makeNuclearButton = () => {
// let timeWithoutDestruction = 0;
// const passTime = () => timeWithoutDestruction++;
// const totalPeaceTime = () => timeWithoutDestruction;
// const launch = () => {
// timeWithoutDestruction -= 1;
// return '🔥';
// };
// setInterval(passTime, 1000);
// return {
// launch,
// totalPeaceTime,
// };
// };

// const ohno = makeNuclearButton();
// console.log(ohno.totalPeaceTime());

//------------------

// var a= "hi";
// const sample=()=> {
// console.log ("original", a);
// var a= "bye";
// console.log("new", a);

// }
// sample();
// console.log(a);
//'use strict'

// const a = function () {
// console.log('a', this);
// const b = function () {
// console.log('b', this);
// const c = {
// hi: function () {
// console.log('c', this);
// },
// };
// c.hi();
// };
// b();
// };
// a();

// const obj = {
// name: 'happy',
// sing() {
// console.log('a', this);
// var anotherFunc = () => {
// console.log('b', this);
// };
// anotherFunc();
// },
// };
// obj.sing();

// const character = {
// name: 'Simon',
// getCharacter() {
// return this.name;
// },
// };

// const give = character.getCharacter();
// console.log('?', give);
// console.log(typeof [4].toString());
// console.log(1 == '1');
// function sum(a, b) {
// return a + b;
// }
// console.log(sum(NaN, typeof null));

// function a( ) {
// return this;
// }
// console.log(a.call());
110 changes: 110 additions & 0 deletions 4-natours/starter/controllers/toursControllers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
const fs = require('fs');

const tours = JSON.parse(fs.readFileSync('./dev-data/data/tours-simple.json'));

exports.checkID = (req, res, next, val) => {
if (+val > tours.length) {
res.status(202).json({
message: 'Wrong ID',
});
}
next();
};

exports.checkBody = (req, res, next) => {
if (!req.body || !req.body.name) {
res.status(400).json({
message: 'Body is empty',
});
}
next();
};

exports.getAllTours = (req, res) => {
res.status(200).json({
status: 'success',
tours,
});
};

exports.getTourByID = (req, res) => {
const id = +req.params.id;
const tour = tours.filter((item) => item.id === id);

if (tour.length === 0) {
return res.status(404).json({
status: '404',
});
}

res.status(200).json({
status: 'success',
results: tours.length,
tour,
});
};

exports.updateToursByOne = (req, res) => {
if (+req.params.id > tours.length) {
return res.status(404).json({
status: '404',
});
}

res.status(200).json({
status: 'success',
data: {
tour: '<Updated tour here...>',
},
});
const updatedTours = tours.map((item) => {
if (item.id === +req.params.id) {
return { ...item, ...req.body };
}
return item;
});
fs.writeFile(
'./dev-data/data/tours-simple.json',
JSON.stringify(updatedTours),
(err) => {
res.status(201).json({
status: 'success',
data: {
tour: updatedTours,
},
});
}
);
};

exports.updateAllToursByOneUsingPost = (req, res) => {
const newID = tours[tours.length - 1].id + 1;
//const newTour = Object.assign({ id: newID }, req.body);
const newTour = { ...req.body, id: newID };
tours.push(newTour);
fs.writeFile(
'./dev-data/data/tours-simple.json',
JSON.stringify(tours),
(err) => {
res.status(201).json({
status: 'success',
data: {
tour: newTour,
},
});
}
);
};

exports.deleteTour = (req, res) => {
if (+req.params.id > tours.length) {
return res.status(404).json({
status: '404',
});
}

res.status(204).json({
status: 'success',
data: null,
});
};
18 changes: 18 additions & 0 deletions 4-natours/starter/controllers/userControllers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const fs = require('fs');

const tours = JSON.parse(fs.readFileSync('./dev-data/data/tours-simple.json'));

exports.getUsersName = (req, res) => {
console.log('hello');
const users = tours.map((item) => item.name);
res.status(200).json({
users,
});
};

exports.getUserNameByID = (req, res) => {
const user = tours.filter((item) => +req.params.id === item.id)[0].name;
res.status(200).json({
name: user,
});
};
16 changes: 16 additions & 0 deletions 4-natours/starter/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "starter",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.1",
"morgan": "^1.10.0",
"superagent": "^7.1.3"
},
"author": "",
"license": "ISC"
}
19 changes: 19 additions & 0 deletions 4-natours/starter/routes/tourRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const express = require('express');
const tourController = require('../controllers/toursControllers');
const router = express.Router();
// app.use('/api/v1/tours', router);

router.param('id', tourController.checkID);

router
.route('/')
.get(tourController.getAllTours)
.post(tourController.checkBody, tourController.updateAllToursByOneUsingPost);

router
.route('/:id')
.get(tourController.getTourByID)
.patch(tourController.updateToursByOne)
.delete(tourController.deleteTour);

module.exports = router;
15 changes: 15 additions & 0 deletions 4-natours/starter/routes/userRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const express = require('express');
const userController= require('../controllers/userControllers');
const router = express.Router();

// app.use('/api/v1/users', router);

router.param('id', (req, res, next, val) => {
console.log('id= ', val);
next();
});

router.route('/').get(userController.getUsersName);
router.route('/:id').get(userController.getUserNameByID);

module.exports = router;
5 changes: 5 additions & 0 deletions 4-natours/starter/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const app= require('./app');
const port = 3000;
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
Loading