From 34311079bd65e648d325bcfed7e97f0e7c03a2f5 Mon Sep 17 00:00:00 2001 From: Jordi Date: Thu, 29 Jul 2021 18:11:56 +0200 Subject: [PATCH 01/20] feat: env created (won't appear) and made file executable on CL --- package-lock.json | 382 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 + 2 files changed, 384 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index fcf3619..bf02ed4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,388 @@ { "name": "node-moviedb-cli", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "commander": "^6.1.0", + "dotenv": "^8.2.0", + "node-notifier": "^8.0.0", + "ora": "^5.1.0" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk/node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", + "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/ora": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", + "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", + "dependencies": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/cli-spinners": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", + "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "node_modules/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + } + }, "dependencies": { "chalk": { "version": "4.1.0", diff --git a/package.json b/package.json index f20c9c6..e5f59d3 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,9 @@ "type": "git", "url": "https://github.com/assembler-school/node-moviedb-cli.git" }, + "bin": { + "moviedb": "./src/moviedb.js" + }, "scripts": {}, "dependencies": { "chalk": "^4.1.0", From 292a86548d13ae3a17fd70ceb700e59c1458e0ff Mon Sep 17 00:00:00 2001 From: Jordi Date: Thu, 29 Jul 2021 18:23:36 +0200 Subject: [PATCH 02/20] fix: added missing require for env to acces env file --- src/moviedb.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/moviedb.js b/src/moviedb.js index dd5591a..aafb0ef 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -1,6 +1,7 @@ #!/usr/bin/env node const { Command } = require("commander"); +require("dotenv/config"); const program = new Command(); program.version("0.0.1"); @@ -30,7 +31,7 @@ program .command("get-movie") .description("Make a network request to fetch the data of a single person") .action(function handleAction() { - console.log("hello-world"); + console.log(process.env.API_KEY); }); // error on unknown commands From 30ac83786a7a15435849c27304f200cf777830f9 Mon Sep 17 00:00:00 2001 From: Jordi Date: Fri, 30 Jul 2021 13:56:58 +0200 Subject: [PATCH 03/20] feat: request function done --- src/moviedb.js | 6 +++++- src/utils/httprequest.js | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/utils/httprequest.js diff --git a/src/moviedb.js b/src/moviedb.js index aafb0ef..26ed81e 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -1,6 +1,9 @@ #!/usr/bin/env node const { Command } = require("commander"); +const https = require("https"); +const req = require("./utils/httprequest"); +const date = require("./utils/httprequest"); require("dotenv/config"); const program = new Command(); @@ -10,7 +13,8 @@ program .command("get-persons") .description("Make a network request to fetch most popular persons") .action(function handleAction() { - console.log("hello-world"); + const personsData = req.httpRequest("person/popular", "page=1"); + /* console.log(personsData); */ }); program diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js new file mode 100644 index 0000000..97540a8 --- /dev/null +++ b/src/utils/httprequest.js @@ -0,0 +1,23 @@ +const https = require("https"); +const fs = require("fs"); +require("dotenv/config"); + +exports.httpRequest = function (endPoint, option1 = "", option2 = "") { + https.get( + `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, + (response) => { + response.on("data", (d) => { + let result; + result += d; + console.log(result); + /* console.log(result); */ + /* console.log(d); */ + /* process.stdout.write(d); */ + }); + + /* response.on("end", () => { + console.log(result); + }); */ + } + ); +}; From 04c36f7fe3c55d963a541c16d868ab3f6bf80195 Mon Sep 17 00:00:00 2001 From: Jordi Date: Fri, 30 Jul 2021 16:38:01 +0200 Subject: [PATCH 04/20] feat: options implemented --- src/moviedb.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/moviedb.js b/src/moviedb.js index 26ed81e..d0b806e 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -1,9 +1,7 @@ #!/usr/bin/env node const { Command } = require("commander"); -const https = require("https"); const req = require("./utils/httprequest"); -const date = require("./utils/httprequest"); require("dotenv/config"); const program = new Command(); @@ -12,9 +10,13 @@ program.version("0.0.1"); program .command("get-persons") .description("Make a network request to fetch most popular persons") + .requiredOption("-p, --popular", "Fetch the popular persons") + .requiredOption( + "--page ", + "The page of persons data results to fetch" + ) .action(function handleAction() { - const personsData = req.httpRequest("person/popular", "page=1"); - /* console.log(personsData); */ + req.httpRequest("person/popular", "page=1"); }); program From 93de4728791e16f547a03dce9d9cf6e244490c39 Mon Sep 17 00:00:00 2001 From: Jordi Date: Fri, 30 Jul 2021 16:43:51 +0200 Subject: [PATCH 05/20] feat: spinner implemented --- src/utils/spinner_persons.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/utils/spinner_persons.js diff --git a/src/utils/spinner_persons.js b/src/utils/spinner_persons.js new file mode 100644 index 0000000..38725f6 --- /dev/null +++ b/src/utils/spinner_persons.js @@ -0,0 +1,9 @@ +const ora = require("ora"); + +function spinnerStart(command) { + const spinner = ora(`Loading ${command}`).start(); + + return spinner; +} + +exports.start = spinnerStart; From 2a40a7fad41fbf87f42f465743a502951e1aeaa8 Mon Sep 17 00:00:00 2001 From: Jordi Date: Fri, 30 Jul 2021 18:25:39 +0200 Subject: [PATCH 06/20] feat: api request and error handling implemented --- src/moviedb.js | 4 ++-- src/utils/httprequest.js | 38 +++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/moviedb.js b/src/moviedb.js index d0b806e..bbc1c6c 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -15,8 +15,8 @@ program "--page ", "The page of persons data results to fetch" ) - .action(function handleAction() { - req.httpRequest("person/popular", "page=1"); + .action(function handleAction(options) { + req.httpRequest("person/popular", `page=${options.page}`); }); program diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 97540a8..8d3acc6 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,23 +1,27 @@ const https = require("https"); -const fs = require("fs"); +const spinner = require("./spinner_persons"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { - https.get( - `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, - (response) => { - response.on("data", (d) => { - let result; - result += d; - console.log(result); - /* console.log(result); */ - /* console.log(d); */ - /* process.stdout.write(d); */ - }); + const spin = spinner.start(endPoint); + https + .get( + `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, + (response) => { + let result = ""; - /* response.on("end", () => { - console.log(result); - }); */ - } - ); + response.on("data", (c) => { + result += c; + }); + + response.on("end", () => { + console.log(JSON.parse(result)); + spin.stop(); + }); + } + ) + .on("error", (err) => { + console.log("Falló: " + err); + /* spin.fail("Falló"); */ + }); }; From 23dd9373e17d4ac82240360372f5cc3b3573b903 Mon Sep 17 00:00:00 2001 From: Jordi Date: Sun, 1 Aug 2021 13:23:01 +0200 Subject: [PATCH 07/20] feat: data and pagination render implemented --- src/utils/httprequest.js | 10 +++++-- src/utils/render_persons.js | 52 +++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/utils/render_persons.js diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 8d3acc6..a96a0bf 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,5 +1,6 @@ const https = require("https"); const spinner = require("./spinner_persons"); +const render = require("./render_persons"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { @@ -15,8 +16,13 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { }); response.on("end", () => { - console.log(JSON.parse(result)); - spin.stop(); + switch (endPoint) { + case "person/popular": + render.persons(JSON.parse(result)); + break; + } + + spin.succeed("Popular Persons data loaded"); }); } ) diff --git a/src/utils/render_persons.js b/src/utils/render_persons.js new file mode 100644 index 0000000..8cde56f --- /dev/null +++ b/src/utils/render_persons.js @@ -0,0 +1,52 @@ +const chalk = require("chalk"); + +function renderPersons(data) { + if (data.total_pages > data.page) { + console.log(chalk.white("\n")); + console.log(chalk.white("-".repeat(100))); + console.log(chalk.white("Page " + data.page + " of " + data.total_pages)); + } + const persons = data.results; + persons.map((person) => { + console.log(chalk.white("\n")); + console.log(chalk.white("-".repeat(100))); + console.log(chalk.white("\n")); + console.log(chalk.white("Person:")); + console.log(chalk.white("\n")); + console.log(chalk.white("ID: " + person.id)); + console.log(chalk.white("Name: ") + chalk.blue.bold(person.name)); + if (person.known_for_department === "Acting") { + console.log( + chalk.white("Department: ") + chalk.magenta(person.known_for_department) + ); + console.log(chalk.white("\n")); + } + let definedMovies = 0; + person.known_for.map((film) => { + if (film.title !== undefined) { + definedMovies += 1; + } + }); + if (definedMovies > 0) { + console.log(chalk.white("Know for movies:")); + console.log(chalk.white("\n")); + person.known_for.map((movie) => { + if (movie.title !== undefined) { + console.log("\t" + chalk.white("Movie:")); + console.log("\t" + chalk.white("ID: " + movie.id)); + console.log( + "\t" + chalk.white("Release date: " + movie.release_date) + ); + console.log("\t" + chalk.white("Title: " + movie.title)); + console.log(chalk.white("\n")); + } + }); + } else { + console.log( + chalk.yellow(person.name + " doesn’t appear in any movie \n") + ); + } + }); +} + +exports.persons = renderPersons; From ce67ef191a39bc66e0c05c4b6b95902d1550ec9a Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 10:35:44 +0200 Subject: [PATCH 08/20] feat: error handling completed --- src/utils/httprequest.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index a96a0bf..7be579a 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,6 +1,7 @@ const https = require("https"); const spinner = require("./spinner_persons"); const render = require("./render_persons"); +const { exit } = require("process"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { @@ -16,6 +17,11 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { }); response.on("end", () => { + if (result === "") { + spin.fail("Error: can't find your request"); + return; + } + switch (endPoint) { case "person/popular": render.persons(JSON.parse(result)); @@ -27,7 +33,6 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { } ) .on("error", (err) => { - console.log("Falló: " + err); - /* spin.fail("Falló"); */ + spin.fail("Error: " + err.message); }); }; From 1e42f757efdc5fd58229951d441c1f7fcfe44ecb Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 11:41:50 +0200 Subject: [PATCH 09/20] feat: options and request implemented --- src/moviedb.js | 12 ++++++++++-- src/utils/httprequest.js | 6 ++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/moviedb.js b/src/moviedb.js index bbc1c6c..9997e49 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -29,8 +29,16 @@ program program .command("get-movies") .description("Make a network request to fetch movies") - .action(function handleAction() { - console.log("hello-world"); + .requiredOption( + "--page ", + "The page of movies data results to fetch" + ) + .option("-p, --popular", "Fetch the popular movies") + .option("-n, --now-playing", "Fetch the movies that are playing now") + .action(function handleAction(options) { + const endPoint = options.nowPlaying ? "movie/now_playing" : "movie/popular"; + console.log("ENDPOINT: " + endPoint); + req.httpRequest(endPoint, `page=${options.page}`); }); program diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 7be579a..69f39a8 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -26,6 +26,12 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { case "person/popular": render.persons(JSON.parse(result)); break; + case "movie/popular": + render.movies(JSON.parse(result)); + break; + case "movie/now_playing": + render.movies(JSON.parse(result)); + break; } spin.succeed("Popular Persons data loaded"); From 344e056c1d11e598c01a009eeeddc337f1c1b047 Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 12:04:32 +0200 Subject: [PATCH 10/20] feat: movies render done --- src/moviedb.js | 1 - src/utils/render_persons.js | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/moviedb.js b/src/moviedb.js index 9997e49..da9f85a 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -37,7 +37,6 @@ program .option("-n, --now-playing", "Fetch the movies that are playing now") .action(function handleAction(options) { const endPoint = options.nowPlaying ? "movie/now_playing" : "movie/popular"; - console.log("ENDPOINT: " + endPoint); req.httpRequest(endPoint, `page=${options.page}`); }); diff --git a/src/utils/render_persons.js b/src/utils/render_persons.js index 8cde56f..c32af9f 100644 --- a/src/utils/render_persons.js +++ b/src/utils/render_persons.js @@ -49,4 +49,22 @@ function renderPersons(data) { }); } +function renderMovies(data) { + if (data.total_pages > data.page) { + console.log(chalk.white("\n")); + console.log(chalk.white("-".repeat(100))); + console.log(chalk.white("Page " + data.page + " of " + data.total_pages)); + } + const movies = data.results; + movies.map((movie) => { + console.log(chalk.white("-".repeat(100))); + console.log(chalk.white("\n")); + console.log(chalk.white("Movie:\n")); + console.log(chalk.white("ID: " + movie.id)); + console.log(chalk.white("Title: ") + chalk.blue(movie.title)); + console.log(chalk.white("Release Date: " + movie.release_date + "\n")); + }); +} + exports.persons = renderPersons; +exports.movies = renderMovies; From de3c5587f745beacffa85251c7c0e26df41b1aad Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 12:04:51 +0200 Subject: [PATCH 11/20] fix: success spinner adapted to each case --- src/utils/httprequest.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 69f39a8..58dc6a1 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -25,16 +25,17 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { switch (endPoint) { case "person/popular": render.persons(JSON.parse(result)); + spin.succeed("Popular Persons data loaded"); break; case "movie/popular": render.movies(JSON.parse(result)); + spin.succeed("Popular movies data loaded"); break; case "movie/now_playing": render.movies(JSON.parse(result)); + spin.succeed("Movies playing now data loaded"); break; } - - spin.succeed("Popular Persons data loaded"); }); } ) From 5ca47195848a40a0013e1f85997e81988c98bc54 Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 12:34:04 +0200 Subject: [PATCH 12/20] fix: personalized spinner for each command --- src/utils/render_persons.js | 1 - src/utils/spinner_persons.js | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/utils/render_persons.js b/src/utils/render_persons.js index c32af9f..236c6cc 100644 --- a/src/utils/render_persons.js +++ b/src/utils/render_persons.js @@ -8,7 +8,6 @@ function renderPersons(data) { } const persons = data.results; persons.map((person) => { - console.log(chalk.white("\n")); console.log(chalk.white("-".repeat(100))); console.log(chalk.white("\n")); console.log(chalk.white("Person:")); diff --git a/src/utils/spinner_persons.js b/src/utils/spinner_persons.js index 38725f6..be1a6bc 100644 --- a/src/utils/spinner_persons.js +++ b/src/utils/spinner_persons.js @@ -1,9 +1,18 @@ const ora = require("ora"); -function spinnerStart(command) { - const spinner = ora(`Loading ${command}`).start(); - - return spinner; +function spinnerStart(endPoint) { + let spinner = ""; + switch (endPoint) { + case "person/popular": + spinner = ora("Fetching the popular person's data...").start(); + return spinner; + case "movie/popular": + spinner = ora("Fetching the movies data...").start(); + return spinner; + case "movie/now_playing": + spinner = ora("Fetching the movies data...").start(); + return spinner; + } } exports.start = spinnerStart; From 3e10967f941b6a2a12959de257a9dee7f551e3c2 Mon Sep 17 00:00:00 2001 From: Ethan Alfaro Date: Mon, 2 Aug 2021 16:53:34 +0200 Subject: [PATCH 13/20] Feat: Get Movie --- package-lock.json | 3 ++ src/moviedb.js | 34 ++++++++++++++++++-- src/utils/getMovieSpinner.js | 14 +++++++++ src/utils/httprequest.js | 28 +++++++++++------ src/utils/movie_render.js | 60 ++++++++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 src/utils/getMovieSpinner.js create mode 100644 src/utils/movie_render.js diff --git a/package-lock.json b/package-lock.json index bf02ed4..5979412 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,9 @@ "dotenv": "^8.2.0", "node-notifier": "^8.0.0", "ora": "^5.1.0" + }, + "bin": { + "moviedb": "src/moviedb.js" } }, "node_modules/chalk": { diff --git a/src/moviedb.js b/src/moviedb.js index 26ed81e..dfda917 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -4,6 +4,7 @@ const { Command } = require("commander"); const https = require("https"); const req = require("./utils/httprequest"); const date = require("./utils/httprequest"); +const chalk = require('chalk'); require("dotenv/config"); const program = new Command(); @@ -21,21 +22,48 @@ program .command("get-person") .description("Make a network request to fetch the data of a single person") .action(function handleAction() { - console.log("hello-world"); + // console.log("hello-world"); }); program .command("get-movies") .description("Make a network request to fetch movies") .action(function handleAction() { - console.log("hello-world"); + // console.log("hello-world"); }); program .command("get-movie") .description("Make a network request to fetch the data of a single person") + .requiredOption('-i, --id ','The id of the movie') + .option('-r, --review','Fetch the reviews of the movie') + + .action(function handleAction(options) { + let movieId = options.id; + let movieReview = options.review; + // console.log(JSON.stringify(options)); + // console.log(movieId); + // console.log(movieReview); + // console.dir(options); + if(movieReview) { + console.log('Entra a la review') + req.httpRequest("movie/" + movieId + "/reviews"); + }else{ + console.log('Entra con el ID'); + req.httpRequest("movie/" + movieId); + } + + + + }); + + + + program + .command("get-api-key") + .description("Make a network request to fetch the data of a single person") .action(function handleAction() { - console.log(process.env.API_KEY); + // console.log(process.env.API_KEY); }); // error on unknown commands diff --git a/src/utils/getMovieSpinner.js b/src/utils/getMovieSpinner.js new file mode 100644 index 0000000..601ebff --- /dev/null +++ b/src/utils/getMovieSpinner.js @@ -0,0 +1,14 @@ +const ora = require('ora'); + +exports.spinnerStart = function(){ + const spinner = ora('Loading Film').start(); +} +exports.spinnerSucced = function(){ + spinner.succeed('Film loaded successfully'); +} +exports.spinnerFail = function(){ + spinner.fail('Film not loaded'); +} +exports.spinnerStop = function(){ + spinner.stop(); +} diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 97540a8..7bc3667 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,23 +1,31 @@ const https = require("https"); const fs = require("fs"); +const ora = require("ora"); +const chalk = require('chalk'); +const { movie_render } = require("./movie_render"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { + const spinner = ora('Loading Film').start(); https.get( `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, (response) => { - response.on("data", (d) => { - let result; + let result = ''; + response.on("data", (d) => { result += d; - console.log(result); - /* console.log(result); */ - /* console.log(d); */ - /* process.stdout.write(d); */ }); - /* response.on("end", () => { - console.log(result); - }); */ + response.on("end", () => { + let obj = JSON.parse(result); + movie_render(obj); + spinner.succeed('Film loaded successfully'); + }); } - ); + ).on ('error', (err) => { + spinner.fail(err.message); + }); + spinner.stop(); }; + + + diff --git a/src/utils/movie_render.js b/src/utils/movie_render.js new file mode 100644 index 0000000..0cda57d --- /dev/null +++ b/src/utils/movie_render.js @@ -0,0 +1,60 @@ +const chalk = require('chalk'); + +exports.movie_render = function(obj){ + + if(obj.title != undefined){ + console.log(chalk.white('---------------------'+ obj.title+ '------------------\n')) + console.log(chalk.blue('Movie ID: ' + obj.id + '\n')); + console.log(chalk.bold.blue('Movie TITLE: ' + obj.title + '\n')); + console.log(chalk.white('RELEASE DATE: ' + obj.release_date + '\n')); + console.log(chalk.white('RUNTIME: ' + obj.runtime + '\n')); + console.log(chalk.white('VOTE COUNT: ' + obj.vote_count + '\n')); + console.log(chalk.white('OVERVIEW: ' + obj.overview + '\n')); + console.log(chalk.white('\n')); + if(obj.genre != ''){ + console.log(chalk.white('GENRE: ' + obj.genres[0].name + '\n')); + }else{ + console.log(chalk.yellow('The movie doesn’t have a declared genre \n')) + } + console.log(chalk.white('\n')); + + if(obj.spoken_lenguages != ''){ + const len = obj.spoken_languages; + len.forEach((name) => { + console.log(chalk.white('LENGUAGES: ' + name.name + '\n')); + }); + }else{ + console.log(chalk.yellow(`The movie: ${obj.id} doesn’t have any declared languages \n` )) + } + + }else{ + const res = obj.results; + if(res.length > 0){ + let totalPages = obj.total_pages; + let pages = obj.page; + if(totalPages > pages){ + console.log(chalk.white('--------------------------\n')); + console.log(chalk.white('PAGE : '+ pages + ' OF '+ totalPages + '\n')); + console.log(chalk.white('--------------------------\n')); + } + console.log('\n'); + res.forEach((resu) => { + console.log(chalk.bold.blue('AUTHOR: ' + resu.author)); + let cont = resu.content; + if(cont.length > 400){ + cont.slice(0, 399); + console.log(chalk.white('CONTENT: ' +cont+'...')); + }else{ + console.log(chalk.white(resu.content+'\n')); + } + + }); + + + }else{ + console.log(chalk.yellow(`The movie: ${obj.id} doesn’t have any reviews`)) + } + } + + +} From f32ed10f4d85e75aeb3b28ea585775170b1b26cd Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 17:54:37 +0200 Subject: [PATCH 14/20] enh: updated main with some changes --- src/moviedb.js | 31 ++++---------------- src/utils/httprequest.js | 63 +++++++++++++++++++--------------------- 2 files changed, 36 insertions(+), 58 deletions(-) diff --git a/src/moviedb.js b/src/moviedb.js index f92543e..9803776 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -3,7 +3,6 @@ const { Command } = require("commander"); const req = require("./utils/httprequest"); const date = require("./utils/httprequest"); -const chalk = require('chalk'); require("dotenv/config"); const program = new Command(); @@ -38,35 +37,17 @@ program program .command("get-movie") .description("Make a network request to fetch the data of a single person") - .requiredOption('-i, --id ','The id of the movie') - .option('-r, --review','Fetch the reviews of the movie') + .requiredOption("-i, --id ", "The id of the movie") + .option("-r, --review", "Fetch the reviews of the movie") .action(function handleAction(options) { let movieId = options.id; let movieReview = options.review; - // console.log(JSON.stringify(options)); - // console.log(movieId); - // console.log(movieReview); - // console.dir(options); - if(movieReview) { - console.log('Entra a la review') - req.httpRequest("movie/" + movieId + "/reviews"); - }else{ - console.log('Entra con el ID'); + if (movieReview) { + req.httpRequest("movie/" + movieId + "/reviews"); + } else { req.httpRequest("movie/" + movieId); - } - - - - }); - - - - program - .command("get-api-key") - .description("Make a network request to fetch the data of a single person") - .action(function handleAction() { - // console.log(process.env.API_KEY); + } }); // error on unknown commands diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index 2ee6700..824776a 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,46 +1,43 @@ const https = require("https"); const fs = require("fs"); const ora = require("ora"); -const chalk = require('chalk'); +const chalk = require("chalk"); const { movie_render } = require("./movie_render"); const spinner = require("./spinner_persons"); const render = require("./render_persons"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { - const spinner = ora('Loading Film').start(); - https.get( - `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, - (response) => { - let result = ''; + const spinner = ora("Loading Film").start(); + https + .get( + `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, + (response) => { + let result = ""; response.on("data", (d) => { - result += d; - }); + result += d; + }); - response.on("end", () => { - if (result === "") { - spin.fail("Error: can't find your request"); - return; - } + response.on("end", () => { + if (result === "") { + spin.fail("Error: can't find your request"); + return; + } - switch (endPoint) { - case "person/popular": - render.persons(JSON.parse(result)); - break; - case 'movie/70': - let obj = JSON.parse(result); - movie_render(obj); - spinner.succeed('Film loaded successfully'); - break; - } - - }); - - } - ).on ('error', (err) => { - spinner.fail('Error: ' + err.message); - }); + switch (endPoint) { + case "person/popular": + render.persons(JSON.parse(result)); + break; + case "movie/70": + movie_render(JSON.parse(result)); + spinner.succeed("Film loaded successfully"); + break; + } + }); + } + ) + .on("error", (err) => { + spinner.fail("Error: " + err.message); + }); spinner.stop(); -} - - +}; From 05fb644ad038daa2606b308e8936a727b367c5ea Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 18:25:07 +0200 Subject: [PATCH 15/20] enh: united all changes and ordered them --- src/moviedb.js | 1 - src/utils/getMovieSpinner.js | 14 ------ src/utils/httprequest.js | 45 +++++++++---------- .../{render_persons.js => render_globals.js} | 0 .../{movie_render.js => render_movie.js} | 0 src/utils/spinner.js | 21 +++++++++ src/utils/spinner_persons.js | 18 -------- 7 files changed, 42 insertions(+), 57 deletions(-) delete mode 100644 src/utils/getMovieSpinner.js rename src/utils/{render_persons.js => render_globals.js} (100%) rename src/utils/{movie_render.js => render_movie.js} (100%) create mode 100644 src/utils/spinner.js delete mode 100644 src/utils/spinner_persons.js diff --git a/src/moviedb.js b/src/moviedb.js index e1c7a89..4f62788 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -2,7 +2,6 @@ const { Command } = require("commander"); const req = require("./utils/httprequest"); -const date = require("./utils/httprequest"); require("dotenv/config"); const program = new Command(); diff --git a/src/utils/getMovieSpinner.js b/src/utils/getMovieSpinner.js deleted file mode 100644 index 601ebff..0000000 --- a/src/utils/getMovieSpinner.js +++ /dev/null @@ -1,14 +0,0 @@ -const ora = require('ora'); - -exports.spinnerStart = function(){ - const spinner = ora('Loading Film').start(); -} -exports.spinnerSucced = function(){ - spinner.succeed('Film loaded successfully'); -} -exports.spinnerFail = function(){ - spinner.fail('Film not loaded'); -} -exports.spinnerStop = function(){ - spinner.stop(); -} diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index bba7f86..d678914 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,14 +1,12 @@ const https = require("https"); const fs = require("fs"); -const ora = require("ora"); -const chalk = require("chalk"); -const { movie_render } = require("./movie_render"); -const spinner = require("./spinner_persons"); -const render = require("./render_persons"); +const { movie_render } = require("./render_movie"); +const spin = require("./spinner"); +const render = require("./render_globals"); require("dotenv/config"); exports.httpRequest = function (endPoint, option1 = "", option2 = "") { - const spinner = ora("Loading Film").start(); + const spinner = spin.start(endPoint); https .get( `https://api.themoviedb.org/3/${endPoint}?api_key=${process.env.API_KEY}&${option1}&${option2}`, @@ -20,27 +18,26 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { response.on("end", () => { if (result === "") { - spin.fail("Error: can't find your request"); + spinner.fail("Error: can't find your request"); return; } - switch (endPoint) { - case "person/popular": - render.persons(JSON.parse(result)); - spin.succeed("Popular Persons data loaded"); - break; - case "movie/popular": - render.movies(JSON.parse(result)); - spin.succeed("Popular movies data loaded"); - break; - case "movie/now_playing": - render.movies(JSON.parse(result)); - spin.succeed("Movies playing now data loaded"); - break; - case "movie/70": - movie_render(JSON.parse(result)); - spinner.succeed("Film loaded successfully"); - break; + if (endPoint === "person/popular") { + render.persons(JSON.parse(result)); + spinner.succeed("Popular Persons data loaded"); + return; + } else if (endPoint === "movie/popular") { + render.movies(JSON.parse(result)); + spinner.succeed("Popular movies data loaded"); + return; + } else if (endPoint === "movie/now_playing") { + render.movies(JSON.parse(result)); + spinner.succeed("Movies playing now data loaded"); + return; + } else if (endPoint.includes("movie/")) { + movie_render(JSON.parse(result)); + spinner.succeed("Film loaded successfully"); + return; } }); } diff --git a/src/utils/render_persons.js b/src/utils/render_globals.js similarity index 100% rename from src/utils/render_persons.js rename to src/utils/render_globals.js diff --git a/src/utils/movie_render.js b/src/utils/render_movie.js similarity index 100% rename from src/utils/movie_render.js rename to src/utils/render_movie.js diff --git a/src/utils/spinner.js b/src/utils/spinner.js new file mode 100644 index 0000000..ed54e15 --- /dev/null +++ b/src/utils/spinner.js @@ -0,0 +1,21 @@ +const ora = require("ora"); + +function spinnerStart(endPoint) { + let spinner = ""; + + if (endPoint === "person/popular") { + spinner = ora("Fetching the popular person's data...").start(); + return spinner; + } else if (endPoint === "movie/popular") { + spinner = ora("Fetching the movies data...").start(); + return spinner; + } else if (endPoint === "movie/now_playing") { + spinner = ora("Fetching the movies data...").start(); + return spinner; + } else if (endPoint.includes("movie/")) { + spinner = ora("Fetching the movie data...").start(); + return spinner; + } +} + +exports.start = spinnerStart; diff --git a/src/utils/spinner_persons.js b/src/utils/spinner_persons.js deleted file mode 100644 index be1a6bc..0000000 --- a/src/utils/spinner_persons.js +++ /dev/null @@ -1,18 +0,0 @@ -const ora = require("ora"); - -function spinnerStart(endPoint) { - let spinner = ""; - switch (endPoint) { - case "person/popular": - spinner = ora("Fetching the popular person's data...").start(); - return spinner; - case "movie/popular": - spinner = ora("Fetching the movies data...").start(); - return spinner; - case "movie/now_playing": - spinner = ora("Fetching the movies data...").start(); - return spinner; - } -} - -exports.start = spinnerStart; From ed85064fbbebffd4aa300e9aafbf79dc3ee36f76 Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 20:13:13 +0200 Subject: [PATCH 16/20] feat: person implemented --- src/moviedb.js | 5 +- src/utils/httprequest.js | 6 +- src/utils/render_movie.js | 140 +++++++++++++++++++++++--------------- src/utils/spinner.js | 3 + 4 files changed, 98 insertions(+), 56 deletions(-) diff --git a/src/moviedb.js b/src/moviedb.js index 4f62788..0f77915 100755 --- a/src/moviedb.js +++ b/src/moviedb.js @@ -22,8 +22,9 @@ program program .command("get-person") .description("Make a network request to fetch the data of a single person") - .action(function handleAction() { - // console.log("hello-world"); + .requiredOption("-i, --id ", "The id of the person") + .action(function handleAction(options) { + req.httpRequest(`person/${options.id}`); }); program diff --git a/src/utils/httprequest.js b/src/utils/httprequest.js index d678914..a9bb50a 100644 --- a/src/utils/httprequest.js +++ b/src/utils/httprequest.js @@ -1,6 +1,6 @@ const https = require("https"); const fs = require("fs"); -const { movie_render } = require("./render_movie"); +const { movie_render, person_render } = require("./render_movie"); const spin = require("./spinner"); const render = require("./render_globals"); require("dotenv/config"); @@ -38,6 +38,10 @@ exports.httpRequest = function (endPoint, option1 = "", option2 = "") { movie_render(JSON.parse(result)); spinner.succeed("Film loaded successfully"); return; + } else if (endPoint.includes("person/")) { + person_render(JSON.parse(result)); + spinner.succeed("Person loaded successfully"); + return; } }); } diff --git a/src/utils/render_movie.js b/src/utils/render_movie.js index 0cda57d..5d27fb2 100644 --- a/src/utils/render_movie.js +++ b/src/utils/render_movie.js @@ -1,60 +1,94 @@ -const chalk = require('chalk'); +const chalk = require("chalk"); -exports.movie_render = function(obj){ - - if(obj.title != undefined){ - console.log(chalk.white('---------------------'+ obj.title+ '------------------\n')) - console.log(chalk.blue('Movie ID: ' + obj.id + '\n')); - console.log(chalk.bold.blue('Movie TITLE: ' + obj.title + '\n')); - console.log(chalk.white('RELEASE DATE: ' + obj.release_date + '\n')); - console.log(chalk.white('RUNTIME: ' + obj.runtime + '\n')); - console.log(chalk.white('VOTE COUNT: ' + obj.vote_count + '\n')); - console.log(chalk.white('OVERVIEW: ' + obj.overview + '\n')); - console.log(chalk.white('\n')); - if(obj.genre != ''){ - console.log(chalk.white('GENRE: ' + obj.genres[0].name + '\n')); - }else{ - console.log(chalk.yellow('The movie doesn’t have a declared genre \n')) +exports.movie_render = function (obj) { + if (obj.title != undefined) { + console.log( + chalk.white("---------------------" + obj.title + "------------------\n") + ); + console.log(chalk.blue("Movie ID: " + obj.id + "\n")); + console.log(chalk.bold.blue("Movie TITLE: " + obj.title + "\n")); + console.log(chalk.white("RELEASE DATE: " + obj.release_date + "\n")); + console.log(chalk.white("RUNTIME: " + obj.runtime + "\n")); + console.log(chalk.white("VOTE COUNT: " + obj.vote_count + "\n")); + console.log(chalk.white("OVERVIEW: " + obj.overview + "\n")); + console.log(chalk.white("\n")); + if (obj.genre != "") { + console.log(chalk.white("GENRE: " + obj.genres[0].name + "\n")); + } else { + console.log(chalk.yellow("The movie doesn’t have a declared genre \n")); } - console.log(chalk.white('\n')); + console.log(chalk.white("\n")); - if(obj.spoken_lenguages != ''){ - const len = obj.spoken_languages; - len.forEach((name) => { - console.log(chalk.white('LENGUAGES: ' + name.name + '\n')); - }); - }else{ - console.log(chalk.yellow(`The movie: ${obj.id} doesn’t have any declared languages \n` )) + if (obj.spoken_lenguages != "") { + const len = obj.spoken_languages; + len.forEach((name) => { + console.log(chalk.white("LENGUAGES: " + name.name + "\n")); + }); + } else { + console.log( + chalk.yellow( + `The movie: ${obj.id} doesn’t have any declared languages \n` + ) + ); } - - }else{ - const res = obj.results; - if(res.length > 0){ - let totalPages = obj.total_pages; - let pages = obj.page; - if(totalPages > pages){ - console.log(chalk.white('--------------------------\n')); - console.log(chalk.white('PAGE : '+ pages + ' OF '+ totalPages + '\n')); - console.log(chalk.white('--------------------------\n')); - } - console.log('\n'); - res.forEach((resu) => { - console.log(chalk.bold.blue('AUTHOR: ' + resu.author)); - let cont = resu.content; - if(cont.length > 400){ - cont.slice(0, 399); - console.log(chalk.white('CONTENT: ' +cont+'...')); - }else{ - console.log(chalk.white(resu.content+'\n')); - } - - }); - - - }else{ - console.log(chalk.yellow(`The movie: ${obj.id} doesn’t have any reviews`)) + } else { + const res = obj.results; + if (res.length > 0) { + let totalPages = obj.total_pages; + let pages = obj.page; + if (totalPages > pages) { + console.log(chalk.white("--------------------------\n")); + console.log( + chalk.white("PAGE : " + pages + " OF " + totalPages + "\n") + ); + console.log(chalk.white("--------------------------\n")); + } + console.log("\n"); + res.forEach((resu) => { + console.log(chalk.bold.blue("AUTHOR: " + resu.author)); + let cont = resu.content; + if (cont.length > 400) { + cont.slice(0, 399); + console.log(chalk.white("CONTENT: " + cont + "...")); + } else { + console.log(chalk.white(resu.content + "\n")); } + }); + } else { + console.log( + chalk.yellow(`The movie: ${obj.id} doesn’t have any reviews`) + ); } + } +}; - -} +exports.person_render = function (data) { + console.log(chalk.white("-".repeat(100))); + console.log(chalk.white("\n")); + console.log(chalk.white("Person:\n")); + console.log(chalk.white("ID: " + data.id)); + console.log(chalk.white("Name: ") + chalk.blue(data.name)); + console.log( + chalk.white("Birthday: " + data.birthday) + + chalk.gray(" | ") + + chalk.white(data.place_of_birth) + ); + if (data.known_for_department === "Acting") { + console.log( + chalk.white("Department: ") + chalk.magenta(data.known_for_department) + ); + } + console.log(chalk.white("Biography: ") + chalk.blue.bold(data.biography)); + if (data.also_known_as.length > 0) { + console.log(chalk.white("\n")); + console.log(chalk.white("Also known as:\n")); + data.also_known_as.map((aka) => { + console.log(chalk.white(aka + "\n")); + }); + } else { + console.log(chalk.white("\n")); + console.log( + chalk.yellow(data.name + " doesn't have any alternate names\n") + ); + } +}; diff --git a/src/utils/spinner.js b/src/utils/spinner.js index ed54e15..8ff607c 100644 --- a/src/utils/spinner.js +++ b/src/utils/spinner.js @@ -15,6 +15,9 @@ function spinnerStart(endPoint) { } else if (endPoint.includes("movie/")) { spinner = ora("Fetching the movie data...").start(); return spinner; + } else if (endPoint.includes("person/")) { + spinner = ora("Fetching the person data...").start(); + return spinner; } } From 3ec592a2fbf801564c4bdcf24b5f367474d1818b Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 20:26:39 +0200 Subject: [PATCH 17/20] feat: postman collection --- documentation/moviedb.postman_collection.json | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 documentation/moviedb.postman_collection.json diff --git a/documentation/moviedb.postman_collection.json b/documentation/moviedb.postman_collection.json new file mode 100644 index 0000000..120009f --- /dev/null +++ b/documentation/moviedb.postman_collection.json @@ -0,0 +1,220 @@ +{ + "info": { + "_postman_id": "13bbfa29-c3ac-4a55-8c0d-e140289c2316", + "name": "moviedb", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Persons popular", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/person/popular?api_key=c15aef2e35d1752562aec3685f62834e&page=1", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "person", + "popular" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + }, + { + "key": "page", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "Person", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/person/:id?api_key=c15aef2e35d1752562aec3685f62834e", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "person", + ":id" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + } + ], + "variable": [ + { + "key": "id", + "value": "91606" + } + ] + } + }, + "response": [] + }, + { + "name": "Movies now playing", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/movie/:state?api_key=c15aef2e35d1752562aec3685f62834e&page=2", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "movie", + ":state" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + }, + { + "key": "page", + "value": "2" + } + ], + "variable": [ + { + "key": "state", + "value": "now_playing" + } + ] + } + }, + "response": [] + }, + { + "name": "Movies popular", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/movie/:state?api_key=c15aef2e35d1752562aec3685f62834e&page=2", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "movie", + ":state" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + }, + { + "key": "page", + "value": "2" + } + ], + "variable": [ + { + "key": "state", + "value": "popular" + } + ] + } + }, + "response": [] + }, + { + "name": "Movie", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/movie/:id?api_key=c15aef2e35d1752562aec3685f62834e", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "movie", + ":id" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + } + ], + "variable": [ + { + "key": "id", + "value": "70" + } + ] + } + }, + "response": [] + }, + { + "name": "Movie review", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://api.themoviedb.org/3/movie/:id/reviews?api_key=c15aef2e35d1752562aec3685f62834e", + "protocol": "https", + "host": [ + "api", + "themoviedb", + "org" + ], + "path": [ + "3", + "movie", + ":id", + "reviews" + ], + "query": [ + { + "key": "api_key", + "value": "c15aef2e35d1752562aec3685f62834e" + } + ], + "variable": [ + { + "key": "id", + "value": "70" + } + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file From 9935be7878587c7a210db4d8f6a899fd05694ad4 Mon Sep 17 00:00:00 2001 From: JordixArnau <75805206+JordixArnau@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:49:08 +0200 Subject: [PATCH 18/20] Feat: Readme created --- README.md | 163 ++++++++++++------------------------------------------ 1 file changed, 35 insertions(+), 128 deletions(-) diff --git a/README.md b/README.md index 8388f4e..d816706 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -`#node.js` `#master-in-software-engineering` +`#node.js` `#master-in-software-engineering` `CLI` @@ -8,7 +8,19 @@ # Assembler School: Node.js MovieDB CLI App -In this project you will learn how to create a cli app with Node.js. +In this project we have developed a CLI program with node.js that is able to run using a terminal application. +The program is connecting to a third-party API to show the data returned and store it in the local system. + +## Repository + +Project created from the Assembler School repository _node-moviedb-cli.git_: + +https://github.com/assembler-school/node-moviedb-cli.git + +## Technologies used + +\* JavaScript +\* NodeJS ## Table of Contents @@ -18,146 +30,41 @@ In this project you will learn how to create a cli app with Node.js. - [Project delivery](#project-delivery) - [Resources](#resources) -## Getting Started - -These instructions will get you a copy of the project up and running on your -local machine for development and testing purposes. - -See deployment for notes on how to deploy the project on a live system. - -### The repository - -First, you will need to `clone` or `fork` the repository into your Github -account: - -Fork on GitHub - -``` -$ git clone https://github.com/assembler-school/node-moviedb-cli.git -``` - -## Contents and Branches Naming Strategy - -The repository is made up of several branches that include the contents of each -section. - -The branches follow a naming strategy like the following: +## Main objectives -- `main`: includes the main contents and the instructions -- `assembler-solution`: includes the solution +* Learn how to connect to a third party API using node.js +* Learn how to implement a CLI program using node.js +* Learn how to work with the filesystem apis of node.js +* Learn how to interact with a CLI program and develop a menu that users can use to know how to execute the program -### Fetching All the Branches - -In order to fetch all the remote branches in the repository, you can use the -following command: - -```sh -$ git fetch --all -``` - -### List Both Remote Tracking Branches and Local Branches - -```sh -$ git branch --all -``` - -Then, you can create a local branch based on a remote branch with the following -command: - -```sh -$ git checkout -b -``` - -### Installing - -First, you will need to install the dependencies with: `npm install`. +## Installing +First, you will need to install the dependencies with: npm install. Run the following command in your terminal after cloning the main repo: -```sh +``` $ npm install ``` -### Running the Tests - -The tests that validate your solution can be executed by runing the following -command: +Next you can install the general command _moviedb_ so you can use it: ``` -$ npm run test +$ npm install -g ``` -### Git `precommit` and `prepush` Hooks - -In the `assembler-solution` branch you can see an implementation of these tools -if you'd like to use them. - -## Deployment - -In this pill we won't deploy the app. - -## Technologies used - -- `Node.js` -- `eslint` -- `prettier` -- `lint-staged` -- `husky` - -## The Project - -In this project you will build a cli app similar to the following screenshot. - - - -## Project requirements - -This is an overview of the main requirements of this project. The exact ones are -found in the doc that the academic team will provide you. - -- You must follow all the instructions of the project step-by-step -- You should always try to solve them by yourself before asking for help -- You should always help your team members and fellow students of the master so - that you can all learn together and become better software developers and team - members -- You must finish all the steps that are marked as `Required` -- Once you are done, you can move on to the optional ones that are marked as - `Extra 💯` - -## Project delivery - -To deliver this project you must follow the steps indicated in the document: - -- [Submitting a solution](https://www.notion.so/Submitting-a-solution-524dab1a71dd4b96903f26385e24cdb6) +The project is ready for you to play with it! ## Resources -- See the document we provide - -## License - -This project is licensed under the MIT License - see the [LICENSE](LICENSE) file -for details - -## Contributors ✨ - -Thanks goes to these wonderful people -([emoji key](https://allcontributors.org/docs/en/emoji-key)): - - - - - - - - -

Dani Lucaci

💻 📖 💡 🔧
- - - +\* [Build a CLI with Node.js](https://dev.to/rushankhan1/build-a-cli-with-node-js-4jbi) +\* [How to http request with Node.js and https.request](https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html) +\* [Understanding module export in Node.js](https://www.sitepoint.com/understanding-module-exports-exports-node-js/) +\* [The MoviDB API](https://www.themoviedb.org/documentation/api) +\* [Ora Module](https://www.npmjs.com/package/ora) +\* [Commander Module](https://www.npmjs.com/package/commander) - +## Authors -This project follows the -[all-contributors](https://github.com/all-contributors/all-contributors) -specification. Contributions of any kind welcome! +- [@Ethan-Alfaro](https://github.com/Ethan-Alfaro) +- [@Ernest-DT](https://github.com/Ernest-DT) +- [@JordixArnau](https://github.com/JordixArnau) From f9ad2a6d4b46f8b06947267f0f89f645ed02f8ee Mon Sep 17 00:00:00 2001 From: JordixArnau <75805206+JordixArnau@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:50:40 +0200 Subject: [PATCH 19/20] Fix: fixed minor errors --- README.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d816706..6af275b 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,7 @@ https://github.com/assembler-school/node-moviedb-cli.git ## Table of Contents -- [Getting Started](#getting-started) -- [The Project](#the-project) -- [Project requirements](#project-requirements) -- [Project delivery](#project-delivery) -- [Resources](#resources) +- [Main objectives](#main-objectives) ## Main objectives @@ -57,11 +53,11 @@ The project is ready for you to play with it! ## Resources \* [Build a CLI with Node.js](https://dev.to/rushankhan1/build-a-cli-with-node-js-4jbi) -\* [How to http request with Node.js and https.request](https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html) -\* [Understanding module export in Node.js](https://www.sitepoint.com/understanding-module-exports-exports-node-js/) -\* [The MoviDB API](https://www.themoviedb.org/documentation/api) -\* [Ora Module](https://www.npmjs.com/package/ora) -\* [Commander Module](https://www.npmjs.com/package/commander) +\* [How to http request with Node.js and https.request](https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html) +\* [Understanding module export in Node.js](https://www.sitepoint.com/understanding-module-exports-exports-node-js/) +\* [The MoviDB API](https://www.themoviedb.org/documentation/api) +\* [Ora Module](https://www.npmjs.com/package/ora) +\* [Commander Module](https://www.npmjs.com/package/commander) ## Authors From 18e14812f68672aa3cf981f20977f27f40c953b4 Mon Sep 17 00:00:00 2001 From: Jordi Date: Mon, 2 Aug 2021 20:53:22 +0200 Subject: [PATCH 20/20] fix: fixed readme table of contents --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 6af275b..123e4b6 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,9 @@ https://github.com/assembler-school/node-moviedb-cli.git ## Table of Contents - [Main objectives](#main-objectives) +- [Installing](#installing) +- [Resources](#resources) +- [Authors](#authors) ## Main objectives