clhq-postgres-module 1.1.0-alpha.126 → 1.1.0-alpha.127

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.
@@ -51,6 +51,7 @@ export declare class EditorProject {
51
51
  audioLevels?: boolean;
52
52
  };
53
53
  metadata: Record<string, unknown>;
54
+ sceneOrder: string[];
54
55
  lastOpenedAt: Date;
55
56
  lastEditedBy: string;
56
57
  createdAt: Date;
@@ -138,6 +138,10 @@ __decorate([
138
138
  (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
139
139
  __metadata("design:type", Object)
140
140
  ], EditorProject.prototype, "metadata", void 0);
141
+ __decorate([
142
+ (0, typeorm_1.Column)({ name: 'scene_order', type: 'jsonb', default: () => "'[]'::jsonb" }),
143
+ __metadata("design:type", Array)
144
+ ], EditorProject.prototype, "sceneOrder", void 0);
141
145
  __decorate([
142
146
  (0, typeorm_1.Column)({ name: 'last_opened_at', type: 'timestamp', nullable: true }),
143
147
  __metadata("design:type", Date)
@@ -34,4 +34,6 @@ export * from './ai-embedding.entity';
34
34
  export * from './metadata-activity-log.entity';
35
35
  export * from './project-scene-job.entity';
36
36
  export * from './project-scene.entity';
37
+ export * from './scene.entity';
38
+ export * from './item.entity';
37
39
  export * from './RemotionRender';
@@ -52,4 +52,6 @@ __exportStar(require("./ai-embedding.entity"), exports);
52
52
  __exportStar(require("./metadata-activity-log.entity"), exports);
53
53
  __exportStar(require("./project-scene-job.entity"), exports);
54
54
  __exportStar(require("./project-scene.entity"), exports);
55
+ __exportStar(require("./scene.entity"), exports);
56
+ __exportStar(require("./item.entity"), exports);
55
57
  __exportStar(require("./RemotionRender"), exports);
@@ -0,0 +1,42 @@
1
+ export declare enum ItemType {
2
+ VIDEOS = "videos",
3
+ AUDIOS = "audios",
4
+ IMAGES = "images",
5
+ TITLES = "titles",
6
+ SHAPES = "shapes",
7
+ EMOJIS = "emojis",
8
+ GIFS = "gifs"
9
+ }
10
+ export declare class Item {
11
+ id: string;
12
+ projectId: string;
13
+ uniqueId: string;
14
+ type: ItemType;
15
+ startMs: number;
16
+ endMs: number;
17
+ frameStartAt: number;
18
+ frameEndAt: number;
19
+ sceneId: string;
20
+ zIndex: number;
21
+ rowId: number;
22
+ locked: boolean;
23
+ visible: boolean;
24
+ mute: boolean;
25
+ isAudio: boolean;
26
+ isVideo: boolean;
27
+ isAudioDetached: boolean;
28
+ src: string;
29
+ s3Url: string;
30
+ s3Key: string;
31
+ thumbUrl: string;
32
+ duration: number;
33
+ volume: number;
34
+ textValue: string;
35
+ style: string;
36
+ shapeName: string;
37
+ isTintable: boolean;
38
+ transformation: Record<string, unknown>;
39
+ metadata: Record<string, unknown>;
40
+ createdAt: Date;
41
+ updatedAt: Date;
42
+ }
@@ -0,0 +1,161 @@
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.Item = exports.ItemType = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ var ItemType;
15
+ (function (ItemType) {
16
+ ItemType["VIDEOS"] = "videos";
17
+ ItemType["AUDIOS"] = "audios";
18
+ ItemType["IMAGES"] = "images";
19
+ ItemType["TITLES"] = "titles";
20
+ ItemType["SHAPES"] = "shapes";
21
+ ItemType["EMOJIS"] = "emojis";
22
+ ItemType["GIFS"] = "gifs";
23
+ })(ItemType || (exports.ItemType = ItemType = {}));
24
+ let Item = class Item {
25
+ };
26
+ exports.Item = Item;
27
+ __decorate([
28
+ (0, typeorm_1.Column)({ primary: true, type: 'varchar', length: 36 }),
29
+ __metadata("design:type", String)
30
+ ], Item.prototype, "id", void 0);
31
+ __decorate([
32
+ (0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255 }),
33
+ __metadata("design:type", String)
34
+ ], Item.prototype, "projectId", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)({ name: 'unique_id', type: 'varchar', length: 255 }),
37
+ __metadata("design:type", String)
38
+ ], Item.prototype, "uniqueId", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Column)({
41
+ type: 'enum',
42
+ enum: ItemType,
43
+ }),
44
+ __metadata("design:type", String)
45
+ ], Item.prototype, "type", void 0);
46
+ __decorate([
47
+ (0, typeorm_1.Column)({ name: 'start_ms', type: 'bigint' }),
48
+ __metadata("design:type", Number)
49
+ ], Item.prototype, "startMs", void 0);
50
+ __decorate([
51
+ (0, typeorm_1.Column)({ name: 'end_ms', type: 'bigint' }),
52
+ __metadata("design:type", Number)
53
+ ], Item.prototype, "endMs", void 0);
54
+ __decorate([
55
+ (0, typeorm_1.Column)({ name: 'frame_start_at', type: 'bigint', nullable: true }),
56
+ __metadata("design:type", Number)
57
+ ], Item.prototype, "frameStartAt", void 0);
58
+ __decorate([
59
+ (0, typeorm_1.Column)({ name: 'frame_end_at', type: 'bigint', nullable: true }),
60
+ __metadata("design:type", Number)
61
+ ], Item.prototype, "frameEndAt", void 0);
62
+ __decorate([
63
+ (0, typeorm_1.Column)({ name: 'scene_id', type: 'varchar', length: 36, nullable: true }),
64
+ __metadata("design:type", String)
65
+ ], Item.prototype, "sceneId", void 0);
66
+ __decorate([
67
+ (0, typeorm_1.Column)({ name: 'z_index', type: 'integer' }),
68
+ __metadata("design:type", Number)
69
+ ], Item.prototype, "zIndex", void 0);
70
+ __decorate([
71
+ (0, typeorm_1.Column)({ name: 'row_id', type: 'integer' }),
72
+ __metadata("design:type", Number)
73
+ ], Item.prototype, "rowId", void 0);
74
+ __decorate([
75
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
76
+ __metadata("design:type", Boolean)
77
+ ], Item.prototype, "locked", void 0);
78
+ __decorate([
79
+ (0, typeorm_1.Column)({ type: 'boolean', default: true }),
80
+ __metadata("design:type", Boolean)
81
+ ], Item.prototype, "visible", void 0);
82
+ __decorate([
83
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
84
+ __metadata("design:type", Boolean)
85
+ ], Item.prototype, "mute", void 0);
86
+ __decorate([
87
+ (0, typeorm_1.Column)({ name: 'is_audio', type: 'boolean', default: false }),
88
+ __metadata("design:type", Boolean)
89
+ ], Item.prototype, "isAudio", void 0);
90
+ __decorate([
91
+ (0, typeorm_1.Column)({ name: 'is_video', type: 'boolean', default: false }),
92
+ __metadata("design:type", Boolean)
93
+ ], Item.prototype, "isVideo", void 0);
94
+ __decorate([
95
+ (0, typeorm_1.Column)({ name: 'is_audio_detached', type: 'boolean', default: false }),
96
+ __metadata("design:type", Boolean)
97
+ ], Item.prototype, "isAudioDetached", void 0);
98
+ __decorate([
99
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
100
+ __metadata("design:type", String)
101
+ ], Item.prototype, "src", void 0);
102
+ __decorate([
103
+ (0, typeorm_1.Column)({ name: 's3_url', type: 'text', nullable: true }),
104
+ __metadata("design:type", String)
105
+ ], Item.prototype, "s3Url", void 0);
106
+ __decorate([
107
+ (0, typeorm_1.Column)({ name: 's3_key', type: 'text', nullable: true }),
108
+ __metadata("design:type", String)
109
+ ], Item.prototype, "s3Key", void 0);
110
+ __decorate([
111
+ (0, typeorm_1.Column)({ name: 'thumb_url', type: 'text', nullable: true }),
112
+ __metadata("design:type", String)
113
+ ], Item.prototype, "thumbUrl", void 0);
114
+ __decorate([
115
+ (0, typeorm_1.Column)({ type: 'bigint', nullable: true }),
116
+ __metadata("design:type", Number)
117
+ ], Item.prototype, "duration", void 0);
118
+ __decorate([
119
+ (0, typeorm_1.Column)({ type: 'decimal', precision: 3, scale: 2, default: 1.0 }),
120
+ __metadata("design:type", Number)
121
+ ], Item.prototype, "volume", void 0);
122
+ __decorate([
123
+ (0, typeorm_1.Column)({ name: 'text_value', type: 'text', nullable: true }),
124
+ __metadata("design:type", String)
125
+ ], Item.prototype, "textValue", void 0);
126
+ __decorate([
127
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
128
+ __metadata("design:type", String)
129
+ ], Item.prototype, "style", void 0);
130
+ __decorate([
131
+ (0, typeorm_1.Column)({ name: 'shape_name', type: 'varchar', length: 255, nullable: true }),
132
+ __metadata("design:type", String)
133
+ ], Item.prototype, "shapeName", void 0);
134
+ __decorate([
135
+ (0, typeorm_1.Column)({ name: 'is_tintable', type: 'boolean', default: false }),
136
+ __metadata("design:type", Boolean)
137
+ ], Item.prototype, "isTintable", void 0);
138
+ __decorate([
139
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
140
+ __metadata("design:type", Object)
141
+ ], Item.prototype, "transformation", void 0);
142
+ __decorate([
143
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
144
+ __metadata("design:type", Object)
145
+ ], Item.prototype, "metadata", void 0);
146
+ __decorate([
147
+ (0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
148
+ __metadata("design:type", Date)
149
+ ], Item.prototype, "createdAt", void 0);
150
+ __decorate([
151
+ (0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
152
+ __metadata("design:type", Date)
153
+ ], Item.prototype, "updatedAt", void 0);
154
+ exports.Item = Item = __decorate([
155
+ (0, typeorm_1.Entity)('items'),
156
+ (0, typeorm_1.Index)(['projectId']),
157
+ (0, typeorm_1.Index)(['sceneId']),
158
+ (0, typeorm_1.Index)(['projectId', 'uniqueId'], { unique: true }),
159
+ (0, typeorm_1.Index)(['projectId', 'startMs', 'endMs']),
160
+ (0, typeorm_1.Index)(['projectId', 'rowId', 'zIndex'])
161
+ ], Item);
@@ -0,0 +1,33 @@
1
+ export declare enum SceneThumbnailStatus {
2
+ PENDING = "PENDING",
3
+ GENERATING = "GENERATING",
4
+ READY = "READY",
5
+ FAILED = "FAILED"
6
+ }
7
+ export declare enum TransitionType {
8
+ FADE = "FADE",
9
+ CROSS_DISSOLVE = "CROSS_DISSOLVE",
10
+ WIPE = "WIPE",
11
+ SLIDE = "SLIDE",
12
+ NONE = "NONE"
13
+ }
14
+ export declare class Scene {
15
+ id: string;
16
+ projectId: string;
17
+ name: string;
18
+ description: string;
19
+ startMs: number;
20
+ endMs: number;
21
+ durationMs: number;
22
+ thumbnailUrl: string;
23
+ thumbnailStatus: SceneThumbnailStatus;
24
+ color: string;
25
+ transitionType: TransitionType;
26
+ transitionDurationMs: number;
27
+ transitionToSceneId: string;
28
+ locked: boolean;
29
+ collapsed: boolean;
30
+ sortOrder: number;
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ }
@@ -0,0 +1,119 @@
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.Scene = exports.TransitionType = exports.SceneThumbnailStatus = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ var SceneThumbnailStatus;
15
+ (function (SceneThumbnailStatus) {
16
+ SceneThumbnailStatus["PENDING"] = "PENDING";
17
+ SceneThumbnailStatus["GENERATING"] = "GENERATING";
18
+ SceneThumbnailStatus["READY"] = "READY";
19
+ SceneThumbnailStatus["FAILED"] = "FAILED";
20
+ })(SceneThumbnailStatus || (exports.SceneThumbnailStatus = SceneThumbnailStatus = {}));
21
+ var TransitionType;
22
+ (function (TransitionType) {
23
+ TransitionType["FADE"] = "FADE";
24
+ TransitionType["CROSS_DISSOLVE"] = "CROSS_DISSOLVE";
25
+ TransitionType["WIPE"] = "WIPE";
26
+ TransitionType["SLIDE"] = "SLIDE";
27
+ TransitionType["NONE"] = "NONE";
28
+ })(TransitionType || (exports.TransitionType = TransitionType = {}));
29
+ let Scene = class Scene {
30
+ };
31
+ exports.Scene = Scene;
32
+ __decorate([
33
+ (0, typeorm_1.Column)({ primary: true, type: 'varchar', length: 36 }),
34
+ __metadata("design:type", String)
35
+ ], Scene.prototype, "id", void 0);
36
+ __decorate([
37
+ (0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255 }),
38
+ __metadata("design:type", String)
39
+ ], Scene.prototype, "projectId", void 0);
40
+ __decorate([
41
+ (0, typeorm_1.Column)({ type: 'varchar', length: 255 }),
42
+ __metadata("design:type", String)
43
+ ], Scene.prototype, "name", void 0);
44
+ __decorate([
45
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
46
+ __metadata("design:type", String)
47
+ ], Scene.prototype, "description", void 0);
48
+ __decorate([
49
+ (0, typeorm_1.Column)({ name: 'start_ms', type: 'bigint' }),
50
+ __metadata("design:type", Number)
51
+ ], Scene.prototype, "startMs", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Column)({ name: 'end_ms', type: 'bigint' }),
54
+ __metadata("design:type", Number)
55
+ ], Scene.prototype, "endMs", void 0);
56
+ __decorate([
57
+ (0, typeorm_1.Column)({ name: 'duration_ms', type: 'bigint', insert: false, update: false }),
58
+ __metadata("design:type", Number)
59
+ ], Scene.prototype, "durationMs", void 0);
60
+ __decorate([
61
+ (0, typeorm_1.Column)({ name: 'thumbnail_url', type: 'text', nullable: true }),
62
+ __metadata("design:type", String)
63
+ ], Scene.prototype, "thumbnailUrl", void 0);
64
+ __decorate([
65
+ (0, typeorm_1.Column)({
66
+ name: 'thumbnail_status',
67
+ type: 'varchar',
68
+ length: 20,
69
+ default: SceneThumbnailStatus.PENDING,
70
+ }),
71
+ __metadata("design:type", String)
72
+ ], Scene.prototype, "thumbnailStatus", void 0);
73
+ __decorate([
74
+ (0, typeorm_1.Column)({ type: 'varchar', length: 7, nullable: true }),
75
+ __metadata("design:type", String)
76
+ ], Scene.prototype, "color", void 0);
77
+ __decorate([
78
+ (0, typeorm_1.Column)({
79
+ name: 'transition_type',
80
+ type: 'varchar',
81
+ length: 20,
82
+ nullable: true,
83
+ }),
84
+ __metadata("design:type", String)
85
+ ], Scene.prototype, "transitionType", void 0);
86
+ __decorate([
87
+ (0, typeorm_1.Column)({ name: 'transition_duration_ms', type: 'integer', nullable: true }),
88
+ __metadata("design:type", Number)
89
+ ], Scene.prototype, "transitionDurationMs", void 0);
90
+ __decorate([
91
+ (0, typeorm_1.Column)({ name: 'transition_to_scene_id', type: 'varchar', length: 36, nullable: true }),
92
+ __metadata("design:type", String)
93
+ ], Scene.prototype, "transitionToSceneId", void 0);
94
+ __decorate([
95
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
96
+ __metadata("design:type", Boolean)
97
+ ], Scene.prototype, "locked", void 0);
98
+ __decorate([
99
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
100
+ __metadata("design:type", Boolean)
101
+ ], Scene.prototype, "collapsed", void 0);
102
+ __decorate([
103
+ (0, typeorm_1.Column)({ name: 'sort_order', type: 'integer', default: 0 }),
104
+ __metadata("design:type", Number)
105
+ ], Scene.prototype, "sortOrder", void 0);
106
+ __decorate([
107
+ (0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
108
+ __metadata("design:type", Date)
109
+ ], Scene.prototype, "createdAt", void 0);
110
+ __decorate([
111
+ (0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
112
+ __metadata("design:type", Date)
113
+ ], Scene.prototype, "updatedAt", void 0);
114
+ exports.Scene = Scene = __decorate([
115
+ (0, typeorm_1.Entity)('scenes'),
116
+ (0, typeorm_1.Index)(['projectId']),
117
+ (0, typeorm_1.Index)(['projectId', 'sortOrder']),
118
+ (0, typeorm_1.Index)(['projectId', 'startMs', 'endMs'])
119
+ ], Scene);
@@ -32,4 +32,6 @@ export { UserContextRepository } from './user-context.repository';
32
32
  export { AiEmbeddingRepository } from './ai-embedding.repository';
33
33
  export { MetadataActivityLogRepository } from './metadata-activity-log.repository';
34
34
  export { ProjectSceneRepository } from './project-scene.repository';
35
+ export { SceneRepository } from './scene.repository';
36
+ export { ItemRepository } from './item.repository';
35
37
  export { RemotionRenderRepository } from './RemotionRenderRepository';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RemotionRenderRepository = 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.PlanCreditConfigurationRepository = exports.CreditTransactionRepository = exports.CreditAllocationRepository = 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.RemotionRenderRepository = exports.ItemRepository = exports.SceneRepository = 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.PlanCreditConfigurationRepository = exports.CreditTransactionRepository = exports.CreditAllocationRepository = 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");
@@ -69,5 +69,9 @@ var metadata_activity_log_repository_1 = require("./metadata-activity-log.reposi
69
69
  Object.defineProperty(exports, "MetadataActivityLogRepository", { enumerable: true, get: function () { return metadata_activity_log_repository_1.MetadataActivityLogRepository; } });
70
70
  var project_scene_repository_1 = require("./project-scene.repository");
71
71
  Object.defineProperty(exports, "ProjectSceneRepository", { enumerable: true, get: function () { return project_scene_repository_1.ProjectSceneRepository; } });
72
+ var scene_repository_1 = require("./scene.repository");
73
+ Object.defineProperty(exports, "SceneRepository", { enumerable: true, get: function () { return scene_repository_1.SceneRepository; } });
74
+ var item_repository_1 = require("./item.repository");
75
+ Object.defineProperty(exports, "ItemRepository", { enumerable: true, get: function () { return item_repository_1.ItemRepository; } });
72
76
  var RemotionRenderRepository_1 = require("./RemotionRenderRepository");
73
77
  Object.defineProperty(exports, "RemotionRenderRepository", { enumerable: true, get: function () { return RemotionRenderRepository_1.RemotionRenderRepository; } });
@@ -0,0 +1,31 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Item } from '../entities/item.entity';
4
+ export declare class ItemRepository extends BaseRepository<Item> {
5
+ private readonly itemRepository;
6
+ constructor(itemRepository: Repository<Item>);
7
+ findByProject(projectId: string): Promise<Item[]>;
8
+ findByProjectWithScenes(projectId: string): Promise<Item[]>;
9
+ findByScene(sceneId: string): Promise<Item[]>;
10
+ findByScenes(sceneIds: string[]): Promise<Item[]>;
11
+ findInTimeRange(projectId: string, startMs: number, endMs: number): Promise<Item[]>;
12
+ findByType(projectId: string, type: string): Promise<Item[]>;
13
+ findByRow(projectId: string, rowId: number): Promise<Item[]>;
14
+ updateSceneIds(updates: {
15
+ id: string;
16
+ sceneId: string | null;
17
+ }[]): Promise<void>;
18
+ removeSceneAssignment(sceneId: string): Promise<number>;
19
+ deleteByProject(projectId: string): Promise<number>;
20
+ deleteByScene(sceneId: string): Promise<number>;
21
+ countByProject(projectId: string): Promise<number>;
22
+ countByScene(sceneId: string): Promise<number>;
23
+ findOrphaned(projectId: string): Promise<Item[]>;
24
+ bulkCreate(items: Partial<Item>[]): Promise<Item[]>;
25
+ findByUniqueIds(projectId: string, uniqueIds: string[]): Promise<Item[]>;
26
+ updatePositions(updates: {
27
+ id: string;
28
+ rowId: number;
29
+ zIndex: number;
30
+ }[]): Promise<void>;
31
+ }
@@ -0,0 +1,125 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ItemRepository = void 0;
16
+ const typeorm_1 = require("typeorm");
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_2 = require("@nestjs/typeorm");
19
+ const base_repository_1 = require("./base.repository");
20
+ const item_entity_1 = require("../entities/item.entity");
21
+ let ItemRepository = class ItemRepository extends base_repository_1.BaseRepository {
22
+ constructor(itemRepository) {
23
+ super(itemRepository);
24
+ this.itemRepository = itemRepository;
25
+ }
26
+ async findByProject(projectId) {
27
+ return this.itemRepository.find({
28
+ where: { projectId },
29
+ order: { rowId: 'ASC', zIndex: 'ASC', startMs: 'ASC' },
30
+ });
31
+ }
32
+ async findByProjectWithScenes(projectId) {
33
+ return this.itemRepository.find({
34
+ where: { projectId },
35
+ relations: ['scene'],
36
+ order: { rowId: 'ASC', zIndex: 'ASC', startMs: 'ASC' },
37
+ });
38
+ }
39
+ async findByScene(sceneId) {
40
+ return this.itemRepository.find({
41
+ where: { sceneId },
42
+ order: { rowId: 'ASC', zIndex: 'ASC', startMs: 'ASC' },
43
+ });
44
+ }
45
+ async findByScenes(sceneIds) {
46
+ if (sceneIds.length === 0)
47
+ return [];
48
+ return this.itemRepository.find({
49
+ where: { sceneId: { $in: sceneIds } },
50
+ order: { rowId: 'ASC', zIndex: 'ASC', startMs: 'ASC' },
51
+ });
52
+ }
53
+ async findInTimeRange(projectId, startMs, endMs) {
54
+ return this.itemRepository
55
+ .createQueryBuilder('item')
56
+ .where('item.projectId = :projectId', { projectId })
57
+ .andWhere('item.startMs < :endMs', { endMs })
58
+ .andWhere('item.endMs > :startMs', { startMs })
59
+ .orderBy('item.rowId', 'ASC')
60
+ .addOrderBy('item.zIndex', 'ASC')
61
+ .getMany();
62
+ }
63
+ async findByType(projectId, type) {
64
+ return this.itemRepository.find({
65
+ where: { projectId, type: type },
66
+ order: { startMs: 'ASC' },
67
+ });
68
+ }
69
+ async findByRow(projectId, rowId) {
70
+ return this.itemRepository.find({
71
+ where: { projectId, rowId },
72
+ order: { zIndex: 'ASC', startMs: 'ASC' },
73
+ });
74
+ }
75
+ async updateSceneIds(updates) {
76
+ const updatePromises = updates.map(({ id, sceneId }) => this.itemRepository.update(id, { sceneId }));
77
+ await Promise.all(updatePromises);
78
+ }
79
+ async removeSceneAssignment(sceneId) {
80
+ const result = await this.itemRepository.update({ sceneId }, { sceneId: null });
81
+ return result.affected ?? 0;
82
+ }
83
+ async deleteByProject(projectId) {
84
+ const result = await this.itemRepository.delete({ projectId });
85
+ return result.affected ?? 0;
86
+ }
87
+ async deleteByScene(sceneId) {
88
+ const result = await this.itemRepository.delete({ sceneId });
89
+ return result.affected ?? 0;
90
+ }
91
+ async countByProject(projectId) {
92
+ return this.itemRepository.count({ where: { projectId } });
93
+ }
94
+ async countByScene(sceneId) {
95
+ return this.itemRepository.count({ where: { sceneId } });
96
+ }
97
+ async findOrphaned(projectId) {
98
+ return this.itemRepository.find({
99
+ where: { projectId, sceneId: null },
100
+ order: { rowId: 'ASC', zIndex: 'ASC' },
101
+ });
102
+ }
103
+ async bulkCreate(items) {
104
+ const entities = this.itemRepository.create(items);
105
+ return this.itemRepository.save(entities);
106
+ }
107
+ async findByUniqueIds(projectId, uniqueIds) {
108
+ if (uniqueIds.length === 0)
109
+ return [];
110
+ return this.itemRepository.find({
111
+ where: { projectId, uniqueId: { $in: uniqueIds } },
112
+ order: { rowId: 'ASC', zIndex: 'ASC' },
113
+ });
114
+ }
115
+ async updatePositions(updates) {
116
+ const updatePromises = updates.map(({ id, rowId, zIndex }) => this.itemRepository.update(id, { rowId, zIndex }));
117
+ await Promise.all(updatePromises);
118
+ }
119
+ };
120
+ exports.ItemRepository = ItemRepository;
121
+ exports.ItemRepository = ItemRepository = __decorate([
122
+ (0, common_1.Injectable)(),
123
+ __param(0, (0, typeorm_2.InjectRepository)(item_entity_1.Item)),
124
+ __metadata("design:paramtypes", [typeorm_1.Repository])
125
+ ], ItemRepository);
@@ -45,6 +45,8 @@ const repositories = [
45
45
  _1.AiEmbeddingRepository,
46
46
  _1.MetadataActivityLogRepository,
47
47
  _1.ProjectSceneRepository,
48
+ _1.SceneRepository,
49
+ _1.ItemRepository,
48
50
  _1.RemotionRenderRepository,
49
51
  ];
50
52
  const entities = [
@@ -80,6 +82,8 @@ const entities = [
80
82
  entities_1.MetadataActivityLog,
81
83
  entities_1.ProjectSceneJob,
82
84
  entities_1.ProjectScene,
85
+ entities_1.Scene,
86
+ entities_1.Item,
83
87
  entities_1.RemotionRender,
84
88
  entities_1.CreditAllocation,
85
89
  entities_1.PlanCreditConfiguration,
@@ -0,0 +1,21 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Scene } from '../entities/scene.entity';
4
+ export declare class SceneRepository extends BaseRepository<Scene> {
5
+ private readonly sceneRepository;
6
+ constructor(sceneRepository: Repository<Scene>);
7
+ findByProject(projectId: string): Promise<Scene[]>;
8
+ findByProjectWithItems(projectId: string): Promise<Scene[]>;
9
+ findByIdWithProject(id: string): Promise<Scene | null>;
10
+ findInTimeRange(projectId: string, startMs: number, endMs: number): Promise<Scene[]>;
11
+ updateSortOrders(updates: {
12
+ id: string;
13
+ sortOrder: number;
14
+ }[]): Promise<void>;
15
+ deleteByProject(projectId: string): Promise<number>;
16
+ countByProject(projectId: string): Promise<number>;
17
+ findOverlapping(projectId: string, startMs: number, endMs: number, excludeId?: string): Promise<Scene[]>;
18
+ findByThumbnailStatus(status: string, limit?: number): Promise<Scene[]>;
19
+ updateThumbnailStatus(ids: string[], status: string): Promise<void>;
20
+ getNextSortOrder(projectId: string): Promise<number>;
21
+ }
@@ -0,0 +1,105 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SceneRepository = void 0;
16
+ const typeorm_1 = require("typeorm");
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_2 = require("@nestjs/typeorm");
19
+ const base_repository_1 = require("./base.repository");
20
+ const scene_entity_1 = require("../entities/scene.entity");
21
+ let SceneRepository = class SceneRepository extends base_repository_1.BaseRepository {
22
+ constructor(sceneRepository) {
23
+ super(sceneRepository);
24
+ this.sceneRepository = sceneRepository;
25
+ }
26
+ async findByProject(projectId) {
27
+ return this.sceneRepository.find({
28
+ where: { projectId },
29
+ order: { sortOrder: 'ASC' },
30
+ });
31
+ }
32
+ async findByProjectWithItems(projectId) {
33
+ return this.sceneRepository.find({
34
+ where: { projectId },
35
+ relations: ['items'],
36
+ order: { sortOrder: 'ASC' },
37
+ });
38
+ }
39
+ async findByIdWithProject(id) {
40
+ return this.sceneRepository.findOne({
41
+ where: { id },
42
+ relations: ['project'],
43
+ });
44
+ }
45
+ async findInTimeRange(projectId, startMs, endMs) {
46
+ return this.sceneRepository
47
+ .createQueryBuilder('scene')
48
+ .where('scene.projectId = :projectId', { projectId })
49
+ .andWhere('scene.startMs < :endMs', { endMs })
50
+ .andWhere('scene.endMs > :startMs', { startMs })
51
+ .orderBy('scene.sortOrder', 'ASC')
52
+ .getMany();
53
+ }
54
+ async updateSortOrders(updates) {
55
+ const updatePromises = updates.map(({ id, sortOrder }) => this.sceneRepository.update(id, { sortOrder }));
56
+ await Promise.all(updatePromises);
57
+ }
58
+ async deleteByProject(projectId) {
59
+ const result = await this.sceneRepository.delete({ projectId });
60
+ return result.affected ?? 0;
61
+ }
62
+ async countByProject(projectId) {
63
+ return this.sceneRepository.count({ where: { projectId } });
64
+ }
65
+ async findOverlapping(projectId, startMs, endMs, excludeId) {
66
+ const query = this.sceneRepository
67
+ .createQueryBuilder('scene')
68
+ .where('scene.projectId = :projectId', { projectId })
69
+ .andWhere('scene.startMs < :endMs', { endMs })
70
+ .andWhere('scene.endMs > :startMs', { startMs });
71
+ if (excludeId) {
72
+ query.andWhere('scene.id != :excludeId', { excludeId });
73
+ }
74
+ return query.orderBy('scene.sortOrder', 'ASC').getMany();
75
+ }
76
+ async findByThumbnailStatus(status, limit = 100) {
77
+ return this.sceneRepository.find({
78
+ where: { thumbnailStatus: status },
79
+ take: limit,
80
+ order: { updatedAt: 'ASC' },
81
+ });
82
+ }
83
+ async updateThumbnailStatus(ids, status) {
84
+ await this.sceneRepository
85
+ .createQueryBuilder()
86
+ .update()
87
+ .set({ thumbnailStatus: status })
88
+ .where('id IN (:...ids)', { ids })
89
+ .execute();
90
+ }
91
+ async getNextSortOrder(projectId) {
92
+ const result = await this.sceneRepository
93
+ .createQueryBuilder('scene')
94
+ .select('MAX(scene.sortOrder)', 'maxOrder')
95
+ .where('scene.projectId = :projectId', { projectId })
96
+ .getRawOne();
97
+ return (result?.maxOrder ?? -1) + 1;
98
+ }
99
+ };
100
+ exports.SceneRepository = SceneRepository;
101
+ exports.SceneRepository = SceneRepository = __decorate([
102
+ (0, common_1.Injectable)(),
103
+ __param(0, (0, typeorm_2.InjectRepository)(scene_entity_1.Scene)),
104
+ __metadata("design:paramtypes", [typeorm_1.Repository])
105
+ ], SceneRepository);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clhq-postgres-module",
3
- "version": "1.1.0-alpha.126",
3
+ "version": "1.1.0-alpha.127",
4
4
  "description": "PostgreSQL module using TypeORM for Clippy",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",