@dismissible/nestjs-postgres-storage 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +309 -0
- package/bin/dismissible-prisma.js +57 -0
- package/package.json +67 -0
- package/prisma/generated/prisma/client.d.ts +26 -0
- package/prisma/generated/prisma/client.js +34 -0
- package/prisma/generated/prisma/client.js.map +1 -0
- package/prisma/generated/prisma/commonInputTypes.d.ts +177 -0
- package/prisma/generated/prisma/commonInputTypes.js +12 -0
- package/prisma/generated/prisma/commonInputTypes.js.map +1 -0
- package/prisma/generated/prisma/enums.d.ts +1 -0
- package/prisma/generated/prisma/enums.js +12 -0
- package/prisma/generated/prisma/enums.js.map +1 -0
- package/prisma/generated/prisma/internal/class.d.ts +126 -0
- package/prisma/generated/prisma/internal/class.js +45 -0
- package/prisma/generated/prisma/internal/class.js.map +1 -0
- package/prisma/generated/prisma/internal/prismaNamespace.d.ts +528 -0
- package/prisma/generated/prisma/internal/prismaNamespace.js +104 -0
- package/prisma/generated/prisma/internal/prismaNamespace.js.map +1 -0
- package/prisma/generated/prisma/models/DismissibleItem.d.ts +979 -0
- package/prisma/generated/prisma/models/DismissibleItem.js +3 -0
- package/prisma/generated/prisma/models/DismissibleItem.js.map +1 -0
- package/prisma/generated/prisma/models.d.ts +2 -0
- package/prisma/generated/prisma/models.js +3 -0
- package/prisma/generated/prisma/models.js.map +1 -0
- package/prisma/migrations/20251219094936_init/migration.sql +12 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +23 -0
- package/prisma.config.mjs +33 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +10 -0
- package/src/index.js.map +1 -0
- package/src/postgres-storage.adapter.d.ts +21 -0
- package/src/postgres-storage.adapter.js +81 -0
- package/src/postgres-storage.adapter.js.map +1 -0
- package/src/postgres-storage.config.d.ts +7 -0
- package/src/postgres-storage.config.js +17 -0
- package/src/postgres-storage.config.js.map +1 -0
- package/src/postgres-storage.module.d.ts +12 -0
- package/src/postgres-storage.module.js +72 -0
- package/src/postgres-storage.module.js.map +1 -0
- package/src/prisma-config.d.ts +61 -0
- package/src/prisma-config.js +65 -0
- package/src/prisma-config.js.map +1 -0
- package/src/prisma.service.d.ts +15 -0
- package/src/prisma.service.js +48 -0
- package/src/prisma.service.js.map +1 -0
- package/src/schema-path.d.ts +13 -0
- package/src/schema-path.js +20 -0
- package/src/schema-path.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DismissibleItem.js","sourceRoot":"","sources":["../../../../../../../libs/postgres-storage/prisma/generated/prisma/models/DismissibleItem.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../../../libs/postgres-storage/prisma/generated/prisma/models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "dismissible_items" (
|
|
3
|
+
"id" TEXT NOT NULL,
|
|
4
|
+
"user_id" TEXT NOT NULL,
|
|
5
|
+
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
6
|
+
"dismissed_at" TIMESTAMP(3),
|
|
7
|
+
|
|
8
|
+
CONSTRAINT "dismissible_items_pkey" PRIMARY KEY ("user_id","id")
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- CreateIndex
|
|
12
|
+
CREATE INDEX "dismissible_items_user_id_idx" ON "dismissible_items"("user_id");
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Prisma schema for Dismissible PostgreSQL storage
|
|
2
|
+
// https://pris.ly/d/prisma-schema
|
|
3
|
+
|
|
4
|
+
generator client {
|
|
5
|
+
provider = "prisma-client"
|
|
6
|
+
output = "./generated/prisma"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
datasource db {
|
|
10
|
+
provider = "postgresql"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
model DismissibleItem {
|
|
14
|
+
id String
|
|
15
|
+
userId String @map("user_id")
|
|
16
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
17
|
+
dismissedAt DateTime? @map("dismissed_at")
|
|
18
|
+
|
|
19
|
+
@@id([userId, id])
|
|
20
|
+
@@index([userId])
|
|
21
|
+
@@map("dismissible_items")
|
|
22
|
+
}
|
|
23
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { fileURLToPath } from 'url';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { defineConfig } from 'prisma/config';
|
|
4
|
+
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const prismaDir = join(__dirname, 'prisma');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Prisma configuration for @dismissible/nestjs-postgres-storage.
|
|
10
|
+
*
|
|
11
|
+
* This config is used by the dismissible-prisma CLI and can be used directly
|
|
12
|
+
* by consumers who need to extend or customize the configuration.
|
|
13
|
+
*
|
|
14
|
+
* For consumers who want to use the base config in their own prisma.config.mjs:
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```javascript
|
|
18
|
+
* import { defineConfig } from 'prisma/config';
|
|
19
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
20
|
+
*
|
|
21
|
+
* export default defineConfig(basePrismaConfig);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export default defineConfig({
|
|
25
|
+
schema: join(prismaDir, 'schema.prisma'),
|
|
26
|
+
migrations: {
|
|
27
|
+
path: join(prismaDir, 'migrations'),
|
|
28
|
+
},
|
|
29
|
+
datasource: {
|
|
30
|
+
url:
|
|
31
|
+
process.env.DATABASE_URL ?? process.env.DISMISSIBLE_POSTGRES_STORAGE_CONNECTION_STRING ?? '',
|
|
32
|
+
},
|
|
33
|
+
});
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./postgres-storage.adapter"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./postgres-storage.config"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./postgres-storage.module"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./prisma.service"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./prisma-config"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./schema-path"), exports);
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,oEAA0C;AAC1C,oEAA0C;AAC1C,2DAAiC;AACjC,0DAAgC;AAChC,wDAA8B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IDismissibleLogger } from '@dismissible/nestjs-logger';
|
|
2
|
+
import { IDismissibleStorage } from '@dismissible/nestjs-storage';
|
|
3
|
+
import { DismissibleItemDto, DismissibleItemFactory } from '@dismissible/nestjs-dismissible-item';
|
|
4
|
+
import { PrismaService } from './prisma.service';
|
|
5
|
+
/**
|
|
6
|
+
* PostgreSQL storage adapter for dismissible items using Prisma.
|
|
7
|
+
* Implements IDismissibleStorage for persistent database storage.
|
|
8
|
+
*/
|
|
9
|
+
export declare class PostgresStorageAdapter implements IDismissibleStorage {
|
|
10
|
+
private readonly prisma;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly itemFactory;
|
|
13
|
+
constructor(prisma: PrismaService, logger: IDismissibleLogger, itemFactory: DismissibleItemFactory);
|
|
14
|
+
get(userId: string, itemId: string): Promise<DismissibleItemDto | null>;
|
|
15
|
+
create(item: DismissibleItemDto): Promise<DismissibleItemDto>;
|
|
16
|
+
update(item: DismissibleItemDto): Promise<DismissibleItemDto>;
|
|
17
|
+
/**
|
|
18
|
+
* Map a Prisma model to a DismissibleItemDto.
|
|
19
|
+
*/
|
|
20
|
+
private mapToDto;
|
|
21
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostgresStorageAdapter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const nestjs_logger_1 = require("@dismissible/nestjs-logger");
|
|
7
|
+
const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
|
|
8
|
+
const prisma_service_1 = require("./prisma.service");
|
|
9
|
+
/**
|
|
10
|
+
* PostgreSQL storage adapter for dismissible items using Prisma.
|
|
11
|
+
* Implements IDismissibleStorage for persistent database storage.
|
|
12
|
+
*/
|
|
13
|
+
let PostgresStorageAdapter = class PostgresStorageAdapter {
|
|
14
|
+
constructor(prisma, logger, itemFactory) {
|
|
15
|
+
this.prisma = prisma;
|
|
16
|
+
this.logger = logger;
|
|
17
|
+
this.itemFactory = itemFactory;
|
|
18
|
+
}
|
|
19
|
+
async get(userId, itemId) {
|
|
20
|
+
this.logger.debug('PostgreSQL storage get', { userId, itemId });
|
|
21
|
+
const item = await this.prisma.dismissibleItem.findUnique({
|
|
22
|
+
where: {
|
|
23
|
+
userId_id: {
|
|
24
|
+
userId,
|
|
25
|
+
id: itemId,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
if (!item) {
|
|
30
|
+
this.logger.debug('PostgreSQL storage miss', { userId, itemId });
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
this.logger.debug('PostgreSQL storage hit', { userId, itemId });
|
|
34
|
+
return this.mapToDto(item);
|
|
35
|
+
}
|
|
36
|
+
async create(item) {
|
|
37
|
+
this.logger.debug('PostgreSQL storage create', { userId: item.userId, itemId: item.id });
|
|
38
|
+
const created = await this.prisma.dismissibleItem.create({
|
|
39
|
+
data: {
|
|
40
|
+
id: item.id,
|
|
41
|
+
userId: item.userId,
|
|
42
|
+
createdAt: item.createdAt,
|
|
43
|
+
dismissedAt: item.dismissedAt ?? null,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return this.mapToDto(created);
|
|
47
|
+
}
|
|
48
|
+
async update(item) {
|
|
49
|
+
this.logger.debug('PostgreSQL storage update', { userId: item.userId, itemId: item.id });
|
|
50
|
+
const updated = await this.prisma.dismissibleItem.update({
|
|
51
|
+
where: {
|
|
52
|
+
userId_id: {
|
|
53
|
+
userId: item.userId,
|
|
54
|
+
id: item.id,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
data: {
|
|
58
|
+
dismissedAt: item.dismissedAt ?? null,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
return this.mapToDto(updated);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Map a Prisma model to a DismissibleItemDto.
|
|
65
|
+
*/
|
|
66
|
+
mapToDto(item) {
|
|
67
|
+
return this.itemFactory.create({
|
|
68
|
+
id: item.id,
|
|
69
|
+
userId: item.userId,
|
|
70
|
+
createdAt: item.createdAt,
|
|
71
|
+
dismissedAt: item.dismissedAt ?? undefined,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
exports.PostgresStorageAdapter = PostgresStorageAdapter;
|
|
76
|
+
exports.PostgresStorageAdapter = PostgresStorageAdapter = tslib_1.__decorate([
|
|
77
|
+
(0, common_1.Injectable)(),
|
|
78
|
+
tslib_1.__param(1, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
|
|
79
|
+
tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaService, Object, nestjs_dismissible_item_1.DismissibleItemFactory])
|
|
80
|
+
], PostgresStorageAdapter);
|
|
81
|
+
//# sourceMappingURL=postgres-storage.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-storage.adapter.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/postgres-storage.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostgresStorageConfig = exports.DISMISSIBLE_POSTGRES_STORAGE_CONFIG = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
/**
|
|
7
|
+
* Injection token for the PostgresStorage configuration.
|
|
8
|
+
*/
|
|
9
|
+
exports.DISMISSIBLE_POSTGRES_STORAGE_CONFIG = Symbol('DISMISSIBLE_POSTGRES_STORAGE_CONFIG');
|
|
10
|
+
class PostgresStorageConfig {
|
|
11
|
+
}
|
|
12
|
+
exports.PostgresStorageConfig = PostgresStorageConfig;
|
|
13
|
+
tslib_1.__decorate([
|
|
14
|
+
(0, class_validator_1.IsString)(),
|
|
15
|
+
tslib_1.__metadata("design:type", String)
|
|
16
|
+
], PostgresStorageConfig.prototype, "connectionString", void 0);
|
|
17
|
+
//# sourceMappingURL=postgres-storage.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-storage.config.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/postgres-storage.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA2C;AAE3C;;GAEG;AACU,QAAA,mCAAmC,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC;AAEjG,MAAa,qBAAqB;CAGjC;AAHD,sDAGC;AADiB;IADf,IAAA,0BAAQ,GAAE;;+DAC+B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DynamicModule, ModuleMetadata } from '@nestjs/common';
|
|
2
|
+
export interface PostgresStorageModuleOptions {
|
|
3
|
+
connectionString: string;
|
|
4
|
+
}
|
|
5
|
+
export interface PostgresStorageModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
6
|
+
inject?: any[];
|
|
7
|
+
useFactory: (...args: any[]) => PostgresStorageModuleOptions | Promise<PostgresStorageModuleOptions>;
|
|
8
|
+
}
|
|
9
|
+
export declare class PostgresStorageModule {
|
|
10
|
+
static forRoot(options: PostgresStorageModuleOptions): DynamicModule;
|
|
11
|
+
static forRootAsync(options: PostgresStorageModuleAsyncOptions): DynamicModule;
|
|
12
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var PostgresStorageModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PostgresStorageModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const nestjs_storage_1 = require("@dismissible/nestjs-storage");
|
|
8
|
+
const postgres_storage_adapter_1 = require("./postgres-storage.adapter");
|
|
9
|
+
const prisma_service_1 = require("./prisma.service");
|
|
10
|
+
const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
|
|
11
|
+
const nestjs_logger_1 = require("@dismissible/nestjs-logger");
|
|
12
|
+
const postgres_storage_config_1 = require("./postgres-storage.config");
|
|
13
|
+
let PostgresStorageModule = PostgresStorageModule_1 = class PostgresStorageModule {
|
|
14
|
+
static forRoot(options) {
|
|
15
|
+
return {
|
|
16
|
+
module: PostgresStorageModule_1,
|
|
17
|
+
imports: [nestjs_dismissible_item_1.DismissibleItemModule],
|
|
18
|
+
providers: [
|
|
19
|
+
{
|
|
20
|
+
provide: postgres_storage_config_1.DISMISSIBLE_POSTGRES_STORAGE_CONFIG,
|
|
21
|
+
useValue: {
|
|
22
|
+
connectionString: options.connectionString,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
provide: prisma_service_1.PrismaService,
|
|
27
|
+
useFactory(config, logger) {
|
|
28
|
+
return new prisma_service_1.PrismaService(config, logger);
|
|
29
|
+
},
|
|
30
|
+
inject: [postgres_storage_config_1.DISMISSIBLE_POSTGRES_STORAGE_CONFIG, nestjs_logger_1.DISMISSIBLE_LOGGER],
|
|
31
|
+
},
|
|
32
|
+
postgres_storage_adapter_1.PostgresStorageAdapter,
|
|
33
|
+
{
|
|
34
|
+
provide: nestjs_storage_1.DISMISSIBLE_STORAGE_ADAPTER,
|
|
35
|
+
useExisting: postgres_storage_adapter_1.PostgresStorageAdapter,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
exports: [nestjs_storage_1.DISMISSIBLE_STORAGE_ADAPTER, prisma_service_1.PrismaService],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
static forRootAsync(options) {
|
|
42
|
+
return {
|
|
43
|
+
module: PostgresStorageModule_1,
|
|
44
|
+
imports: [...(options.imports || []), nestjs_dismissible_item_1.DismissibleItemModule],
|
|
45
|
+
providers: [
|
|
46
|
+
{
|
|
47
|
+
provide: postgres_storage_config_1.DISMISSIBLE_POSTGRES_STORAGE_CONFIG,
|
|
48
|
+
useFactory: options.useFactory,
|
|
49
|
+
inject: options.inject || [],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
provide: prisma_service_1.PrismaService,
|
|
53
|
+
useFactory(config, logger) {
|
|
54
|
+
return new prisma_service_1.PrismaService(config, logger);
|
|
55
|
+
},
|
|
56
|
+
inject: [postgres_storage_config_1.DISMISSIBLE_POSTGRES_STORAGE_CONFIG, nestjs_logger_1.DISMISSIBLE_LOGGER],
|
|
57
|
+
},
|
|
58
|
+
postgres_storage_adapter_1.PostgresStorageAdapter,
|
|
59
|
+
{
|
|
60
|
+
provide: nestjs_storage_1.DISMISSIBLE_STORAGE_ADAPTER,
|
|
61
|
+
useExisting: postgres_storage_adapter_1.PostgresStorageAdapter,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
exports: [nestjs_storage_1.DISMISSIBLE_STORAGE_ADAPTER, prisma_service_1.PrismaService],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
exports.PostgresStorageModule = PostgresStorageModule;
|
|
69
|
+
exports.PostgresStorageModule = PostgresStorageModule = PostgresStorageModule_1 = tslib_1.__decorate([
|
|
70
|
+
(0, common_1.Module)({})
|
|
71
|
+
], PostgresStorageModule);
|
|
72
|
+
//# sourceMappingURL=postgres-storage.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-storage.module.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/postgres-storage.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuE;AACvE,gEAA0E;AAC1E,yEAAoE;AACpE,qDAAiD;AACjD,kFAA6E;AAC7E,8DAAoF;AACpF,uEAGmC;AAc5B,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,OAAO,CAAC,OAAqC;QAClD,OAAO;YACL,MAAM,EAAE,uBAAqB;YAC7B,OAAO,EAAE,CAAC,+CAAqB,CAAC;YAChC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,6DAAmC;oBAC5C,QAAQ,EAAE;wBACR,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;qBAC3C;iBACF;gBACD;oBACE,OAAO,EAAE,8BAAa;oBACtB,UAAU,CAAC,MAA6B,EAAE,MAA0B;wBAClE,OAAO,IAAI,8BAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC3C,CAAC;oBACD,MAAM,EAAE,CAAC,6DAAmC,EAAE,kCAAkB,CAAC;iBAClE;gBACD,iDAAsB;gBACtB;oBACE,OAAO,EAAE,4CAA2B;oBACpC,WAAW,EAAE,iDAAsB;iBACpC;aACF;YACD,OAAO,EAAE,CAAC,4CAA2B,EAAE,8BAAa,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAA0C;QAC5D,OAAO;YACL,MAAM,EAAE,uBAAqB;YAC7B,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,+CAAqB,CAAC;YAC5D,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,6DAAmC;oBAC5C,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;gBACD;oBACE,OAAO,EAAE,8BAAa;oBACtB,UAAU,CAAC,MAA6B,EAAE,MAA0B;wBAClE,OAAO,IAAI,8BAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC3C,CAAC;oBACD,MAAM,EAAE,CAAC,6DAAmC,EAAE,kCAAkB,CAAC;iBAClE;gBACD,iDAAsB;gBACtB;oBACE,OAAO,EAAE,4CAA2B;oBACpC,WAAW,EAAE,iDAAsB;iBACpC;aACF;YACD,OAAO,EAAE,CAAC,4CAA2B,EAAE,8BAAa,CAAC;SACtD,CAAC;IACJ,CAAC;CACF,CAAA;AAvDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAuDjC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a Prisma configuration object with paths resolved relative to
|
|
3
|
+
* the @dismissible/nestjs-postgres-storage package.
|
|
4
|
+
*
|
|
5
|
+
* @returns Prisma configuration object suitable for use with defineConfig()
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // prisma.config.mjs
|
|
10
|
+
* import { defineConfig } from 'prisma/config';
|
|
11
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
12
|
+
*
|
|
13
|
+
* export default defineConfig(basePrismaConfig);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function createPrismaConfig(): {
|
|
17
|
+
schema: string;
|
|
18
|
+
migrations: {
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
datasource: {
|
|
22
|
+
url: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Base Prisma configuration for @dismissible/nestjs-postgres-storage.
|
|
27
|
+
*
|
|
28
|
+
* Use this with Prisma's defineConfig() to create your prisma.config.mjs:
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```javascript
|
|
32
|
+
* // prisma.config.mjs
|
|
33
|
+
* import { defineConfig } from 'prisma/config';
|
|
34
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
35
|
+
*
|
|
36
|
+
* export default defineConfig(basePrismaConfig);
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example Extending the config
|
|
40
|
+
* ```javascript
|
|
41
|
+
* import { defineConfig } from 'prisma/config';
|
|
42
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
43
|
+
*
|
|
44
|
+
* export default defineConfig({
|
|
45
|
+
* ...basePrismaConfig,
|
|
46
|
+
* migrations: {
|
|
47
|
+
* ...basePrismaConfig.migrations,
|
|
48
|
+
* seed: 'tsx prisma/seed.ts',
|
|
49
|
+
* },
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const basePrismaConfig: {
|
|
54
|
+
schema: string;
|
|
55
|
+
migrations: {
|
|
56
|
+
path: string;
|
|
57
|
+
};
|
|
58
|
+
datasource: {
|
|
59
|
+
url: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.basePrismaConfig = void 0;
|
|
4
|
+
exports.createPrismaConfig = createPrismaConfig;
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const schema_path_1 = require("./schema-path");
|
|
7
|
+
/**
|
|
8
|
+
* Creates a Prisma configuration object with paths resolved relative to
|
|
9
|
+
* the @dismissible/nestjs-postgres-storage package.
|
|
10
|
+
*
|
|
11
|
+
* @returns Prisma configuration object suitable for use with defineConfig()
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // prisma.config.mjs
|
|
16
|
+
* import { defineConfig } from 'prisma/config';
|
|
17
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
18
|
+
*
|
|
19
|
+
* export default defineConfig(basePrismaConfig);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
function createPrismaConfig() {
|
|
23
|
+
const prismaDir = (0, path_1.join)((0, schema_path_1.getPrismaSchemaPath)(), '..');
|
|
24
|
+
return {
|
|
25
|
+
schema: (0, path_1.join)(prismaDir, 'schema.prisma'),
|
|
26
|
+
migrations: {
|
|
27
|
+
path: (0, path_1.join)(prismaDir, 'migrations'),
|
|
28
|
+
},
|
|
29
|
+
datasource: {
|
|
30
|
+
url: process.env.DATABASE_URL ??
|
|
31
|
+
process.env.DISMISSIBLE_POSTGRES_STORAGE_CONNECTION_STRING ??
|
|
32
|
+
'',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Base Prisma configuration for @dismissible/nestjs-postgres-storage.
|
|
38
|
+
*
|
|
39
|
+
* Use this with Prisma's defineConfig() to create your prisma.config.mjs:
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```javascript
|
|
43
|
+
* // prisma.config.mjs
|
|
44
|
+
* import { defineConfig } from 'prisma/config';
|
|
45
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
46
|
+
*
|
|
47
|
+
* export default defineConfig(basePrismaConfig);
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @example Extending the config
|
|
51
|
+
* ```javascript
|
|
52
|
+
* import { defineConfig } from 'prisma/config';
|
|
53
|
+
* import { basePrismaConfig } from '@dismissible/nestjs-postgres-storage';
|
|
54
|
+
*
|
|
55
|
+
* export default defineConfig({
|
|
56
|
+
* ...basePrismaConfig,
|
|
57
|
+
* migrations: {
|
|
58
|
+
* ...basePrismaConfig.migrations,
|
|
59
|
+
* seed: 'tsx prisma/seed.ts',
|
|
60
|
+
* },
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
exports.basePrismaConfig = createPrismaConfig();
|
|
65
|
+
//# sourceMappingURL=prisma-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-config.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/prisma-config.ts"],"names":[],"mappings":";;;AAkBA,gDAcC;AAhCD,+BAA4B;AAC5B,+CAAoD;AAEpD;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kBAAkB;IAChC,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,IAAA,iCAAmB,GAAE,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO;QACL,MAAM,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,eAAe,CAAC;QACxC,UAAU,EAAE;YACV,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,YAAY,CAAC;SACpC;QACD,UAAU,EAAE;YACV,GAAG,EACD,OAAO,CAAC,GAAG,CAAC,YAAY;gBACxB,OAAO,CAAC,GAAG,CAAC,8CAA8C;gBAC1D,EAAE;SACL;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACU,QAAA,gBAAgB,GAAG,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { PrismaClient } from '../prisma/generated/prisma/client';
|
|
3
|
+
import { IDismissibleLogger } from '@dismissible/nestjs-logger';
|
|
4
|
+
import { PostgresStorageConfig } from './postgres-storage.config';
|
|
5
|
+
/**
|
|
6
|
+
* PrismaService wraps the PrismaClient and handles connection lifecycle.
|
|
7
|
+
* It connects to the database on module initialization and disconnects on shutdown.
|
|
8
|
+
*/
|
|
9
|
+
export declare class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
|
|
10
|
+
private readonly config;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
constructor(config: PostgresStorageConfig, logger: IDismissibleLogger);
|
|
13
|
+
onModuleInit(): Promise<void>;
|
|
14
|
+
onModuleDestroy(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrismaService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const client_1 = require("../prisma/generated/prisma/client");
|
|
7
|
+
const adapter_pg_1 = require("@prisma/adapter-pg");
|
|
8
|
+
const pg_1 = require("pg");
|
|
9
|
+
const nestjs_logger_1 = require("@dismissible/nestjs-logger");
|
|
10
|
+
const postgres_storage_config_1 = require("./postgres-storage.config");
|
|
11
|
+
/**
|
|
12
|
+
* PrismaService wraps the PrismaClient and handles connection lifecycle.
|
|
13
|
+
* It connects to the database on module initialization and disconnects on shutdown.
|
|
14
|
+
*/
|
|
15
|
+
let PrismaService = class PrismaService extends client_1.PrismaClient {
|
|
16
|
+
constructor(config, logger) {
|
|
17
|
+
const pool = new pg_1.Pool({ connectionString: config.connectionString });
|
|
18
|
+
const adapter = new adapter_pg_1.PrismaPg(pool);
|
|
19
|
+
super({ adapter });
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
}
|
|
23
|
+
async onModuleInit() {
|
|
24
|
+
this.logger.debug('Connecting to PostgreSQL database');
|
|
25
|
+
await this.$connect();
|
|
26
|
+
try {
|
|
27
|
+
await this.$queryRaw `SELECT 1`;
|
|
28
|
+
this.logger.debug('Connected to PostgreSQL database');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
this.logger.error('Failed to connect to PostgreSQL database', error);
|
|
32
|
+
throw new Error(`Database connection failed: ${error instanceof Error ? error.message : 'Unknown error'}. ` +
|
|
33
|
+
'Ensure PostgreSQL is running and DISMISSIBLE_POSTGRES_STORAGE_CONNECTION_STRING is configured correctly.');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async onModuleDestroy() {
|
|
37
|
+
this.logger.debug('Disconnecting from PostgreSQL database');
|
|
38
|
+
await this.$disconnect();
|
|
39
|
+
this.logger.debug('Disconnected from PostgreSQL database');
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.PrismaService = PrismaService;
|
|
43
|
+
exports.PrismaService = PrismaService = tslib_1.__decorate([
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
45
|
+
tslib_1.__param(1, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
|
|
46
|
+
tslib_1.__metadata("design:paramtypes", [postgres_storage_config_1.PostgresStorageConfig, Object])
|
|
47
|
+
], PrismaService);
|
|
48
|
+
//# sourceMappingURL=prisma.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/prisma.service.ts"],"names":[],"mappings":";;;;AAAA,2CAAmF;AACnF,8DAAiE;AACjE,mDAA8C;AAC9C,2BAA0B;AAC1B,8DAAoF;AACpF,uEAAkE;AAElE;;;GAGG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,qBAAY;IAC7C,YACmB,MAA6B,EACD,MAA0B;QAEvE,MAAM,IAAI,GAAG,IAAI,SAAI,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,qBAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QALF,WAAM,GAAN,MAAM,CAAuB;QACD,WAAM,GAAN,MAAM,CAAoB;IAKzE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAA,UAAU,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI;gBACzF,0GAA0G,CAC7G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;CACF,CAAA;AA/BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAIR,mBAAA,IAAA,eAAM,EAAC,kCAAkB,CAAC,CAAA;6CADF,+CAAqB;GAFrC,aAAa,CA+BzB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the absolute path to the Prisma schema file.
|
|
3
|
+
* Useful for consumers who need to run prisma commands programmatically.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { getPrismaSchemaPath } from '@dismissible/nestjs-postgres-storage';
|
|
8
|
+
* import { execSync } from 'child_process';
|
|
9
|
+
*
|
|
10
|
+
* execSync(`npx prisma generate --schema=${getPrismaSchemaPath()}`);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function getPrismaSchemaPath(): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPrismaSchemaPath = getPrismaSchemaPath;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
/**
|
|
6
|
+
* Returns the absolute path to the Prisma schema file.
|
|
7
|
+
* Useful for consumers who need to run prisma commands programmatically.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { getPrismaSchemaPath } from '@dismissible/nestjs-postgres-storage';
|
|
12
|
+
* import { execSync } from 'child_process';
|
|
13
|
+
*
|
|
14
|
+
* execSync(`npx prisma generate --schema=${getPrismaSchemaPath()}`);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function getPrismaSchemaPath() {
|
|
18
|
+
return (0, path_1.join)(__dirname, '..', 'prisma', 'schema.prisma');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=schema-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-path.js","sourceRoot":"","sources":["../../../../libs/postgres-storage/src/schema-path.ts"],"names":[],"mappings":";;AAcA,kDAEC;AAhBD,+BAA4B;AAE5B;;;;;;;;;;;GAWG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC"}
|