From 35c48ace4ddb660ae4ea185ebf116db945df4475 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 11:06:49 +0100 Subject: [PATCH 01/18] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20-=20D?= =?UTF-8?q?ock-comp=20ports=20to=20migrate=20DB=20when=20needed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index b0b5a9c..65a9973 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,8 @@ services: - "MYSQL_DATABASE=cineallo" volumes: - ./mysql-data:/var/lib/mysql + # ports: + # - 3306:3306 networks: back-net: \ No newline at end of file From b92aba3a8d506cfa2c70318bf7cfedc61cfa3ae1 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 11:07:10 +0100 Subject: [PATCH 02/18] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20-=20Added=20corre?= =?UTF-8?q?ct=20Model=20for=20CineAllo=20series?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/20221110100453_/migration.sql | 18 ++++++++++++++++++ prisma/schema.prisma | 14 ++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 prisma/migrations/20221110100453_/migration.sql diff --git a/prisma/migrations/20221110100453_/migration.sql b/prisma/migrations/20221110100453_/migration.sql new file mode 100644 index 0000000..ab83a49 --- /dev/null +++ b/prisma/migrations/20221110100453_/migration.sql @@ -0,0 +1,18 @@ +/* + Warnings: + + - You are about to drop the `Article` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropTable +DROP TABLE `Article`; + +-- CreateTable +CREATE TABLE `Serie` ( + `title` VARCHAR(191) NOT NULL, + `date` INTEGER NOT NULL, + `description` VARCHAR(2000) NOT NULL, + `thumbmailURL` VARCHAR(2048) NOT NULL, + + PRIMARY KEY (`title`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5929a04..131e99b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -2,15 +2,17 @@ // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { - provider = "prisma-client-js" + provider = "prisma-client-js" } datasource db { - provider = "mysql" - url = env("DATABASE_URL") + provider = "mysql" + url = env("DATABASE_URL") } -model Article { - id Int @id @default(autoincrement()) - title String +model Serie { + title String @id + date Int + description String @db.VarChar(2000) + thumbmailURL String @db.VarChar(2048) } From c5f084a3446649c896fdfe042f7cd14e30cd0945 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 11:14:51 +0100 Subject: [PATCH 03/18] =?UTF-8?q?=F0=9F=93=9D=20-=20Added=20brief=20README?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b62e8d --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# CineAllo +## Setup +### Env file +- DATABASE_URL +- MYSQL_ROOT_PASSWORD +- CINEALLO_PORT +## Usage +### Docker +```bash +docker-compose up --build +``` +### From scratch +You'll need your own MySql DB running. +```bash +npm ci +``` +```bash +npm run start +``` \ No newline at end of file From 48005aaee26e1fd400168fb95a989086aea3e377 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 12:09:37 +0100 Subject: [PATCH 04/18] =?UTF-8?q?=F0=9F=94=A7=20-=20Added=20MYSQL=5FDATABA?= =?UTF-8?q?SE=20as=20env=20var?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 65a9973..1936808 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,7 @@ services: - back-net environment: - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" - - "MYSQL_DATABASE=cineallo" + - "MYSQL_DATABASE=${MYSQL_DATABASE}" volumes: - ./mysql-data:/var/lib/mysql # ports: From 6e7d8b080164c8867a3a0daf71736795afa10564 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 12:10:28 +0100 Subject: [PATCH 05/18] =?UTF-8?q?=E2=9C=A8=20-=20Added=20basics=20GET=20ro?= =?UTF-8?q?utes=20for=20shows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 9 +++++---- routes/index.js | 17 ----------------- routes/shows.js | 23 +++++++++++++++++++++++ routes/users.js | 7 ------- 4 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 routes/index.js create mode 100644 routes/shows.js delete mode 100644 routes/users.js diff --git a/app.js b/app.js index c2826dc..36fea70 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,7 @@ import express from 'express' import logger from 'morgan' import * as dotenv from 'dotenv' -import { indexRouter } from './routes/index.js' -import { usersRouter } from './routes/users.js' +import { showsRouter } from './routes/shows.js' dotenv.config() const app = express() @@ -12,7 +11,9 @@ app.use(logger('dev')) app.use(express.json()) app.use(express.urlencoded({ extended: false })) -app.use('/', indexRouter) -app.use('/users', usersRouter) +app.get('/', async (req, res, next) => { + res.send({message:"voila ton index"}) +}) +app.use('/shows', showsRouter) app.listen(port, () => console.log(`Listening on port ${port}`)) \ No newline at end of file diff --git a/routes/index.js b/routes/index.js deleted file mode 100644 index 398059c..0000000 --- a/routes/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import express from 'express' -import { PrismaClient } from '@prisma/client' - -const prisma = new PrismaClient() -export const indexRouter = express.Router() - -indexRouter.get('/', async (req, res, next) => { - res.send({message:"voila ton index"}) -}) - -indexRouter.get('/articles', async (req, res, next) => { - const articles = await prisma.article.findMany({}) - res.send({ - message:"voila tes articles", - articles - }) -}) diff --git a/routes/shows.js b/routes/shows.js new file mode 100644 index 0000000..2835671 --- /dev/null +++ b/routes/shows.js @@ -0,0 +1,23 @@ +import express from 'express' +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +export const showsRouter = express.Router() + +showsRouter.get('/', async function(req, res, next) { + const articles = await prisma.serie.findMany() + + res.send({articles}) +}) + +showsRouter.get('/:id', async function(req, res, next) { + const articles = await prisma.serie.findMany({ + where: { + title: { + contains: req.params.id + } + } + }) + + res.send({articles}) +}) diff --git a/routes/users.js b/routes/users.js deleted file mode 100644 index a33aafb..0000000 --- a/routes/users.js +++ /dev/null @@ -1,7 +0,0 @@ -import express from 'express' - -export const usersRouter = express.Router() - -usersRouter.get('/', function(req, res, next) { - res.send({message:"voila tes users"}) -}) From 476573d423d11a2a6f03093e68304404e6d0ce83 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 12:11:30 +0100 Subject: [PATCH 06/18] =?UTF-8?q?=F0=9F=93=9D=20-=20Updated=20env=20vars?= =?UTF-8?q?=20and=20added=20info=20about=20DB=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3b62e8d..51b6f91 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,10 @@ ## Setup ### Env file - DATABASE_URL +- MYSQL_DATABASE - MYSQL_ROOT_PASSWORD - CINEALLO_PORT +``DATABASE_URL`` shoud look like this: ``mysql://root:@db:3306/`` ## Usage ### Docker ```bash From 3c53d63b1f5e74f983a93aa07a54dfa0f080265c Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 12:16:12 +0100 Subject: [PATCH 07/18] =?UTF-8?q?=F0=9F=93=9D=20-=20Improved=20readability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 51b6f91..021bf68 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,11 @@ - MYSQL_DATABASE - MYSQL_ROOT_PASSWORD - CINEALLO_PORT -``DATABASE_URL`` shoud look like this: ``mysql://root:@db:3306/`` + +``DATABASE_URL`` shoud look like this: +```html +mysql://root:@db:3306/ +``` ## Usage ### Docker ```bash From 96fb0d3eab041c6ef88ef83856cf107e56909df6 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 12:48:54 +0100 Subject: [PATCH 08/18] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20-=20DB=20full=20i?= =?UTF-8?q?nit=20first=20time=20it=20starts=20w/=20docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 2 +- docker-compose.yml | 30 ++++++++++++++++++------------ package.json | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app.js b/app.js index 36fea70..3515702 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ import { showsRouter } from './routes/shows.js' dotenv.config() const app = express() -const port = process.env.CINEALLO_PORT +const port = 3000 app.use(logger('dev')) app.use(express.json()) diff --git a/docker-compose.yml b/docker-compose.yml index 1936808..059a628 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,4 @@ services: - backend: - build: . - image: cineallo-backend - env_file: - - .env - networks: - - back-net - ports: - - 3000:3000 db: image: mysql:8.0.31 env_file: @@ -19,8 +10,23 @@ services: - "MYSQL_DATABASE=${MYSQL_DATABASE}" volumes: - ./mysql-data:/var/lib/mysql - # ports: - # - 3306:3306 + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:3306" ] + interval: 5s + timeout: 15s + retries: 5 + backend: + build: . + image: cineallo-backend + depends_on: + db: + condition: service_healthy + env_file: + - .env + networks: + - back-net + ports: + - "${CINEALLO_PORT}:3000" networks: - back-net: \ No newline at end of file + back-net: diff --git a/package.json b/package.json index e1e91b6..93868be 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "start": "node app.js" + "start": "prisma migrate deploy && node app.js" }, "dependencies": { "@prisma/client": "^4.6.0", From 20bfea9c6fe5a4f8cc9468615ae9227089400eb8 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 13:08:06 +0100 Subject: [PATCH 09/18] =?UTF-8?q?=E2=9C=A8=20-=20Added=20POST=20route=20on?= =?UTF-8?q?=20shows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/shows.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/routes/shows.js b/routes/shows.js index 2835671..2373262 100644 --- a/routes/shows.js +++ b/routes/shows.js @@ -21,3 +21,19 @@ showsRouter.get('/:id', async function(req, res, next) { res.send({articles}) }) + +showsRouter.post('/', async function (req, res, next) { + try { + res.send(await prisma.serie.create({ + data: { + title: req.body.title, + date: req.body.date, + description: req.body.description, + thumbmailURL: req.body.thumbmailURL + } + })) + } catch (error) { + res.send({error, message: "You might want to check your Show data format / content."}) + } +}) + From 98db7693bc30a0a65155a2a86a6e405f36524937 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 13:34:37 +0100 Subject: [PATCH 10/18] =?UTF-8?q?=F0=9F=90=9B=20-=20contains=20->=20equals?= =?UTF-8?q?=20in=20where=20clause=20show=20route?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/shows.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/shows.js b/routes/shows.js index 2373262..7e3699d 100644 --- a/routes/shows.js +++ b/routes/shows.js @@ -14,7 +14,7 @@ showsRouter.get('/:id', async function(req, res, next) { const articles = await prisma.serie.findMany({ where: { title: { - contains: req.params.id + equals: req.params.id } } }) From 71a451c4f494778497c8630a9ab6340332a31179 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 13:35:28 +0100 Subject: [PATCH 11/18] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20-=20Added=20likes?= =?UTF-8?q?=20field=20in=20show=20table=20db?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/migrations/20221110122130_/migration.sql | 2 ++ prisma/schema.prisma | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 prisma/migrations/20221110122130_/migration.sql diff --git a/prisma/migrations/20221110122130_/migration.sql b/prisma/migrations/20221110122130_/migration.sql new file mode 100644 index 0000000..64cd81a --- /dev/null +++ b/prisma/migrations/20221110122130_/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE `Serie` ADD COLUMN `likes` INTEGER NOT NULL DEFAULT 0; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 131e99b..49bc9c2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -2,17 +2,18 @@ // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { - provider = "prisma-client-js" + provider = "prisma-client-js" } datasource db { - provider = "mysql" - url = env("DATABASE_URL") + provider = "mysql" + url = env("DATABASE_URL") } model Serie { - title String @id - date Int - description String @db.VarChar(2000) - thumbmailURL String @db.VarChar(2048) + title String @id + date Int + description String @db.VarChar(2000) + thumbmailURL String @db.VarChar(2048) + likes Int @default(0) } From 30e12ee25f40b31b409ae116b87866eee1935a83 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 13:36:10 +0100 Subject: [PATCH 12/18] =?UTF-8?q?=F0=9F=94=A7=20-=20Adujsted=20healthcheck?= =?UTF-8?q?=20delays?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 059a628..ff7fcae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,9 +12,9 @@ services: - ./mysql-data:/var/lib/mysql healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:3306" ] - interval: 5s - timeout: 15s - retries: 5 + interval: 3s + timeout: 30s + retries: 10 backend: build: . image: cineallo-backend From f3985633d90289fc3f62d6524529c1fd4cb9f85c Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 13:36:25 +0100 Subject: [PATCH 13/18] =?UTF-8?q?=F0=9F=94=A7=20-=20Added=20npx=20to=20pri?= =?UTF-8?q?sma=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93868be..1125ee5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "start": "prisma migrate deploy && node app.js" + "start": "npx prisma migrate deploy && node app.js" }, "dependencies": { "@prisma/client": "^4.6.0", From 2715df2678da5db42423e5638d8c187b18d048f1 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 14:05:23 +0100 Subject: [PATCH 14/18] =?UTF-8?q?=E2=9E=95=20-=20Added=20httperrors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 37 +++++++++++++++++++++++++++++++++++-- package.json | 4 +++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e81a02..d94ff83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "expresstemplate", + "name": "CineAllo", "version": "0.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "expresstemplate", + "name": "CineAllo", "version": "0.0.0", "dependencies": { "@prisma/client": "^4.6.0", @@ -13,6 +13,7 @@ "dotenv": "^16.0.3", "express": "~4.16.1", "http-errors": "~2.0.0", + "httperrors": "^2.3.0", "morgan": "~1.9.1", "prisma": "^4.6.0" } @@ -144,6 +145,14 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/createerror": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/createerror/-/createerror-1.3.0.tgz", + "integrity": "sha512-w9UZUtkaGd8MfS7eMG7Sa0lV5vCJghqQfiOnwNVrPhbZScUp5h0jwYoAF933MKlotlG1JAJOCCT3xU6r+SDKNw==", + "engines": { + "node": ">= 0.2.0" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -316,6 +325,17 @@ "node": ">= 0.8" } }, + "node_modules/httperrors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/httperrors/-/httperrors-2.3.0.tgz", + "integrity": "sha512-U1WA9mlJb0ux9C5U4aNRJrNTWxSoBq2ypj3PNJeS1hTvrfUuCwXpaaF7WsqSf05LQi7HkE8E5FnDz1iWCQzgkQ==", + "dependencies": { + "createerror": "1.3.0" + }, + "engines": { + "node": ">= 0.2.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -745,6 +765,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "createerror": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/createerror/-/createerror-1.3.0.tgz", + "integrity": "sha512-w9UZUtkaGd8MfS7eMG7Sa0lV5vCJghqQfiOnwNVrPhbZScUp5h0jwYoAF933MKlotlG1JAJOCCT3xU6r+SDKNw==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -885,6 +910,14 @@ } } }, + "httperrors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/httperrors/-/httperrors-2.3.0.tgz", + "integrity": "sha512-U1WA9mlJb0ux9C5U4aNRJrNTWxSoBq2ypj3PNJeS1hTvrfUuCwXpaaF7WsqSf05LQi7HkE8E5FnDz1iWCQzgkQ==", + "requires": { + "createerror": "1.3.0" + } + }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", diff --git a/package.json b/package.json index 1125ee5..536948b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "private": true, "type": "module", "scripts": { - "start": "npx prisma migrate deploy && node app.js" + "start": "npx prisma migrate deploy && node app.js", + "dev": "node app.js" }, "dependencies": { "@prisma/client": "^4.6.0", @@ -12,6 +13,7 @@ "dotenv": "^16.0.3", "express": "~4.16.1", "http-errors": "~2.0.0", + "httperrors": "^2.3.0", "morgan": "~1.9.1", "prisma": "^4.6.0" } From 713b41ab10e75174e70c64086a0cc09b629dc2cc Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 14:05:45 +0100 Subject: [PATCH 15/18] =?UTF-8?q?=F0=9F=8E=A8=20-=20Improved=20struct=20/?= =?UTF-8?q?=20errors=20managment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/shows.js | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/routes/shows.js b/routes/shows.js index 7e3699d..813f5f4 100644 --- a/routes/shows.js +++ b/routes/shows.js @@ -1,39 +1,42 @@ import express from 'express' -import { PrismaClient } from '@prisma/client' +import { Prisma, PrismaClient } from '@prisma/client' +import createHttpError from 'http-errors' const prisma = new PrismaClient() export const showsRouter = express.Router() showsRouter.get('/', async function(req, res, next) { - const articles = await prisma.serie.findMany() + const shows = await prisma.serie.findMany() - res.send({articles}) + res.send({shows}) }) -showsRouter.get('/:id', async function(req, res, next) { - const articles = await prisma.serie.findMany({ +showsRouter.get('/:id', function(req, res, next) { + prisma.serie.findUniqueOrThrow({ where: { title: { equals: req.params.id } + }}) + .then(show => res.send(show)) + .catch(error => { + if (error instanceof Prisma.NotFoundError) { + next(createHttpError(404, 'Show unknown.')) } }) - - res.send({articles}) }) showsRouter.post('/', async function (req, res, next) { - try { - res.send(await prisma.serie.create({ - data: { - title: req.body.title, - date: req.body.date, - description: req.body.description, - thumbmailURL: req.body.thumbmailURL - } - })) - } catch (error) { - res.send({error, message: "You might want to check your Show data format / content."}) - } + prisma.serie.create({ + data: { + title: req.body.title, + date: req.body.date, + description: req.body.description, + thumbmailURL: req.body.thumbmailURL + }}) + .then(() => res.send({message: 'Show posted!'})) + .catch(() => { + next(createHttpError(400, 'Check your show model/content.')) + }) }) From c9a75fa70019db6f2027a23ef50be627de17adf3 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 19:01:06 +0100 Subject: [PATCH 16/18] =?UTF-8?q?=E2=9E=96=20-=20Removed=20wrong=20httperr?= =?UTF-8?q?ors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 37 ++----------------------------------- package.json | 1 - 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index d94ff83..2e81a02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "CineAllo", + "name": "expresstemplate", "version": "0.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "CineAllo", + "name": "expresstemplate", "version": "0.0.0", "dependencies": { "@prisma/client": "^4.6.0", @@ -13,7 +13,6 @@ "dotenv": "^16.0.3", "express": "~4.16.1", "http-errors": "~2.0.0", - "httperrors": "^2.3.0", "morgan": "~1.9.1", "prisma": "^4.6.0" } @@ -145,14 +144,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/createerror": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/createerror/-/createerror-1.3.0.tgz", - "integrity": "sha512-w9UZUtkaGd8MfS7eMG7Sa0lV5vCJghqQfiOnwNVrPhbZScUp5h0jwYoAF933MKlotlG1JAJOCCT3xU6r+SDKNw==", - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -325,17 +316,6 @@ "node": ">= 0.8" } }, - "node_modules/httperrors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/httperrors/-/httperrors-2.3.0.tgz", - "integrity": "sha512-U1WA9mlJb0ux9C5U4aNRJrNTWxSoBq2ypj3PNJeS1hTvrfUuCwXpaaF7WsqSf05LQi7HkE8E5FnDz1iWCQzgkQ==", - "dependencies": { - "createerror": "1.3.0" - }, - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -765,11 +745,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "createerror": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/createerror/-/createerror-1.3.0.tgz", - "integrity": "sha512-w9UZUtkaGd8MfS7eMG7Sa0lV5vCJghqQfiOnwNVrPhbZScUp5h0jwYoAF933MKlotlG1JAJOCCT3xU6r+SDKNw==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -910,14 +885,6 @@ } } }, - "httperrors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/httperrors/-/httperrors-2.3.0.tgz", - "integrity": "sha512-U1WA9mlJb0ux9C5U4aNRJrNTWxSoBq2ypj3PNJeS1hTvrfUuCwXpaaF7WsqSf05LQi7HkE8E5FnDz1iWCQzgkQ==", - "requires": { - "createerror": "1.3.0" - } - }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", diff --git a/package.json b/package.json index 536948b..1c369b2 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "dotenv": "^16.0.3", "express": "~4.16.1", "http-errors": "~2.0.0", - "httperrors": "^2.3.0", "morgan": "~1.9.1", "prisma": "^4.6.0" } From 2304495136ea6bcb05f56774d47d2f5653cf1046 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 10 Nov 2022 19:01:48 +0100 Subject: [PATCH 17/18] =?UTF-8?q?=F0=9F=8E=A8=20-=20Improved=20prisma=20fu?= =?UTF-8?q?ncs=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/shows.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/routes/shows.js b/routes/shows.js index 813f5f4..d8db436 100644 --- a/routes/shows.js +++ b/routes/shows.js @@ -5,38 +5,38 @@ import createHttpError from 'http-errors' const prisma = new PrismaClient() export const showsRouter = express.Router() -showsRouter.get('/', async function(req, res, next) { +showsRouter.get('/', async function (req, res, next) { const shows = await prisma.serie.findMany() - res.send({shows}) + res.send({ shows }) }) -showsRouter.get('/:id', function(req, res, next) { +showsRouter.get('/:id', function (req, res, next) { prisma.serie.findUniqueOrThrow({ where: { - title: { - equals: req.params.id - } - }}) - .then(show => res.send(show)) - .catch(error => { - if (error instanceof Prisma.NotFoundError) { - next(createHttpError(404, 'Show unknown.')) + title: req.params.id } }) + .then(show => res.send({ show })) + .catch(error => { + if (error instanceof Prisma.NotFoundError) { + next(createHttpError(404, 'Show not found.')) + } + }) }) -showsRouter.post('/', async function (req, res, next) { +showsRouter.post('/', function (req, res, next) { prisma.serie.create({ data: { title: req.body.title, date: req.body.date, description: req.body.description, thumbmailURL: req.body.thumbmailURL - }}) - .then(() => res.send({message: 'Show posted!'})) - .catch(() => { - next(createHttpError(400, 'Check your show model/content.')) + } }) + .then(() => res.send({ message: 'Show posted!' })) + .catch(() => { + next(createHttpError(400, 'Check your show model/content.')) + }) }) From 213d3a152551c98acdedc342c47ec08fd9ef4ff8 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Fri, 11 Nov 2022 01:10:46 +0100 Subject: [PATCH 18/18] =?UTF-8?q?=E2=9C=A8=20-=20Added=20like=20PATCH=20ro?= =?UTF-8?q?ute=20on=20/shows/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/shows.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/routes/shows.js b/routes/shows.js index d8db436..1081df1 100644 --- a/routes/shows.js +++ b/routes/shows.js @@ -5,10 +5,13 @@ import createHttpError from 'http-errors' const prisma = new PrismaClient() export const showsRouter = express.Router() -showsRouter.get('/', async function (req, res, next) { - const shows = await prisma.serie.findMany() - - res.send({ shows }) +showsRouter.get('/', function (req, res, next) { + prisma.serie.findMany({ + orderBy: { + likes: 'desc' + } + }) + .then(shows => res.send({ shows })) }) showsRouter.get('/:id', function (req, res, next) { @@ -40,3 +43,19 @@ showsRouter.post('/', function (req, res, next) { }) }) +showsRouter.patch('/like/:id', function (req, res, next) { + prisma.serie.update({ + where: { + title: req.params.id + }, + data: { + likes: { + increment: 1 + } + } + }) + .then(() => res.send({ message: 'Show liked!' })) + .catch(() => { + next(createHttpError(400, 'Show not found.')) + }) +}) \ No newline at end of file