clhq-postgres-module 1.1.0-alpha.162 → 1.1.0-alpha.164
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/dist/entities/ai-video-job.entity.d.ts +42 -0
- package/dist/entities/ai-video-job.entity.js +147 -0
- package/dist/entities/ai-video-scene-task.entity.d.ts +40 -0
- package/dist/entities/ai-video-scene-task.entity.js +149 -0
- package/dist/entities/asset-category.entity.d.ts +11 -0
- package/dist/entities/asset-category.entity.js +54 -0
- package/dist/entities/asset.entity.d.ts +6 -1
- package/dist/entities/asset.entity.js +5 -0
- package/dist/entities/brand-asset.entity.d.ts +26 -0
- package/dist/entities/brand-asset.entity.js +78 -0
- package/dist/entities/brand-kit.entity.d.ts +20 -0
- package/dist/entities/brand-kit.entity.js +91 -0
- package/dist/entities/index.d.ts +6 -0
- package/dist/entities/index.js +6 -0
- package/dist/entities/project-brand-override.entity.d.ts +12 -0
- package/dist/entities/project-brand-override.entity.js +64 -0
- package/dist/entities/workspace.entity.d.ts +4 -0
- package/dist/entities/workspace.entity.js +24 -1
- package/dist/postgres.module.js +2 -0
- package/dist/repositories/ai-video-job.repository.d.ts +19 -0
- package/dist/repositories/ai-video-job.repository.js +78 -0
- package/dist/repositories/ai-video-scene-task.repository.d.ts +15 -0
- package/dist/repositories/ai-video-scene-task.repository.js +65 -0
- package/dist/repositories/asset-category.repository.d.ts +9 -0
- package/dist/repositories/asset-category.repository.js +43 -0
- package/dist/repositories/brand-asset.repository.d.ts +12 -0
- package/dist/repositories/brand-asset.repository.js +54 -0
- package/dist/repositories/brand-kit.repository.d.ts +11 -0
- package/dist/repositories/brand-kit.repository.js +52 -0
- package/dist/repositories/index.d.ts +6 -0
- package/dist/repositories/index.js +13 -1
- package/dist/repositories/project-brand-override.repository.d.ts +10 -0
- package/dist/repositories/project-brand-override.repository.js +50 -0
- package/dist/repositories/repository.module.js +12 -0
- package/package.json +7 -5
|
@@ -0,0 +1,91 @@
|
|
|
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.BrandKit = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const workspace_entity_1 = require("./workspace.entity");
|
|
15
|
+
const asset_entity_1 = require("./asset.entity");
|
|
16
|
+
let BrandKit = class BrandKit {
|
|
17
|
+
};
|
|
18
|
+
exports.BrandKit = BrandKit;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], BrandKit.prototype, "id", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.Column)({ name: 'workspace_id', type: 'uuid' }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], BrandKit.prototype, "workspaceId", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, typeorm_1.ManyToOne)(() => workspace_entity_1.Workspace, { nullable: false }),
|
|
29
|
+
(0, typeorm_1.JoinColumn)({ name: 'workspace_id' }),
|
|
30
|
+
__metadata("design:type", workspace_entity_1.Workspace)
|
|
31
|
+
], BrandKit.prototype, "workspace", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 255 }),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], BrandKit.prototype, "name", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, typeorm_1.Column)({ name: 'primary_colors', type: 'text', array: true, default: '{}' }),
|
|
38
|
+
__metadata("design:type", Array)
|
|
39
|
+
], BrandKit.prototype, "primaryColors", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, typeorm_1.Column)({ name: 'secondary_colors', type: 'text', array: true, default: '{}' }),
|
|
42
|
+
__metadata("design:type", Array)
|
|
43
|
+
], BrandKit.prototype, "secondaryColors", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, typeorm_1.Column)({ name: 'neutral_colors', type: 'text', array: true, default: '{}' }),
|
|
46
|
+
__metadata("design:type", Array)
|
|
47
|
+
], BrandKit.prototype, "neutralColors", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, typeorm_1.Column)({ name: 'heading_font_id', type: 'uuid', nullable: true }),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], BrandKit.prototype, "headingFontId", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, typeorm_1.ManyToOne)(() => asset_entity_1.Asset, { nullable: true }),
|
|
54
|
+
(0, typeorm_1.JoinColumn)({ name: 'heading_font_id' }),
|
|
55
|
+
__metadata("design:type", asset_entity_1.Asset)
|
|
56
|
+
], BrandKit.prototype, "headingFont", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, typeorm_1.Column)({ name: 'body_font_id', type: 'uuid', nullable: true }),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], BrandKit.prototype, "bodyFontId", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, typeorm_1.ManyToOne)(() => asset_entity_1.Asset, { nullable: true }),
|
|
63
|
+
(0, typeorm_1.JoinColumn)({ name: 'body_font_id' }),
|
|
64
|
+
__metadata("design:type", asset_entity_1.Asset)
|
|
65
|
+
], BrandKit.prototype, "bodyFont", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, typeorm_1.Column)({ name: 'caption_font_id', type: 'uuid', nullable: true }),
|
|
68
|
+
__metadata("design:type", String)
|
|
69
|
+
], BrandKit.prototype, "captionFontId", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, typeorm_1.ManyToOne)(() => asset_entity_1.Asset, { nullable: true }),
|
|
72
|
+
(0, typeorm_1.JoinColumn)({ name: 'caption_font_id' }),
|
|
73
|
+
__metadata("design:type", asset_entity_1.Asset)
|
|
74
|
+
], BrandKit.prototype, "captionFont", void 0);
|
|
75
|
+
__decorate([
|
|
76
|
+
(0, typeorm_1.Column)({ name: 'is_active', type: 'boolean', default: true }),
|
|
77
|
+
__metadata("design:type", Boolean)
|
|
78
|
+
], BrandKit.prototype, "isActive", void 0);
|
|
79
|
+
__decorate([
|
|
80
|
+
(0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
|
|
81
|
+
__metadata("design:type", Date)
|
|
82
|
+
], BrandKit.prototype, "createdAt", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
|
|
85
|
+
__metadata("design:type", Date)
|
|
86
|
+
], BrandKit.prototype, "updatedAt", void 0);
|
|
87
|
+
exports.BrandKit = BrandKit = __decorate([
|
|
88
|
+
(0, typeorm_1.Entity)('brand_kits'),
|
|
89
|
+
(0, typeorm_1.Index)(['workspaceId']),
|
|
90
|
+
(0, typeorm_1.Index)(['workspaceId', 'isActive'])
|
|
91
|
+
], BrandKit);
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -38,3 +38,9 @@ export * from './scene.entity';
|
|
|
38
38
|
export * from './item.entity';
|
|
39
39
|
export * from './RemotionRender';
|
|
40
40
|
export * from './project-share.entity';
|
|
41
|
+
export * from './brand-kit.entity';
|
|
42
|
+
export * from './brand-asset.entity';
|
|
43
|
+
export * from './asset-category.entity';
|
|
44
|
+
export * from './project-brand-override.entity';
|
|
45
|
+
export * from './ai-video-job.entity';
|
|
46
|
+
export * from './ai-video-scene-task.entity';
|
package/dist/entities/index.js
CHANGED
|
@@ -56,3 +56,9 @@ __exportStar(require("./scene.entity"), exports);
|
|
|
56
56
|
__exportStar(require("./item.entity"), exports);
|
|
57
57
|
__exportStar(require("./RemotionRender"), exports);
|
|
58
58
|
__exportStar(require("./project-share.entity"), exports);
|
|
59
|
+
__exportStar(require("./brand-kit.entity"), exports);
|
|
60
|
+
__exportStar(require("./brand-asset.entity"), exports);
|
|
61
|
+
__exportStar(require("./asset-category.entity"), exports);
|
|
62
|
+
__exportStar(require("./project-brand-override.entity"), exports);
|
|
63
|
+
__exportStar(require("./ai-video-job.entity"), exports);
|
|
64
|
+
__exportStar(require("./ai-video-scene-task.entity"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BrandAsset } from './brand-asset.entity';
|
|
2
|
+
export declare class ProjectBrandOverride {
|
|
3
|
+
id: string;
|
|
4
|
+
projectId: string;
|
|
5
|
+
overridePrimaryColors: string[] | null;
|
|
6
|
+
overrideHeadingFontId: string | null;
|
|
7
|
+
overrideHeadingFont: BrandAsset | null;
|
|
8
|
+
overrideBodyFontId: string | null;
|
|
9
|
+
overrideBodyFont: BrandAsset | null;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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.ProjectBrandOverride = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const brand_asset_entity_1 = require("./brand-asset.entity");
|
|
15
|
+
let ProjectBrandOverride = class ProjectBrandOverride {
|
|
16
|
+
};
|
|
17
|
+
exports.ProjectBrandOverride = ProjectBrandOverride;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], ProjectBrandOverride.prototype, "id", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255, unique: true }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], ProjectBrandOverride.prototype, "projectId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, typeorm_1.Column)({
|
|
28
|
+
name: 'override_primary_colors',
|
|
29
|
+
type: 'text',
|
|
30
|
+
array: true,
|
|
31
|
+
nullable: true,
|
|
32
|
+
}),
|
|
33
|
+
__metadata("design:type", Array)
|
|
34
|
+
], ProjectBrandOverride.prototype, "overridePrimaryColors", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, typeorm_1.Column)({ name: 'override_heading_font_id', type: 'uuid', nullable: true }),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], ProjectBrandOverride.prototype, "overrideHeadingFontId", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, typeorm_1.ManyToOne)(() => brand_asset_entity_1.BrandAsset, { nullable: true, onDelete: 'SET NULL' }),
|
|
41
|
+
(0, typeorm_1.JoinColumn)({ name: 'override_heading_font_id' }),
|
|
42
|
+
__metadata("design:type", brand_asset_entity_1.BrandAsset)
|
|
43
|
+
], ProjectBrandOverride.prototype, "overrideHeadingFont", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, typeorm_1.Column)({ name: 'override_body_font_id', type: 'uuid', nullable: true }),
|
|
46
|
+
__metadata("design:type", String)
|
|
47
|
+
], ProjectBrandOverride.prototype, "overrideBodyFontId", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, typeorm_1.ManyToOne)(() => brand_asset_entity_1.BrandAsset, { nullable: true, onDelete: 'SET NULL' }),
|
|
50
|
+
(0, typeorm_1.JoinColumn)({ name: 'override_body_font_id' }),
|
|
51
|
+
__metadata("design:type", brand_asset_entity_1.BrandAsset)
|
|
52
|
+
], ProjectBrandOverride.prototype, "overrideBodyFont", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
|
|
55
|
+
__metadata("design:type", Date)
|
|
56
|
+
], ProjectBrandOverride.prototype, "createdAt", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
|
|
59
|
+
__metadata("design:type", Date)
|
|
60
|
+
], ProjectBrandOverride.prototype, "updatedAt", void 0);
|
|
61
|
+
exports.ProjectBrandOverride = ProjectBrandOverride = __decorate([
|
|
62
|
+
(0, typeorm_1.Entity)('project_brand_overrides'),
|
|
63
|
+
(0, typeorm_1.Index)(['projectId'], { unique: true })
|
|
64
|
+
], ProjectBrandOverride);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { User } from './user.entity';
|
|
2
2
|
import { EditorProject } from './editor-project.entity';
|
|
3
|
+
import { BrandKit } from './brand-kit.entity';
|
|
3
4
|
export declare class Workspace {
|
|
4
5
|
id: string;
|
|
5
6
|
name: string;
|
|
@@ -11,6 +12,9 @@ export declare class Workspace {
|
|
|
11
12
|
storageLastCalculatedAt: Date;
|
|
12
13
|
createdAt: Date;
|
|
13
14
|
updatedAt: Date;
|
|
15
|
+
activeBrandKitId: string | null;
|
|
16
|
+
enforcementMode: string;
|
|
17
|
+
activeBrandKit: BrandKit | null;
|
|
14
18
|
owner: User;
|
|
15
19
|
users: User[];
|
|
16
20
|
projects: EditorProject[];
|
|
@@ -13,6 +13,7 @@ exports.Workspace = void 0;
|
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
14
|
const user_entity_1 = require("./user.entity");
|
|
15
15
|
const editor_project_entity_1 = require("./editor-project.entity");
|
|
16
|
+
const brand_kit_entity_1 = require("./brand-kit.entity");
|
|
16
17
|
let Workspace = class Workspace {
|
|
17
18
|
};
|
|
18
19
|
exports.Workspace = Workspace;
|
|
@@ -46,7 +47,11 @@ __decorate([
|
|
|
46
47
|
__metadata("design:type", Number)
|
|
47
48
|
], Workspace.prototype, "storageLimitBytes", void 0);
|
|
48
49
|
__decorate([
|
|
49
|
-
(0, typeorm_1.Column)({
|
|
50
|
+
(0, typeorm_1.Column)({
|
|
51
|
+
name: 'storage_last_calculated_at',
|
|
52
|
+
type: 'timestamp',
|
|
53
|
+
nullable: true,
|
|
54
|
+
}),
|
|
50
55
|
__metadata("design:type", Date)
|
|
51
56
|
], Workspace.prototype, "storageLastCalculatedAt", void 0);
|
|
52
57
|
__decorate([
|
|
@@ -57,6 +62,24 @@ __decorate([
|
|
|
57
62
|
(0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
|
|
58
63
|
__metadata("design:type", Date)
|
|
59
64
|
], Workspace.prototype, "updatedAt", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, typeorm_1.Column)({ name: 'active_brand_kit_id', type: 'uuid', nullable: true }),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], Workspace.prototype, "activeBrandKitId", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, typeorm_1.Column)({
|
|
71
|
+
name: 'enforcement_mode',
|
|
72
|
+
type: 'varchar',
|
|
73
|
+
length: 10,
|
|
74
|
+
default: 'SOFT',
|
|
75
|
+
}),
|
|
76
|
+
__metadata("design:type", String)
|
|
77
|
+
], Workspace.prototype, "enforcementMode", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, typeorm_1.ManyToOne)(() => brand_kit_entity_1.BrandKit, { nullable: true }),
|
|
80
|
+
(0, typeorm_1.JoinColumn)({ name: 'active_brand_kit_id' }),
|
|
81
|
+
__metadata("design:type", brand_kit_entity_1.BrandKit)
|
|
82
|
+
], Workspace.prototype, "activeBrandKit", void 0);
|
|
60
83
|
__decorate([
|
|
61
84
|
(0, typeorm_1.ManyToOne)(() => user_entity_1.User, { nullable: false }),
|
|
62
85
|
(0, typeorm_1.JoinColumn)({ name: 'owner_id' }),
|
package/dist/postgres.module.js
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { AiVideoJob } from '../entities/ai-video-job.entity';
|
|
3
|
+
import { AiVideoSceneTask } from '../entities/ai-video-scene-task.entity';
|
|
4
|
+
export declare class AiVideoJobRepository {
|
|
5
|
+
private dataSource;
|
|
6
|
+
private jobRepo;
|
|
7
|
+
private taskRepo;
|
|
8
|
+
constructor(dataSource: DataSource);
|
|
9
|
+
createJob(data: Partial<AiVideoJob>): Promise<AiVideoJob>;
|
|
10
|
+
findById(jobId: string): Promise<AiVideoJob | null>;
|
|
11
|
+
findByIdAndUser(jobId: string, userId: string): Promise<AiVideoJob | null>;
|
|
12
|
+
findByIdWithTasks(jobId: string, userId?: string): Promise<(AiVideoJob & {
|
|
13
|
+
tasks: AiVideoSceneTask[];
|
|
14
|
+
}) | null>;
|
|
15
|
+
updateJob(jobId: string, fields: Partial<AiVideoJob>): Promise<void>;
|
|
16
|
+
claimAssembly(jobId: string): Promise<boolean>;
|
|
17
|
+
findStuckJobs(timeoutMinutes: number): Promise<AiVideoJob[]>;
|
|
18
|
+
getSceneTasks(jobId: string): Promise<AiVideoSceneTask[]>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
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.AiVideoJobRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const typeorm_1 = require("typeorm");
|
|
15
|
+
const ai_video_job_entity_1 = require("../entities/ai-video-job.entity");
|
|
16
|
+
const ai_video_scene_task_entity_1 = require("../entities/ai-video-scene-task.entity");
|
|
17
|
+
let AiVideoJobRepository = class AiVideoJobRepository {
|
|
18
|
+
constructor(dataSource) {
|
|
19
|
+
this.dataSource = dataSource;
|
|
20
|
+
this.jobRepo = this.dataSource.getRepository(ai_video_job_entity_1.AiVideoJob);
|
|
21
|
+
this.taskRepo = this.dataSource.getRepository(ai_video_scene_task_entity_1.AiVideoSceneTask);
|
|
22
|
+
}
|
|
23
|
+
async createJob(data) {
|
|
24
|
+
return this.jobRepo.save(data);
|
|
25
|
+
}
|
|
26
|
+
async findById(jobId) {
|
|
27
|
+
return this.jobRepo.findOne({ where: { id: jobId } });
|
|
28
|
+
}
|
|
29
|
+
async findByIdAndUser(jobId, userId) {
|
|
30
|
+
return this.jobRepo.findOne({ where: { id: jobId, userId } });
|
|
31
|
+
}
|
|
32
|
+
async findByIdWithTasks(jobId, userId) {
|
|
33
|
+
const where = { id: jobId };
|
|
34
|
+
if (userId)
|
|
35
|
+
where.userId = userId;
|
|
36
|
+
const job = await this.jobRepo.findOne({ where });
|
|
37
|
+
if (!job)
|
|
38
|
+
return null;
|
|
39
|
+
const tasks = await this.taskRepo.find({
|
|
40
|
+
where: { jobId },
|
|
41
|
+
order: { sceneOrder: 'ASC' },
|
|
42
|
+
});
|
|
43
|
+
return { ...job, tasks };
|
|
44
|
+
}
|
|
45
|
+
async updateJob(jobId, fields) {
|
|
46
|
+
await this.jobRepo.update(jobId, fields);
|
|
47
|
+
}
|
|
48
|
+
async claimAssembly(jobId) {
|
|
49
|
+
const result = await this.jobRepo
|
|
50
|
+
.createQueryBuilder()
|
|
51
|
+
.update(ai_video_job_entity_1.AiVideoJob)
|
|
52
|
+
.set({ status: ai_video_job_entity_1.AiVideoJobStatus.ASSEMBLING_VIDEO })
|
|
53
|
+
.where('id = :id AND status = :status', {
|
|
54
|
+
id: jobId,
|
|
55
|
+
status: ai_video_job_entity_1.AiVideoJobStatus.GENERATING_SCENES,
|
|
56
|
+
})
|
|
57
|
+
.execute();
|
|
58
|
+
return (result.affected ?? 0) > 0;
|
|
59
|
+
}
|
|
60
|
+
async findStuckJobs(timeoutMinutes) {
|
|
61
|
+
return this.jobRepo
|
|
62
|
+
.createQueryBuilder('job')
|
|
63
|
+
.where('job.status = :status', { status: ai_video_job_entity_1.AiVideoJobStatus.GENERATING_SCENES })
|
|
64
|
+
.andWhere("job.updatedAt < NOW() - (:timeout * INTERVAL '1 minute')", { timeout: timeoutMinutes })
|
|
65
|
+
.getMany();
|
|
66
|
+
}
|
|
67
|
+
async getSceneTasks(jobId) {
|
|
68
|
+
return this.taskRepo.find({
|
|
69
|
+
where: { jobId },
|
|
70
|
+
order: { sceneOrder: 'ASC' },
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.AiVideoJobRepository = AiVideoJobRepository;
|
|
75
|
+
exports.AiVideoJobRepository = AiVideoJobRepository = __decorate([
|
|
76
|
+
(0, common_1.Injectable)(),
|
|
77
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
78
|
+
], AiVideoJobRepository);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { AiVideoSceneTask } from '../entities/ai-video-scene-task.entity';
|
|
3
|
+
export declare class AiVideoSceneTaskRepository {
|
|
4
|
+
private dataSource;
|
|
5
|
+
private repo;
|
|
6
|
+
constructor(dataSource: DataSource);
|
|
7
|
+
createTask(data: Partial<AiVideoSceneTask>): Promise<AiVideoSceneTask>;
|
|
8
|
+
createTasks(tasks: Partial<AiVideoSceneTask>[]): Promise<AiVideoSceneTask[]>;
|
|
9
|
+
findById(taskId: string): Promise<AiVideoSceneTask | null>;
|
|
10
|
+
findByJobId(jobId: string): Promise<AiVideoSceneTask[]>;
|
|
11
|
+
updateTask(taskId: string, fields: Partial<AiVideoSceneTask>): Promise<void>;
|
|
12
|
+
appendKlingPollLog(taskId: string, pollResponse: object): Promise<void>;
|
|
13
|
+
countByStatus(jobId: string, status: string): Promise<number>;
|
|
14
|
+
findPendingTasks(jobId: string): Promise<AiVideoSceneTask[]>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
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.AiVideoSceneTaskRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const typeorm_1 = require("typeorm");
|
|
15
|
+
const ai_video_scene_task_entity_1 = require("../entities/ai-video-scene-task.entity");
|
|
16
|
+
let AiVideoSceneTaskRepository = class AiVideoSceneTaskRepository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
this.dataSource = dataSource;
|
|
19
|
+
this.repo = this.dataSource.getRepository(ai_video_scene_task_entity_1.AiVideoSceneTask);
|
|
20
|
+
}
|
|
21
|
+
async createTask(data) {
|
|
22
|
+
return this.repo.save(data);
|
|
23
|
+
}
|
|
24
|
+
async createTasks(tasks) {
|
|
25
|
+
return this.repo.save(tasks);
|
|
26
|
+
}
|
|
27
|
+
async findById(taskId) {
|
|
28
|
+
return this.repo.findOne({ where: { id: taskId } });
|
|
29
|
+
}
|
|
30
|
+
async findByJobId(jobId) {
|
|
31
|
+
return this.repo.find({
|
|
32
|
+
where: { jobId },
|
|
33
|
+
order: { sceneOrder: 'ASC' },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async updateTask(taskId, fields) {
|
|
37
|
+
await this.repo.update(taskId, fields);
|
|
38
|
+
}
|
|
39
|
+
async appendKlingPollLog(taskId, pollResponse) {
|
|
40
|
+
await this.repo
|
|
41
|
+
.createQueryBuilder()
|
|
42
|
+
.update(ai_video_scene_task_entity_1.AiVideoSceneTask)
|
|
43
|
+
.set({ klingPollLog: () => `kling_poll_log || '${JSON.stringify([pollResponse])}'::jsonb` })
|
|
44
|
+
.where('id = :id', { id: taskId })
|
|
45
|
+
.execute();
|
|
46
|
+
}
|
|
47
|
+
async countByStatus(jobId, status) {
|
|
48
|
+
return this.repo.count({ where: { jobId, status: status } });
|
|
49
|
+
}
|
|
50
|
+
async findPendingTasks(jobId) {
|
|
51
|
+
return this.repo
|
|
52
|
+
.createQueryBuilder('task')
|
|
53
|
+
.where('task.jobId = :jobId', { jobId })
|
|
54
|
+
.andWhere('task.status IN (:...statuses)', {
|
|
55
|
+
statuses: ['pending', 'searching_stock', 'submitting_kling', 'generating'],
|
|
56
|
+
})
|
|
57
|
+
.orderBy('task.sceneOrder', 'ASC')
|
|
58
|
+
.getMany();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.AiVideoSceneTaskRepository = AiVideoSceneTaskRepository;
|
|
62
|
+
exports.AiVideoSceneTaskRepository = AiVideoSceneTaskRepository = __decorate([
|
|
63
|
+
(0, common_1.Injectable)(),
|
|
64
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
65
|
+
], AiVideoSceneTaskRepository);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { BaseRepository } from './base.repository';
|
|
3
|
+
import { AssetCategory } from '../entities/asset-category.entity';
|
|
4
|
+
export declare class AssetCategoryRepository extends BaseRepository<AssetCategory> {
|
|
5
|
+
private readonly categoryRepository;
|
|
6
|
+
constructor(categoryRepository: Repository<AssetCategory>);
|
|
7
|
+
findByWorkspace(workspaceId: string): Promise<AssetCategory[]>;
|
|
8
|
+
softDeleteById(id: string): Promise<boolean>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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.AssetCategoryRepository = 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 asset_category_entity_1 = require("../entities/asset-category.entity");
|
|
21
|
+
let AssetCategoryRepository = class AssetCategoryRepository extends base_repository_1.BaseRepository {
|
|
22
|
+
constructor(categoryRepository) {
|
|
23
|
+
super(categoryRepository);
|
|
24
|
+
this.categoryRepository = categoryRepository;
|
|
25
|
+
}
|
|
26
|
+
async findByWorkspace(workspaceId) {
|
|
27
|
+
return this.categoryRepository.find({
|
|
28
|
+
where: { workspaceId },
|
|
29
|
+
order: { createdAt: 'ASC' },
|
|
30
|
+
withDeleted: false,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async softDeleteById(id) {
|
|
34
|
+
const result = await this.categoryRepository.softDelete(id);
|
|
35
|
+
return (result.affected ?? 0) > 0;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.AssetCategoryRepository = AssetCategoryRepository;
|
|
39
|
+
exports.AssetCategoryRepository = AssetCategoryRepository = __decorate([
|
|
40
|
+
(0, common_1.Injectable)(),
|
|
41
|
+
__param(0, (0, typeorm_2.InjectRepository)(asset_category_entity_1.AssetCategory)),
|
|
42
|
+
__metadata("design:paramtypes", [typeorm_1.Repository])
|
|
43
|
+
], AssetCategoryRepository);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { BaseRepository } from './base.repository';
|
|
3
|
+
import { BrandAsset } from '../entities/brand-asset.entity';
|
|
4
|
+
import { BrandAssetRole } from '../entities/brand-asset.entity';
|
|
5
|
+
export declare class BrandAssetRepository extends BaseRepository<BrandAsset> {
|
|
6
|
+
private readonly brandAssetRepository;
|
|
7
|
+
constructor(brandAssetRepository: Repository<BrandAsset>);
|
|
8
|
+
findByBrandKit(brandKitId: string): Promise<BrandAsset[]>;
|
|
9
|
+
findByBrandKitAndRole(brandKitId: string, role: BrandAssetRole): Promise<BrandAsset[]>;
|
|
10
|
+
findOneByBrandKitAndRole(brandKitId: string, role: BrandAssetRole): Promise<BrandAsset | null>;
|
|
11
|
+
deactivate(brandAssetId: string): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
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.BrandAssetRepository = 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 brand_asset_entity_1 = require("../entities/brand-asset.entity");
|
|
21
|
+
let BrandAssetRepository = class BrandAssetRepository extends base_repository_1.BaseRepository {
|
|
22
|
+
constructor(brandAssetRepository) {
|
|
23
|
+
super(brandAssetRepository);
|
|
24
|
+
this.brandAssetRepository = brandAssetRepository;
|
|
25
|
+
}
|
|
26
|
+
async findByBrandKit(brandKitId) {
|
|
27
|
+
return this.brandAssetRepository.find({
|
|
28
|
+
where: { brandKitId, isActive: true },
|
|
29
|
+
relations: ['asset'],
|
|
30
|
+
order: { createdAt: 'ASC' },
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async findByBrandKitAndRole(brandKitId, role) {
|
|
34
|
+
return this.brandAssetRepository.find({
|
|
35
|
+
where: { brandKitId, role, isActive: true },
|
|
36
|
+
relations: ['asset'],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async findOneByBrandKitAndRole(brandKitId, role) {
|
|
40
|
+
return this.brandAssetRepository.findOne({
|
|
41
|
+
where: { brandKitId, role, isActive: true },
|
|
42
|
+
relations: ['asset'],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async deactivate(brandAssetId) {
|
|
46
|
+
await this.brandAssetRepository.delete(brandAssetId);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
exports.BrandAssetRepository = BrandAssetRepository;
|
|
50
|
+
exports.BrandAssetRepository = BrandAssetRepository = __decorate([
|
|
51
|
+
(0, common_1.Injectable)(),
|
|
52
|
+
__param(0, (0, typeorm_2.InjectRepository)(brand_asset_entity_1.BrandAsset)),
|
|
53
|
+
__metadata("design:paramtypes", [typeorm_1.Repository])
|
|
54
|
+
], BrandAssetRepository);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { BaseRepository } from './base.repository';
|
|
3
|
+
import { BrandKit } from '../entities/brand-kit.entity';
|
|
4
|
+
export declare class BrandKitRepository extends BaseRepository<BrandKit> {
|
|
5
|
+
private readonly brandKitRepository;
|
|
6
|
+
constructor(brandKitRepository: Repository<BrandKit>);
|
|
7
|
+
findByWorkspace(workspaceId: string): Promise<BrandKit[]>;
|
|
8
|
+
findActiveByWorkspace(workspaceId: string): Promise<BrandKit | null>;
|
|
9
|
+
deactivateAllForWorkspace(workspaceId: string): Promise<void>;
|
|
10
|
+
findWithAssets(brandKitId: string): Promise<BrandKit | null>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.BrandKitRepository = 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 brand_kit_entity_1 = require("../entities/brand-kit.entity");
|
|
21
|
+
let BrandKitRepository = class BrandKitRepository extends base_repository_1.BaseRepository {
|
|
22
|
+
constructor(brandKitRepository) {
|
|
23
|
+
super(brandKitRepository);
|
|
24
|
+
this.brandKitRepository = brandKitRepository;
|
|
25
|
+
}
|
|
26
|
+
async findByWorkspace(workspaceId) {
|
|
27
|
+
return this.brandKitRepository.find({
|
|
28
|
+
where: { workspaceId },
|
|
29
|
+
order: { createdAt: 'DESC' },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async findActiveByWorkspace(workspaceId) {
|
|
33
|
+
return this.brandKitRepository.findOne({
|
|
34
|
+
where: { workspaceId, isActive: true },
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async deactivateAllForWorkspace(workspaceId) {
|
|
38
|
+
await this.brandKitRepository.update({ workspaceId }, { isActive: false });
|
|
39
|
+
}
|
|
40
|
+
async findWithAssets(brandKitId) {
|
|
41
|
+
return this.brandKitRepository.findOne({
|
|
42
|
+
where: { id: brandKitId },
|
|
43
|
+
relations: ['headingFont', 'bodyFont', 'captionFont'],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.BrandKitRepository = BrandKitRepository;
|
|
48
|
+
exports.BrandKitRepository = BrandKitRepository = __decorate([
|
|
49
|
+
(0, common_1.Injectable)(),
|
|
50
|
+
__param(0, (0, typeorm_2.InjectRepository)(brand_kit_entity_1.BrandKit)),
|
|
51
|
+
__metadata("design:paramtypes", [typeorm_1.Repository])
|
|
52
|
+
], BrandKitRepository);
|
|
@@ -37,3 +37,9 @@ export { SceneRepository } from './scene.repository';
|
|
|
37
37
|
export { ItemRepository } from './item.repository';
|
|
38
38
|
export { RemotionRenderRepository } from './RemotionRenderRepository';
|
|
39
39
|
export { ProjectShareRepository } from './project-share.repository';
|
|
40
|
+
export { BrandKitRepository } from './brand-kit.repository';
|
|
41
|
+
export { BrandAssetRepository } from './brand-asset.repository';
|
|
42
|
+
export { AssetCategoryRepository } from './asset-category.repository';
|
|
43
|
+
export { ProjectBrandOverrideRepository } from './project-brand-override.repository';
|
|
44
|
+
export { AiVideoJobRepository } from './ai-video-job.repository';
|
|
45
|
+
export { AiVideoSceneTaskRepository } from './ai-video-scene-task.repository';
|