Finalised prisma common module setup
This commit is contained in:
parent
a7da23778c
commit
32b00a5417
58
package-lock.json
generated
58
package-lock.json
generated
|
|
@ -7,12 +7,14 @@
|
|||
"": {
|
||||
"name": "pandektes-challenge",
|
||||
"version": "0.0.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"@apollo/server": "^5.4.0",
|
||||
"@as-integrations/express5": "^1.1.2",
|
||||
"@nestjs/apollo": "^13.2.4",
|
||||
"@nestjs/common": "^11.1.14",
|
||||
"@nestjs/config": "^4.0.3",
|
||||
"@nestjs/core": "^11.1.14",
|
||||
"@nestjs/graphql": "^13.2.4",
|
||||
"@nestjs/platform-express": "^11.0.1",
|
||||
|
|
@ -37,6 +39,7 @@
|
|||
"@types/express": "^5.0.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^22.10.7",
|
||||
"@types/pg": "^8.18.0",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"eslint": "^9.18.0",
|
||||
"eslint-config-prettier": "^10.0.1",
|
||||
|
|
@ -2759,6 +2762,33 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/config": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/config/-/config-4.0.3.tgz",
|
||||
"integrity": "sha512-FQ3M3Ohqfl+nHAn5tp7++wUQw0f2nAk+SFKe8EpNRnIifPqvfJP6JQxPKtFLMOHbyer4X646prFG4zSRYEssQQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dotenv": "17.2.3",
|
||||
"dotenv-expand": "12.0.3",
|
||||
"lodash": "4.17.23"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
||||
"rxjs": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/config/node_modules/dotenv": {
|
||||
"version": "17.2.3",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
|
||||
"integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/core": {
|
||||
"version": "11.1.14",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.14.tgz",
|
||||
|
|
@ -3745,6 +3775,18 @@
|
|||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg": {
|
||||
"version": "8.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.18.0.tgz",
|
||||
"integrity": "sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"pg-protocol": "*",
|
||||
"pg-types": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
|
||||
|
|
@ -5947,7 +5989,6 @@
|
|||
"version": "16.6.1",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
|
||||
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
|
||||
"devOptional": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
|
|
@ -5956,6 +5997,21 @@
|
|||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv-expand": {
|
||||
"version": "12.0.3",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz",
|
||||
"integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==",
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.4.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
"@as-integrations/express5": "^1.1.2",
|
||||
"@nestjs/apollo": "^13.2.4",
|
||||
"@nestjs/common": "^11.1.14",
|
||||
"@nestjs/config": "^4.0.3",
|
||||
"@nestjs/core": "^11.1.14",
|
||||
"@nestjs/graphql": "^13.2.4",
|
||||
"@nestjs/platform-express": "^11.0.1",
|
||||
|
|
@ -49,6 +50,7 @@
|
|||
"@types/express": "^5.0.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^22.10.7",
|
||||
"@types/pg": "^8.18.0",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"eslint": "^9.18.0",
|
||||
"eslint-config-prettier": "^10.0.1",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
-- CreateTable
|
||||
CREATE TABLE "CaseLaw" (
|
||||
"id" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"decisionType" TEXT,
|
||||
"decisionDate" TIMESTAMP(3),
|
||||
"office" TEXT,
|
||||
"court" TEXT,
|
||||
"caseNumber" TEXT,
|
||||
"summary" TEXT,
|
||||
"fileType" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "CaseLaw_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "postgresql"
|
||||
|
|
@ -12,3 +12,17 @@ generator client {
|
|||
datasource db {
|
||||
provider = "postgresql"
|
||||
}
|
||||
|
||||
model CaseLaw {
|
||||
id String @id @default(uuid())
|
||||
title String
|
||||
decisionType String?
|
||||
decisionDate DateTime?
|
||||
office String?
|
||||
court String?
|
||||
caseNumber String?
|
||||
summary String? @db.Text
|
||||
fileType String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { PrismaModule } from './common/prisma/prisma.module';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
imports: [PrismaModule],
|
||||
controllers: [],
|
||||
providers: [],
|
||||
})
|
||||
|
|
|
|||
19
src/common/prisma/prisma.module.ts
Normal file
19
src/common/prisma/prisma.module.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import { Global, Module } from '@nestjs/common';
|
||||
import {
|
||||
PrismaService,
|
||||
PRISMA_CLIENT,
|
||||
} from './prisma.service.js';
|
||||
|
||||
@Global()
|
||||
@Module({
|
||||
providers: [
|
||||
PrismaService,
|
||||
{
|
||||
provide: PRISMA_CLIENT,
|
||||
useFactory: (prismaService: PrismaService) => prismaService.client,
|
||||
inject: [PrismaService],
|
||||
},
|
||||
],
|
||||
exports: [PrismaService, PRISMA_CLIENT],
|
||||
})
|
||||
export class PrismaModule {}
|
||||
27
src/common/prisma/prisma.service.ts
Normal file
27
src/common/prisma/prisma.service.ts
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import { PrismaClient } from '@db';
|
||||
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { PrismaPg } from '@prisma/adapter-pg';
|
||||
|
||||
export type PrismaClientInstance = PrismaClient;
|
||||
export const PRISMA_CLIENT = Symbol('PRISMA_CLIENT');
|
||||
|
||||
@Injectable()
|
||||
export class PrismaService implements OnModuleInit, OnModuleDestroy {
|
||||
public readonly client: PrismaClient;
|
||||
|
||||
constructor(private config: ConfigService) {
|
||||
const adapter = new PrismaPg({
|
||||
connectionString: this.config.getOrThrow<string>('DATABASE_URL'),
|
||||
});
|
||||
this.client = new PrismaClient({ adapter });
|
||||
}
|
||||
|
||||
async onModuleInit() {
|
||||
await this.client.$connect();
|
||||
}
|
||||
|
||||
async onModuleDestroy() {
|
||||
await this.client.$disconnect();
|
||||
}
|
||||
}
|
||||
|
|
@ -14,6 +14,11 @@
|
|||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@db": [
|
||||
"./src/generated/prisma/client.ts"
|
||||
]
|
||||
},
|
||||
"incremental": true,
|
||||
"skipLibCheck": true,
|
||||
"strictNullChecks": true,
|
||||
|
|
@ -22,4 +27,4 @@
|
|||
"strictBindCallApply": false,
|
||||
"noFallthroughCasesInSwitch": false
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue