From 22e08ae1facd878a3a0964a4b2f54455fb41ccdf Mon Sep 17 00:00:00 2001 From: Louis Auzuret Date: Sun, 19 Jun 2022 22:11:59 +0200 Subject: [PATCH] feat: Add prisma to project --- back/package-lock.json | 77 ++++++++++++++++++++++++-- back/package.json | 2 + back/prisma/schema.prisma | 10 +++- back/src/prisma/prisma.module.ts | 8 +++ back/src/prisma/prisma.service.spec.ts | 18 ++++++ back/src/prisma/prisma.service.ts | 15 +++++ 6 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 back/src/prisma/prisma.module.ts create mode 100644 back/src/prisma/prisma.service.spec.ts create mode 100644 back/src/prisma/prisma.service.ts diff --git a/back/package-lock.json b/back/package-lock.json index 04d23a0..fbb2dca 100644 --- a/back/package-lock.json +++ b/back/package-lock.json @@ -11,7 +11,9 @@ "dependencies": { "@nestjs/common": "^8.0.0", "@nestjs/core": "^8.0.0", + "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^8.0.0", + "@prisma/client": "^3.14.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" @@ -1455,6 +1457,25 @@ } } }, + "node_modules/@nestjs/mapped-types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.1.tgz", + "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==", + "peerDependencies": { + "@nestjs/common": "^7.0.8 || ^8.0.0", + "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/platform-express": { "version": "8.4.4", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.4.tgz", @@ -1586,13 +1607,38 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@prisma/client": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.14.0.tgz", + "integrity": "sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + }, + "engines": { + "node": ">=12.6" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, "node_modules/@prisma/engines": { "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==", - "dev": true, + "devOptional": true, "hasInstallScript": true }, + "node_modules/@prisma/engines-version": { + "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", + "integrity": "sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ==" + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -6980,7 +7026,7 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "dependencies": { "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", @@ -8276,7 +8322,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==", - "dev": true + "devOptional": true }, "node_modules/tsconfig-paths": { "version": "3.14.1", @@ -9956,6 +10002,12 @@ "uuid": "8.3.2" } }, + "@nestjs/mapped-types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.1.tgz", + "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==", + "requires": {} + }, "@nestjs/platform-express": { "version": "8.4.4", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.4.tgz", @@ -10038,11 +10090,24 @@ } } }, + "@prisma/client": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.14.0.tgz", + "integrity": "sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA==", + "requires": { + "@prisma/engines-version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + } + }, "@prisma/engines": { "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==", - "dev": true + "devOptional": true + }, + "@prisma/engines-version": { + "version": "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz", + "integrity": "sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ==" }, "@sinonjs/commons": { "version": "1.8.3", @@ -14179,7 +14244,7 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", - "dev": true, + "devOptional": true, "requires": { "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "ts-pattern": "^4.0.1" @@ -15115,7 +15180,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==", - "dev": true + "devOptional": true }, "tsconfig-paths": { "version": "3.14.1", diff --git a/back/package.json b/back/package.json index ca34cbd..a1b646f 100644 --- a/back/package.json +++ b/back/package.json @@ -23,7 +23,9 @@ "dependencies": { "@nestjs/common": "^8.0.0", "@nestjs/core": "^8.0.0", + "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^8.0.0", + "@prisma/client": "^3.14.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" diff --git a/back/prisma/schema.prisma b/back/prisma/schema.prisma index d205f42..95cc5b4 100644 --- a/back/prisma/schema.prisma +++ b/back/prisma/schema.prisma @@ -1,7 +1,5 @@ // This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -generator client { +// learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } @@ -9,3 +7,9 @@ datasource db { provider = "postgresql" url = env("DATABASE_URL") } + +model User { + id Int @default(autoincrement()) @id + email String @unique + name String? +} diff --git a/back/src/prisma/prisma.module.ts b/back/src/prisma/prisma.module.ts new file mode 100644 index 0000000..e569e2d --- /dev/null +++ b/back/src/prisma/prisma.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; + +@Module({ + providers: [PrismaService], + exports: [PrismaService] +}) +export class PrismaModule {} diff --git a/back/src/prisma/prisma.service.spec.ts b/back/src/prisma/prisma.service.spec.ts new file mode 100644 index 0000000..a68cb9e --- /dev/null +++ b/back/src/prisma/prisma.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PrismaService } from './prisma.service'; + +describe('PrismaService', () => { + let service: PrismaService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [PrismaService], + }).compile(); + + service = module.get(PrismaService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/back/src/prisma/prisma.service.ts b/back/src/prisma/prisma.service.ts new file mode 100644 index 0000000..edf6532 --- /dev/null +++ b/back/src/prisma/prisma.service.ts @@ -0,0 +1,15 @@ +import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Injectable() +export class PrismaService extends PrismaClient implements OnModuleInit { + async onModuleInit() { + await this.$connect(); + } + + async enableShutdownHooks(app: INestApplication) { + this.$on('beforeExit', async () => { + await app.close(); + }); + } +}