clhq-postgres-module 1.1.0-alpha.107 → 1.1.0-alpha.109

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.
@@ -31,3 +31,5 @@ export * from './project-metadata.entity';
31
31
  export * from './user-context.entity';
32
32
  export * from './ai-embedding.entity';
33
33
  export * from './metadata-activity-log.entity';
34
+ export * from './project-scene-job.entity';
35
+ export * from './project-scene.entity';
@@ -49,3 +49,5 @@ __exportStar(require("./project-metadata.entity"), exports);
49
49
  __exportStar(require("./user-context.entity"), exports);
50
50
  __exportStar(require("./ai-embedding.entity"), exports);
51
51
  __exportStar(require("./metadata-activity-log.entity"), exports);
52
+ __exportStar(require("./project-scene-job.entity"), exports);
53
+ __exportStar(require("./project-scene.entity"), exports);
@@ -0,0 +1,38 @@
1
+ import { User } from './user.entity';
2
+ export declare enum ProjectSceneJobStatus {
3
+ NEW = "NEW",
4
+ PROCESSING = "PROCESSING",
5
+ SUCCESS = "SUCCESS",
6
+ ERROR = "ERROR"
7
+ }
8
+ export declare class ProjectSceneJob {
9
+ id: string;
10
+ projectId: string;
11
+ userId: string;
12
+ user: User;
13
+ workspaceId: string;
14
+ status: ProjectSceneJobStatus;
15
+ totalScenes: number;
16
+ completedScenes: number;
17
+ failedScenes: number;
18
+ intervalSeconds: number;
19
+ durationMs: number;
20
+ data: {
21
+ scenes?: Array<{
22
+ timestamp: number;
23
+ url: string;
24
+ s3Key: string;
25
+ size: number;
26
+ }>;
27
+ errors?: Array<{
28
+ timestamp: number;
29
+ error: string;
30
+ }>;
31
+ processingTimeMs?: number;
32
+ };
33
+ errorMessage: string;
34
+ startedAt: Date;
35
+ completedAt: Date;
36
+ createdAt: Date;
37
+ updatedAt: Date;
38
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProjectSceneJob = exports.ProjectSceneJobStatus = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const user_entity_1 = require("./user.entity");
15
+ var ProjectSceneJobStatus;
16
+ (function (ProjectSceneJobStatus) {
17
+ ProjectSceneJobStatus["NEW"] = "NEW";
18
+ ProjectSceneJobStatus["PROCESSING"] = "PROCESSING";
19
+ ProjectSceneJobStatus["SUCCESS"] = "SUCCESS";
20
+ ProjectSceneJobStatus["ERROR"] = "ERROR";
21
+ })(ProjectSceneJobStatus || (exports.ProjectSceneJobStatus = ProjectSceneJobStatus = {}));
22
+ let ProjectSceneJob = class ProjectSceneJob {
23
+ };
24
+ exports.ProjectSceneJob = ProjectSceneJob;
25
+ __decorate([
26
+ (0, typeorm_1.PrimaryColumn)({ type: 'varchar', length: 255 }),
27
+ __metadata("design:type", String)
28
+ ], ProjectSceneJob.prototype, "id", void 0);
29
+ __decorate([
30
+ (0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255 }),
31
+ __metadata("design:type", String)
32
+ ], ProjectSceneJob.prototype, "projectId", void 0);
33
+ __decorate([
34
+ (0, typeorm_1.Column)({ name: 'user_id', type: 'uuid' }),
35
+ __metadata("design:type", String)
36
+ ], ProjectSceneJob.prototype, "userId", void 0);
37
+ __decorate([
38
+ (0, typeorm_1.ManyToOne)(() => user_entity_1.User),
39
+ (0, typeorm_1.JoinColumn)({ name: 'user_id' }),
40
+ __metadata("design:type", user_entity_1.User)
41
+ ], ProjectSceneJob.prototype, "user", void 0);
42
+ __decorate([
43
+ (0, typeorm_1.Column)({ name: 'workspace_id', type: 'uuid', nullable: true }),
44
+ __metadata("design:type", String)
45
+ ], ProjectSceneJob.prototype, "workspaceId", void 0);
46
+ __decorate([
47
+ (0, typeorm_1.Column)({
48
+ type: 'enum',
49
+ enum: ProjectSceneJobStatus,
50
+ default: ProjectSceneJobStatus.NEW,
51
+ }),
52
+ __metadata("design:type", String)
53
+ ], ProjectSceneJob.prototype, "status", void 0);
54
+ __decorate([
55
+ (0, typeorm_1.Column)({ name: 'total_scenes', type: 'integer', default: 0 }),
56
+ __metadata("design:type", Number)
57
+ ], ProjectSceneJob.prototype, "totalScenes", void 0);
58
+ __decorate([
59
+ (0, typeorm_1.Column)({ name: 'completed_scenes', type: 'integer', default: 0 }),
60
+ __metadata("design:type", Number)
61
+ ], ProjectSceneJob.prototype, "completedScenes", void 0);
62
+ __decorate([
63
+ (0, typeorm_1.Column)({ name: 'failed_scenes', type: 'integer', default: 0 }),
64
+ __metadata("design:type", Number)
65
+ ], ProjectSceneJob.prototype, "failedScenes", void 0);
66
+ __decorate([
67
+ (0, typeorm_1.Column)({ name: 'interval_seconds', type: 'integer', default: 5 }),
68
+ __metadata("design:type", Number)
69
+ ], ProjectSceneJob.prototype, "intervalSeconds", void 0);
70
+ __decorate([
71
+ (0, typeorm_1.Column)({ name: 'duration_ms', type: 'integer', nullable: true }),
72
+ __metadata("design:type", Number)
73
+ ], ProjectSceneJob.prototype, "durationMs", void 0);
74
+ __decorate([
75
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
76
+ __metadata("design:type", Object)
77
+ ], ProjectSceneJob.prototype, "data", void 0);
78
+ __decorate([
79
+ (0, typeorm_1.Column)({ name: 'error_message', type: 'text', nullable: true }),
80
+ __metadata("design:type", String)
81
+ ], ProjectSceneJob.prototype, "errorMessage", void 0);
82
+ __decorate([
83
+ (0, typeorm_1.Column)({ name: 'started_at', type: 'timestamp', nullable: true }),
84
+ __metadata("design:type", Date)
85
+ ], ProjectSceneJob.prototype, "startedAt", void 0);
86
+ __decorate([
87
+ (0, typeorm_1.Column)({ name: 'completed_at', type: 'timestamp', nullable: true }),
88
+ __metadata("design:type", Date)
89
+ ], ProjectSceneJob.prototype, "completedAt", void 0);
90
+ __decorate([
91
+ (0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
92
+ __metadata("design:type", Date)
93
+ ], ProjectSceneJob.prototype, "createdAt", void 0);
94
+ __decorate([
95
+ (0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
96
+ __metadata("design:type", Date)
97
+ ], ProjectSceneJob.prototype, "updatedAt", void 0);
98
+ exports.ProjectSceneJob = ProjectSceneJob = __decorate([
99
+ (0, typeorm_1.Entity)('project_scene_jobs'),
100
+ (0, typeorm_1.Index)(['projectId']),
101
+ (0, typeorm_1.Index)(['userId']),
102
+ (0, typeorm_1.Index)(['status'])
103
+ ], ProjectSceneJob);
@@ -0,0 +1,27 @@
1
+ export declare enum ProjectSceneStatus {
2
+ PENDING = "PENDING",
3
+ GENERATING = "GENERATING",
4
+ READY = "READY",
5
+ FAILED = "FAILED"
6
+ }
7
+ export declare class ProjectScene {
8
+ id: string;
9
+ projectId: string;
10
+ jobId: string;
11
+ timestamp: number;
12
+ status: ProjectSceneStatus;
13
+ s3Url: string;
14
+ s3Key: string;
15
+ fileSize: number;
16
+ width: number;
17
+ height: number;
18
+ generationTimeMs: number;
19
+ errorMessage: string;
20
+ metadata: {
21
+ layerCount?: number;
22
+ itemTypes?: string[];
23
+ editlySpec?: any;
24
+ };
25
+ createdAt: Date;
26
+ updatedAt: Date;
27
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProjectScene = exports.ProjectSceneStatus = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ var ProjectSceneStatus;
15
+ (function (ProjectSceneStatus) {
16
+ ProjectSceneStatus["PENDING"] = "PENDING";
17
+ ProjectSceneStatus["GENERATING"] = "GENERATING";
18
+ ProjectSceneStatus["READY"] = "READY";
19
+ ProjectSceneStatus["FAILED"] = "FAILED";
20
+ })(ProjectSceneStatus || (exports.ProjectSceneStatus = ProjectSceneStatus = {}));
21
+ let ProjectScene = class ProjectScene {
22
+ };
23
+ exports.ProjectScene = ProjectScene;
24
+ __decorate([
25
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
26
+ __metadata("design:type", String)
27
+ ], ProjectScene.prototype, "id", void 0);
28
+ __decorate([
29
+ (0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255 }),
30
+ __metadata("design:type", String)
31
+ ], ProjectScene.prototype, "projectId", void 0);
32
+ __decorate([
33
+ (0, typeorm_1.Column)({ name: 'job_id', type: 'varchar', length: 255, nullable: true }),
34
+ __metadata("design:type", String)
35
+ ], ProjectScene.prototype, "jobId", void 0);
36
+ __decorate([
37
+ (0, typeorm_1.Column)({ type: 'float' }),
38
+ __metadata("design:type", Number)
39
+ ], ProjectScene.prototype, "timestamp", void 0);
40
+ __decorate([
41
+ (0, typeorm_1.Column)({
42
+ type: 'enum',
43
+ enum: ProjectSceneStatus,
44
+ default: ProjectSceneStatus.PENDING,
45
+ }),
46
+ __metadata("design:type", String)
47
+ ], ProjectScene.prototype, "status", void 0);
48
+ __decorate([
49
+ (0, typeorm_1.Column)({ name: 's3_url', type: 'text', nullable: true }),
50
+ __metadata("design:type", String)
51
+ ], ProjectScene.prototype, "s3Url", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Column)({ name: 's3_key', type: 'text', nullable: true }),
54
+ __metadata("design:type", String)
55
+ ], ProjectScene.prototype, "s3Key", void 0);
56
+ __decorate([
57
+ (0, typeorm_1.Column)({ name: 'file_size', type: 'integer', nullable: true }),
58
+ __metadata("design:type", Number)
59
+ ], ProjectScene.prototype, "fileSize", void 0);
60
+ __decorate([
61
+ (0, typeorm_1.Column)({ type: 'integer', nullable: true }),
62
+ __metadata("design:type", Number)
63
+ ], ProjectScene.prototype, "width", void 0);
64
+ __decorate([
65
+ (0, typeorm_1.Column)({ type: 'integer', nullable: true }),
66
+ __metadata("design:type", Number)
67
+ ], ProjectScene.prototype, "height", void 0);
68
+ __decorate([
69
+ (0, typeorm_1.Column)({ name: 'generation_time_ms', type: 'integer', nullable: true }),
70
+ __metadata("design:type", Number)
71
+ ], ProjectScene.prototype, "generationTimeMs", void 0);
72
+ __decorate([
73
+ (0, typeorm_1.Column)({ name: 'error_message', type: 'text', nullable: true }),
74
+ __metadata("design:type", String)
75
+ ], ProjectScene.prototype, "errorMessage", void 0);
76
+ __decorate([
77
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
78
+ __metadata("design:type", Object)
79
+ ], ProjectScene.prototype, "metadata", void 0);
80
+ __decorate([
81
+ (0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
82
+ __metadata("design:type", Date)
83
+ ], ProjectScene.prototype, "createdAt", void 0);
84
+ __decorate([
85
+ (0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
86
+ __metadata("design:type", Date)
87
+ ], ProjectScene.prototype, "updatedAt", void 0);
88
+ exports.ProjectScene = ProjectScene = __decorate([
89
+ (0, typeorm_1.Entity)('project_scenes'),
90
+ (0, typeorm_1.Index)(['projectId']),
91
+ (0, typeorm_1.Index)(['projectId', 'timestamp']),
92
+ (0, typeorm_1.Unique)(['projectId', 'timestamp'])
93
+ ], ProjectScene);
@@ -29,3 +29,4 @@ export { ProjectMetadataRepository } from './project-metadata.repository';
29
29
  export { UserContextRepository } from './user-context.repository';
30
30
  export { AiEmbeddingRepository } from './ai-embedding.repository';
31
31
  export { MetadataActivityLogRepository } from './metadata-activity-log.repository';
32
+ export { ProjectSceneRepository } from './project-scene.repository';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetadataActivityLogRepository = exports.AiEmbeddingRepository = exports.UserContextRepository = exports.ProjectMetadataRepository = exports.AssetMetadataRepository = exports.AudioWaveformRepository = exports.VideoFilmstripRepository = exports.VideoRenderRepository = exports.VideoTranscodeRepository = exports.EffectRepository = exports.AssetRepository = exports.AiUsageRepository = exports.ReferralEventRepository = exports.RewardRuleRepository = exports.CreditTransactionRepository = exports.StripeWebhookRepository = exports.PaymentTransactionRepository = exports.SubscriptionUsageRepository = exports.UserSubscriptionRepository = exports.PlanRepository = exports.SubscriptionPlanRepository = exports.CommentRepository = exports.EditorProjectRepository = exports.InviteRepository = exports.WorkspaceMemberRepository = exports.WorkspaceRepository = exports.AuthSessionRepository = exports.UserOnboardingRepository = exports.UserProfileRepository = exports.UserRepository = exports.BaseRepository = void 0;
3
+ exports.ProjectSceneRepository = exports.MetadataActivityLogRepository = exports.AiEmbeddingRepository = exports.UserContextRepository = exports.ProjectMetadataRepository = exports.AssetMetadataRepository = exports.AudioWaveformRepository = exports.VideoFilmstripRepository = exports.VideoRenderRepository = exports.VideoTranscodeRepository = exports.EffectRepository = exports.AssetRepository = exports.AiUsageRepository = exports.ReferralEventRepository = exports.RewardRuleRepository = exports.CreditTransactionRepository = exports.StripeWebhookRepository = exports.PaymentTransactionRepository = exports.SubscriptionUsageRepository = exports.UserSubscriptionRepository = exports.PlanRepository = exports.SubscriptionPlanRepository = exports.CommentRepository = exports.EditorProjectRepository = exports.InviteRepository = exports.WorkspaceMemberRepository = exports.WorkspaceRepository = exports.AuthSessionRepository = exports.UserOnboardingRepository = exports.UserProfileRepository = exports.UserRepository = exports.BaseRepository = void 0;
4
4
  var base_repository_1 = require("./base.repository");
5
5
  Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return base_repository_1.BaseRepository; } });
6
6
  var user_repository_1 = require("./user.repository");
@@ -63,3 +63,5 @@ var ai_embedding_repository_1 = require("./ai-embedding.repository");
63
63
  Object.defineProperty(exports, "AiEmbeddingRepository", { enumerable: true, get: function () { return ai_embedding_repository_1.AiEmbeddingRepository; } });
64
64
  var metadata_activity_log_repository_1 = require("./metadata-activity-log.repository");
65
65
  Object.defineProperty(exports, "MetadataActivityLogRepository", { enumerable: true, get: function () { return metadata_activity_log_repository_1.MetadataActivityLogRepository; } });
66
+ var project_scene_repository_1 = require("./project-scene.repository");
67
+ Object.defineProperty(exports, "ProjectSceneRepository", { enumerable: true, get: function () { return project_scene_repository_1.ProjectSceneRepository; } });
@@ -0,0 +1,18 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { ProjectScene } from '../entities/project-scene.entity';
3
+ import { ProjectSceneJob, ProjectSceneJobStatus } from '../entities/project-scene-job.entity';
4
+ export declare class ProjectSceneRepository {
5
+ private dataSource;
6
+ private sceneRepo;
7
+ private jobRepo;
8
+ constructor(dataSource: DataSource);
9
+ createJob(data: Partial<ProjectSceneJob>): Promise<ProjectSceneJob>;
10
+ updateJobStatus(jobId: string, status: ProjectSceneJobStatus, data?: Partial<ProjectSceneJob>): Promise<void>;
11
+ incrementCompletedScenes(jobId: string): Promise<void>;
12
+ incrementFailedScenes(jobId: string): Promise<void>;
13
+ upsertScene(data: Partial<ProjectScene>): Promise<ProjectScene>;
14
+ getScenesByProject(projectId: string): Promise<ProjectScene[]>;
15
+ getJobById(jobId: string): Promise<ProjectSceneJob | null>;
16
+ getLatestJob(projectId: string): Promise<ProjectSceneJob | null>;
17
+ deleteScenesByProject(projectId: string): Promise<void>;
18
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProjectSceneRepository = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const typeorm_1 = require("typeorm");
15
+ const project_scene_entity_1 = require("../entities/project-scene.entity");
16
+ const project_scene_job_entity_1 = require("../entities/project-scene-job.entity");
17
+ let ProjectSceneRepository = class ProjectSceneRepository {
18
+ constructor(dataSource) {
19
+ this.dataSource = dataSource;
20
+ this.sceneRepo = this.dataSource.getRepository(project_scene_entity_1.ProjectScene);
21
+ this.jobRepo = this.dataSource.getRepository(project_scene_job_entity_1.ProjectSceneJob);
22
+ }
23
+ async createJob(data) {
24
+ return this.jobRepo.save(data);
25
+ }
26
+ async updateJobStatus(jobId, status, data) {
27
+ await this.jobRepo.update(jobId, { status, ...data });
28
+ }
29
+ async incrementCompletedScenes(jobId) {
30
+ await this.jobRepo.increment({ id: jobId }, 'completedScenes', 1);
31
+ }
32
+ async incrementFailedScenes(jobId) {
33
+ await this.jobRepo.increment({ id: jobId }, 'failedScenes', 1);
34
+ }
35
+ async upsertScene(data) {
36
+ const existing = await this.sceneRepo.findOne({
37
+ where: { projectId: data.projectId, timestamp: data.timestamp }
38
+ });
39
+ if (existing) {
40
+ await this.sceneRepo.update(existing.id, data);
41
+ return { ...existing, ...data };
42
+ }
43
+ return this.sceneRepo.save(data);
44
+ }
45
+ async getScenesByProject(projectId) {
46
+ return this.sceneRepo.find({
47
+ where: { projectId, status: project_scene_entity_1.ProjectSceneStatus.READY },
48
+ order: { timestamp: 'ASC' }
49
+ });
50
+ }
51
+ async getJobById(jobId) {
52
+ return this.jobRepo.findOne({
53
+ where: { id: jobId }
54
+ });
55
+ }
56
+ async getLatestJob(projectId) {
57
+ return this.jobRepo.findOne({
58
+ where: { projectId },
59
+ order: { createdAt: 'DESC' }
60
+ });
61
+ }
62
+ async deleteScenesByProject(projectId) {
63
+ await this.sceneRepo.delete({ projectId });
64
+ }
65
+ };
66
+ exports.ProjectSceneRepository = ProjectSceneRepository;
67
+ exports.ProjectSceneRepository = ProjectSceneRepository = __decorate([
68
+ (0, common_1.Injectable)(),
69
+ __metadata("design:paramtypes", [typeorm_1.DataSource])
70
+ ], ProjectSceneRepository);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clhq-postgres-module",
3
- "version": "1.1.0-alpha.107",
3
+ "version": "1.1.0-alpha.109",
4
4
  "description": "PostgreSQL module using TypeORM for Clippy",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",