@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.
Files changed (49) hide show
  1. package/README.md +309 -0
  2. package/bin/dismissible-prisma.js +57 -0
  3. package/package.json +67 -0
  4. package/prisma/generated/prisma/client.d.ts +26 -0
  5. package/prisma/generated/prisma/client.js +34 -0
  6. package/prisma/generated/prisma/client.js.map +1 -0
  7. package/prisma/generated/prisma/commonInputTypes.d.ts +177 -0
  8. package/prisma/generated/prisma/commonInputTypes.js +12 -0
  9. package/prisma/generated/prisma/commonInputTypes.js.map +1 -0
  10. package/prisma/generated/prisma/enums.d.ts +1 -0
  11. package/prisma/generated/prisma/enums.js +12 -0
  12. package/prisma/generated/prisma/enums.js.map +1 -0
  13. package/prisma/generated/prisma/internal/class.d.ts +126 -0
  14. package/prisma/generated/prisma/internal/class.js +45 -0
  15. package/prisma/generated/prisma/internal/class.js.map +1 -0
  16. package/prisma/generated/prisma/internal/prismaNamespace.d.ts +528 -0
  17. package/prisma/generated/prisma/internal/prismaNamespace.js +104 -0
  18. package/prisma/generated/prisma/internal/prismaNamespace.js.map +1 -0
  19. package/prisma/generated/prisma/models/DismissibleItem.d.ts +979 -0
  20. package/prisma/generated/prisma/models/DismissibleItem.js +3 -0
  21. package/prisma/generated/prisma/models/DismissibleItem.js.map +1 -0
  22. package/prisma/generated/prisma/models.d.ts +2 -0
  23. package/prisma/generated/prisma/models.js +3 -0
  24. package/prisma/generated/prisma/models.js.map +1 -0
  25. package/prisma/migrations/20251219094936_init/migration.sql +12 -0
  26. package/prisma/migrations/migration_lock.toml +3 -0
  27. package/prisma/schema.prisma +23 -0
  28. package/prisma.config.mjs +33 -0
  29. package/src/index.d.ts +6 -0
  30. package/src/index.js +10 -0
  31. package/src/index.js.map +1 -0
  32. package/src/postgres-storage.adapter.d.ts +21 -0
  33. package/src/postgres-storage.adapter.js +81 -0
  34. package/src/postgres-storage.adapter.js.map +1 -0
  35. package/src/postgres-storage.config.d.ts +7 -0
  36. package/src/postgres-storage.config.js +17 -0
  37. package/src/postgres-storage.config.js.map +1 -0
  38. package/src/postgres-storage.module.d.ts +12 -0
  39. package/src/postgres-storage.module.js +72 -0
  40. package/src/postgres-storage.module.js.map +1 -0
  41. package/src/prisma-config.d.ts +61 -0
  42. package/src/prisma-config.js +65 -0
  43. package/src/prisma-config.js.map +1 -0
  44. package/src/prisma.service.d.ts +15 -0
  45. package/src/prisma.service.js +48 -0
  46. package/src/prisma.service.js.map +1 -0
  47. package/src/schema-path.d.ts +13 -0
  48. package/src/schema-path.js +20 -0
  49. package/src/schema-path.js.map +1 -0
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=DismissibleItem.js.map
@@ -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,2 @@
1
+ export type * from './models/DismissibleItem';
2
+ export type * from './commonInputTypes';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=models.js.map
@@ -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,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"
@@ -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
@@ -0,0 +1,6 @@
1
+ export * from './postgres-storage.adapter';
2
+ export * from './postgres-storage.config';
3
+ export * from './postgres-storage.module';
4
+ export * from './prisma.service';
5
+ export * from './prisma-config';
6
+ export * from './schema-path';
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
@@ -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,7 @@
1
+ /**
2
+ * Injection token for the PostgresStorage configuration.
3
+ */
4
+ export declare const DISMISSIBLE_POSTGRES_STORAGE_CONFIG: unique symbol;
5
+ export declare class PostgresStorageConfig {
6
+ readonly connectionString: string;
7
+ }
@@ -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"}