clhq-postgres-module 1.1.0-alpha.90

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 (107) hide show
  1. package/dist/config/data-source.d.ts +3 -0
  2. package/dist/config/data-source.js +27 -0
  3. package/dist/config/typeorm.config.d.ts +2 -0
  4. package/dist/config/typeorm.config.js +27 -0
  5. package/dist/entities/ai-usage.entity.d.ts +15 -0
  6. package/dist/entities/ai-usage.entity.js +67 -0
  7. package/dist/entities/asset.entity.d.ts +47 -0
  8. package/dist/entities/asset.entity.js +155 -0
  9. package/dist/entities/auth-session.entity.d.ts +13 -0
  10. package/dist/entities/auth-session.entity.js +61 -0
  11. package/dist/entities/comment.entity.d.ts +16 -0
  12. package/dist/entities/comment.entity.js +72 -0
  13. package/dist/entities/credit-transaction.entity.d.ts +13 -0
  14. package/dist/entities/credit-transaction.entity.js +61 -0
  15. package/dist/entities/editor-project.entity.d.ts +60 -0
  16. package/dist/entities/editor-project.entity.js +173 -0
  17. package/dist/entities/effect.entity.d.ts +20 -0
  18. package/dist/entities/effect.entity.js +74 -0
  19. package/dist/entities/index.d.ts +23 -0
  20. package/dist/entities/index.js +41 -0
  21. package/dist/entities/invite.entity.d.ts +20 -0
  22. package/dist/entities/invite.entity.js +85 -0
  23. package/dist/entities/payment-transaction.entity.d.ts +27 -0
  24. package/dist/entities/payment-transaction.entity.js +91 -0
  25. package/dist/entities/plan.entity.d.ts +19 -0
  26. package/dist/entities/plan.entity.js +79 -0
  27. package/dist/entities/reward-rule.entity.d.ts +13 -0
  28. package/dist/entities/reward-rule.entity.js +63 -0
  29. package/dist/entities/stripe-webhook.entity.d.ts +17 -0
  30. package/dist/entities/stripe-webhook.entity.js +67 -0
  31. package/dist/entities/subscription-plan.entity.d.ts +37 -0
  32. package/dist/entities/subscription-plan.entity.js +160 -0
  33. package/dist/entities/subscription-usage.entity.d.ts +14 -0
  34. package/dist/entities/subscription-usage.entity.js +65 -0
  35. package/dist/entities/user-onboarding.entity.d.ts +10 -0
  36. package/dist/entities/user-onboarding.entity.js +49 -0
  37. package/dist/entities/user-profile.entity.d.ts +39 -0
  38. package/dist/entities/user-profile.entity.js +165 -0
  39. package/dist/entities/user-subscription.entity.d.ts +46 -0
  40. package/dist/entities/user-subscription.entity.js +151 -0
  41. package/dist/entities/user.entity.d.ts +41 -0
  42. package/dist/entities/user.entity.js +163 -0
  43. package/dist/entities/video-render.entity.d.ts +21 -0
  44. package/dist/entities/video-render.entity.js +79 -0
  45. package/dist/entities/video-subtitle.entity.d.ts +28 -0
  46. package/dist/entities/video-subtitle.entity.js +68 -0
  47. package/dist/entities/video-transcode.entity.d.ts +16 -0
  48. package/dist/entities/video-transcode.entity.js +64 -0
  49. package/dist/entities/workspace-member.entity.d.ts +19 -0
  50. package/dist/entities/workspace-member.entity.js +70 -0
  51. package/dist/entities/workspace.entity.d.ts +14 -0
  52. package/dist/entities/workspace.entity.js +63 -0
  53. package/dist/index.d.ts +5 -0
  54. package/dist/index.js +21 -0
  55. package/dist/postgres.module.d.ts +2 -0
  56. package/dist/postgres.module.js +62 -0
  57. package/dist/repositories/ai-usage.repository.d.ts +12 -0
  58. package/dist/repositories/ai-usage.repository.js +56 -0
  59. package/dist/repositories/asset.repository.d.ts +20 -0
  60. package/dist/repositories/asset.repository.js +108 -0
  61. package/dist/repositories/auth-session.repository.d.ts +10 -0
  62. package/dist/repositories/auth-session.repository.js +46 -0
  63. package/dist/repositories/base.repository.d.ts +18 -0
  64. package/dist/repositories/base.repository.js +53 -0
  65. package/dist/repositories/comment.repository.d.ts +14 -0
  66. package/dist/repositories/comment.repository.js +76 -0
  67. package/dist/repositories/credit-transaction.repository.d.ts +9 -0
  68. package/dist/repositories/credit-transaction.repository.js +49 -0
  69. package/dist/repositories/editor-project.repository.d.ts +31 -0
  70. package/dist/repositories/editor-project.repository.js +193 -0
  71. package/dist/repositories/effect.repository.d.ts +10 -0
  72. package/dist/repositories/effect.repository.js +47 -0
  73. package/dist/repositories/index.d.ts +23 -0
  74. package/dist/repositories/index.js +49 -0
  75. package/dist/repositories/invite.repository.d.ts +12 -0
  76. package/dist/repositories/invite.repository.js +60 -0
  77. package/dist/repositories/payment-transaction.repository.d.ts +10 -0
  78. package/dist/repositories/payment-transaction.repository.js +49 -0
  79. package/dist/repositories/plan.repository.d.ts +10 -0
  80. package/dist/repositories/plan.repository.js +48 -0
  81. package/dist/repositories/repository.module.d.ts +2 -0
  82. package/dist/repositories/repository.module.js +71 -0
  83. package/dist/repositories/reward-rule.repository.d.ts +10 -0
  84. package/dist/repositories/reward-rule.repository.js +48 -0
  85. package/dist/repositories/stripe-webhook.repository.d.ts +10 -0
  86. package/dist/repositories/stripe-webhook.repository.js +53 -0
  87. package/dist/repositories/subscription-plan.repository.d.ts +15 -0
  88. package/dist/repositories/subscription-plan.repository.js +77 -0
  89. package/dist/repositories/subscription-usage.repository.d.ts +9 -0
  90. package/dist/repositories/subscription-usage.repository.js +50 -0
  91. package/dist/repositories/user-onboarding.repository.d.ts +10 -0
  92. package/dist/repositories/user-onboarding.repository.js +56 -0
  93. package/dist/repositories/user-profile.repository.d.ts +9 -0
  94. package/dist/repositories/user-profile.repository.js +41 -0
  95. package/dist/repositories/user-subscription.repository.d.ts +16 -0
  96. package/dist/repositories/user-subscription.repository.js +90 -0
  97. package/dist/repositories/user.repository.d.ts +17 -0
  98. package/dist/repositories/user.repository.js +89 -0
  99. package/dist/repositories/video-render.repository.d.ts +28 -0
  100. package/dist/repositories/video-render.repository.js +63 -0
  101. package/dist/repositories/video-transcode.repository.d.ts +23 -0
  102. package/dist/repositories/video-transcode.repository.js +52 -0
  103. package/dist/repositories/workspace-member.repository.d.ts +13 -0
  104. package/dist/repositories/workspace-member.repository.js +79 -0
  105. package/dist/repositories/workspace.repository.d.ts +13 -0
  106. package/dist/repositories/workspace.repository.js +64 -0
  107. package/package.json +59 -0
@@ -0,0 +1,46 @@
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.AuthSessionRepository = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const auth_session_entity_1 = require("../entities/auth-session.entity");
20
+ const base_repository_1 = require("./base.repository");
21
+ let AuthSessionRepository = class AuthSessionRepository extends base_repository_1.BaseRepository {
22
+ constructor(sessionRepository) {
23
+ super(sessionRepository);
24
+ this.sessionRepository = sessionRepository;
25
+ }
26
+ async findByToken(token) {
27
+ return this.sessionRepository.findOne({
28
+ where: { token, isActive: true },
29
+ });
30
+ }
31
+ async findActiveByUserId(userId) {
32
+ return this.sessionRepository.find({
33
+ where: { userId, isActive: true },
34
+ order: { createdAt: 'DESC' },
35
+ });
36
+ }
37
+ async invalidateSession(id) {
38
+ await this.sessionRepository.update(id, { isActive: false });
39
+ }
40
+ };
41
+ exports.AuthSessionRepository = AuthSessionRepository;
42
+ exports.AuthSessionRepository = AuthSessionRepository = __decorate([
43
+ (0, common_1.Injectable)(),
44
+ __param(0, (0, typeorm_1.InjectRepository)(auth_session_entity_1.AuthSession)),
45
+ __metadata("design:paramtypes", [typeorm_2.Repository])
46
+ ], AuthSessionRepository);
@@ -0,0 +1,18 @@
1
+ import { Repository, FindOptionsWhere, FindManyOptions, DeepPartial } from 'typeorm';
2
+ export declare abstract class BaseRepository<T> {
3
+ protected repository: Repository<T>;
4
+ constructor(repository: Repository<T>);
5
+ findById(id: string): Promise<T | null>;
6
+ findAll(options?: FindManyOptions<T>): Promise<T[]>;
7
+ findOne(where: FindOptionsWhere<T>): Promise<T | null>;
8
+ findBy(where: FindOptionsWhere<T>): Promise<T[]>;
9
+ create(data: DeepPartial<T>): Promise<T>;
10
+ update(id: string, data: DeepPartial<T>): Promise<T | null>;
11
+ delete(id: string): Promise<boolean>;
12
+ softDelete(id: string): Promise<boolean>;
13
+ count(where?: FindOptionsWhere<T>): Promise<number>;
14
+ exists(where: FindOptionsWhere<T>): Promise<boolean>;
15
+ save(entity: DeepPartial<T>): Promise<T>;
16
+ saveMany(entities: DeepPartial<T>[]): Promise<T[]>;
17
+ query(sql: string, parameters?: any[]): Promise<any>;
18
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = void 0;
4
+ class BaseRepository {
5
+ constructor(repository) {
6
+ this.repository = repository;
7
+ }
8
+ async findById(id) {
9
+ return this.repository.findOne({ where: { id } });
10
+ }
11
+ async findAll(options) {
12
+ return this.repository.find(options);
13
+ }
14
+ async findOne(where) {
15
+ return this.repository.findOne({ where });
16
+ }
17
+ async findBy(where) {
18
+ return this.repository.findBy(where);
19
+ }
20
+ async create(data) {
21
+ const entity = this.repository.create(data);
22
+ return this.repository.save(entity);
23
+ }
24
+ async update(id, data) {
25
+ await this.repository.update(id, data);
26
+ return this.findById(id);
27
+ }
28
+ async delete(id) {
29
+ const result = await this.repository.delete(id);
30
+ return (result.affected ?? 0) > 0;
31
+ }
32
+ async softDelete(id) {
33
+ const result = await this.repository.softDelete(id);
34
+ return (result.affected ?? 0) > 0;
35
+ }
36
+ async count(where) {
37
+ return this.repository.count({ where });
38
+ }
39
+ async exists(where) {
40
+ const count = await this.repository.count({ where });
41
+ return count > 0;
42
+ }
43
+ async save(entity) {
44
+ return this.repository.save(entity);
45
+ }
46
+ async saveMany(entities) {
47
+ return this.repository.save(entities);
48
+ }
49
+ async query(sql, parameters) {
50
+ return this.repository.query(sql, parameters);
51
+ }
52
+ }
53
+ exports.BaseRepository = BaseRepository;
@@ -0,0 +1,14 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Comment } from '../entities/comment.entity';
4
+ export declare class CommentRepository extends BaseRepository<Comment> {
5
+ private readonly commentRepository;
6
+ constructor(commentRepository: Repository<Comment>);
7
+ findByProject(projectId: string): Promise<Comment[]>;
8
+ findByProjectPaginated(projectId: string, page?: number, limit?: number): Promise<Comment[]>;
9
+ findReplies(parentId: string): Promise<Comment[]>;
10
+ toggleResolved(commentId: string): Promise<void>;
11
+ deleteComment(commentId: string): Promise<void>;
12
+ findByUserId(userId: string): Promise<Comment[]>;
13
+ findByUser(userId: string): Promise<Comment[]>;
14
+ }
@@ -0,0 +1,76 @@
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.CommentRepository = 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 comment_entity_1 = require("../entities/comment.entity");
21
+ let CommentRepository = class CommentRepository extends base_repository_1.BaseRepository {
22
+ constructor(commentRepository) {
23
+ super(commentRepository);
24
+ this.commentRepository = commentRepository;
25
+ }
26
+ async findByProject(projectId) {
27
+ return this.commentRepository.find({
28
+ where: { projectId },
29
+ relations: ['user'],
30
+ order: { createdAt: 'DESC' }
31
+ });
32
+ }
33
+ async findByProjectPaginated(projectId, page = 1, limit = 20) {
34
+ return this.commentRepository.find({
35
+ where: {
36
+ projectId,
37
+ },
38
+ relations: ['user'],
39
+ order: { createdAt: 'DESC' },
40
+ skip: (page - 1) * limit,
41
+ take: limit,
42
+ });
43
+ }
44
+ async findReplies(parentId) {
45
+ return this.commentRepository.find({
46
+ where: { parentId },
47
+ relations: ['user'],
48
+ order: { createdAt: 'ASC' }
49
+ });
50
+ }
51
+ async toggleResolved(commentId) {
52
+ const comment = await this.commentRepository.findOne({ where: { id: commentId } });
53
+ if (comment) {
54
+ comment.isResolved = !comment.isResolved;
55
+ await this.commentRepository.save(comment);
56
+ }
57
+ }
58
+ async deleteComment(commentId) {
59
+ await this.commentRepository.delete(commentId);
60
+ }
61
+ async findByUserId(userId) {
62
+ return this.commentRepository.find({
63
+ where: { userId },
64
+ order: { createdAt: 'DESC' }
65
+ });
66
+ }
67
+ async findByUser(userId) {
68
+ return this.findByUserId(userId);
69
+ }
70
+ };
71
+ exports.CommentRepository = CommentRepository;
72
+ exports.CommentRepository = CommentRepository = __decorate([
73
+ (0, common_1.Injectable)(),
74
+ __param(0, (0, typeorm_2.InjectRepository)(comment_entity_1.Comment)),
75
+ __metadata("design:paramtypes", [typeorm_1.Repository])
76
+ ], CommentRepository);
@@ -0,0 +1,9 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { CreditTransaction } from '../entities/credit-transaction.entity';
4
+ export declare class CreditTransactionRepository extends BaseRepository<CreditTransaction> {
5
+ constructor(repository: Repository<CreditTransaction>);
6
+ findByUserId(userId: string): Promise<CreditTransaction[]>;
7
+ findByType(type: string): Promise<CreditTransaction[]>;
8
+ getUserBalance(userId: string): Promise<number>;
9
+ }
@@ -0,0 +1,49 @@
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.CreditTransactionRepository = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const base_repository_1 = require("./base.repository");
20
+ const credit_transaction_entity_1 = require("../entities/credit-transaction.entity");
21
+ let CreditTransactionRepository = class CreditTransactionRepository extends base_repository_1.BaseRepository {
22
+ constructor(repository) {
23
+ super(repository);
24
+ }
25
+ async findByUserId(userId) {
26
+ return this.repository.find({
27
+ where: { userId },
28
+ order: { createdAt: 'DESC' },
29
+ });
30
+ }
31
+ async findByType(type) {
32
+ return this.repository.find({
33
+ where: { type },
34
+ order: { createdAt: 'DESC' },
35
+ });
36
+ }
37
+ async getUserBalance(userId) {
38
+ const transactions = await this.findByUserId(userId);
39
+ return transactions.reduce((sum, t) => {
40
+ return t.type === 'usage' ? sum - Number(t.amount) : sum + Number(t.amount);
41
+ }, 0);
42
+ }
43
+ };
44
+ exports.CreditTransactionRepository = CreditTransactionRepository;
45
+ exports.CreditTransactionRepository = CreditTransactionRepository = __decorate([
46
+ (0, common_1.Injectable)(),
47
+ __param(0, (0, typeorm_1.InjectRepository)(credit_transaction_entity_1.CreditTransaction)),
48
+ __metadata("design:paramtypes", [typeorm_2.Repository])
49
+ ], CreditTransactionRepository);
@@ -0,0 +1,31 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { EditorProject, ProjectStatus } from '../entities/editor-project.entity';
4
+ export declare class EditorProjectRepository extends BaseRepository<EditorProject> {
5
+ private readonly projectRepository;
6
+ constructor(projectRepository: Repository<EditorProject>);
7
+ findByWorkspace(workspaceId: string): Promise<EditorProject[]>;
8
+ findByOwner(ownerId: string): Promise<EditorProject[]>;
9
+ findByStatus(workspaceId: string, status: ProjectStatus): Promise<EditorProject[]>;
10
+ findRecent(ownerId: string, limit?: number): Promise<EditorProject[]>;
11
+ findFavorites(ownerId: string): Promise<EditorProject[]>;
12
+ findTemplates(): Promise<EditorProject[]>;
13
+ findPremiumTemplates(): Promise<EditorProject[]>;
14
+ updateLastOpened(projectId: string): Promise<void>;
15
+ toggleFavorite(projectId: string): Promise<void>;
16
+ incrementTemplateUsage(projectId: string): Promise<void>;
17
+ findByTemplateCategory(category: string): Promise<EditorProject[]>;
18
+ findByTag(tag: string): Promise<EditorProject[]>;
19
+ getAllTagsByOwner(ownerId: string): Promise<string[]>;
20
+ findByVisibility(visibility: string): Promise<EditorProject[]>;
21
+ findByCollaboratorId(collaboratorId: string): Promise<EditorProject[]>;
22
+ findByTitle(title: string): Promise<EditorProject[]>;
23
+ updateThumbnailUrl(projectId: string, thumbnailUrl: string): Promise<void>;
24
+ duplicateProject(projectId: string, newTitle?: string): Promise<EditorProject>;
25
+ countByOwner(ownerId: string): Promise<number>;
26
+ findByOwnerId(ownerId: string): Promise<EditorProject[]>;
27
+ findByUserAndWorkspace(ownerId: string, workspaceId: string): Promise<EditorProject[]>;
28
+ findByWorkspaceId(workspaceId: string): Promise<EditorProject[]>;
29
+ findRecentlyOpened(ownerId: string, limit?: number): Promise<EditorProject[]>;
30
+ findByGlobalStatus(status: ProjectStatus): Promise<EditorProject[]>;
31
+ }
@@ -0,0 +1,193 @@
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.EditorProjectRepository = 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 editor_project_entity_1 = require("../entities/editor-project.entity");
21
+ let EditorProjectRepository = class EditorProjectRepository extends base_repository_1.BaseRepository {
22
+ constructor(projectRepository) {
23
+ super(projectRepository);
24
+ this.projectRepository = projectRepository;
25
+ }
26
+ async findByWorkspace(workspaceId) {
27
+ return this.projectRepository.find({
28
+ where: { workspaceId },
29
+ order: { lastOpenedAt: 'DESC' }
30
+ });
31
+ }
32
+ async findByOwner(ownerId) {
33
+ return this.projectRepository.find({
34
+ where: { ownerId },
35
+ order: { lastOpenedAt: 'DESC' }
36
+ });
37
+ }
38
+ async findByStatus(workspaceId, status) {
39
+ return this.projectRepository.find({
40
+ where: {
41
+ workspaceId,
42
+ status,
43
+ },
44
+ order: { updatedAt: 'DESC' }
45
+ });
46
+ }
47
+ async findRecent(ownerId, limit = 10) {
48
+ return this.projectRepository.find({
49
+ where: {
50
+ ownerId,
51
+ },
52
+ order: { lastOpenedAt: 'DESC' },
53
+ take: limit,
54
+ });
55
+ }
56
+ async findFavorites(ownerId) {
57
+ return this.projectRepository.find({
58
+ where: { ownerId, isFavorite: true },
59
+ order: { lastOpenedAt: 'DESC' }
60
+ });
61
+ }
62
+ async findTemplates() {
63
+ return this.projectRepository.find({
64
+ where: { isTemplate: true },
65
+ order: { templateUsageCount: 'DESC' }
66
+ });
67
+ }
68
+ async findPremiumTemplates() {
69
+ return this.projectRepository.find({
70
+ where: {
71
+ isTemplate: true,
72
+ isPremiumTemplate: true,
73
+ },
74
+ order: { templateUsageCount: 'DESC' }
75
+ });
76
+ }
77
+ async updateLastOpened(projectId) {
78
+ await this.projectRepository.update(projectId, {
79
+ lastOpenedAt: new Date(),
80
+ });
81
+ }
82
+ async toggleFavorite(projectId) {
83
+ const project = await this.projectRepository.findOne({ where: { id: projectId } });
84
+ if (project) {
85
+ project.isFavorite = !project.isFavorite;
86
+ await this.projectRepository.save(project);
87
+ }
88
+ }
89
+ async incrementTemplateUsage(projectId) {
90
+ await this.projectRepository
91
+ .createQueryBuilder()
92
+ .update()
93
+ .set({ templateUsageCount: () => 'templateUsageCount + 1' })
94
+ .where('id = :projectId', { projectId })
95
+ .execute();
96
+ }
97
+ async findByTemplateCategory(category) {
98
+ return this.projectRepository.find({
99
+ where: {
100
+ isTemplate: true,
101
+ templateCategory: category,
102
+ },
103
+ order: { templateUsageCount: 'DESC' }
104
+ });
105
+ }
106
+ async findByTag(tag) {
107
+ return this.projectRepository
108
+ .createQueryBuilder('project')
109
+ .where(':tag = ANY(project.tags)', { tag })
110
+ .orderBy('project.updatedAt', 'DESC')
111
+ .getMany();
112
+ }
113
+ async getAllTagsByOwner(ownerId) {
114
+ const result = await this.projectRepository
115
+ .createQueryBuilder('project')
116
+ .select('DISTINCT unnest(project.tags)', 'tag')
117
+ .where('project.ownerId = :ownerId', { ownerId })
118
+ .getRawMany();
119
+ return result.map(r => r.tag).filter(Boolean);
120
+ }
121
+ async findByVisibility(visibility) {
122
+ return this.projectRepository.find({
123
+ where: { visibility: visibility },
124
+ order: { updatedAt: 'DESC' }
125
+ });
126
+ }
127
+ async findByCollaboratorId(collaboratorId) {
128
+ return this.projectRepository
129
+ .createQueryBuilder('project')
130
+ .where(':collaboratorId = ANY(project.collaboratorIds)', { collaboratorId })
131
+ .orderBy('project.updatedAt', 'DESC')
132
+ .getMany();
133
+ }
134
+ async findByTitle(title) {
135
+ return this.projectRepository
136
+ .createQueryBuilder('project')
137
+ .where('LOWER(project.title) LIKE LOWER(:title)', { title: `%${title}%` })
138
+ .orderBy('project.updatedAt', 'DESC')
139
+ .getMany();
140
+ }
141
+ async updateThumbnailUrl(projectId, thumbnailUrl) {
142
+ await this.projectRepository.update(projectId, {
143
+ thumbnailUrl,
144
+ updatedAt: new Date(),
145
+ });
146
+ }
147
+ async duplicateProject(projectId, newTitle) {
148
+ const original = await this.findById(projectId);
149
+ if (!original) {
150
+ throw new Error(`Project ${projectId} not found`);
151
+ }
152
+ const { id, createdAt, updatedAt, lastOpenedAt, ...projectData } = original;
153
+ const duplicate = this.projectRepository.create({
154
+ ...projectData,
155
+ title: newTitle || `${original.title} (Copy)`,
156
+ isFavorite: false,
157
+ templateUsageCount: 0,
158
+ });
159
+ return this.projectRepository.save(duplicate);
160
+ }
161
+ async countByOwner(ownerId) {
162
+ return this.projectRepository.count({
163
+ where: { ownerId }
164
+ });
165
+ }
166
+ async findByOwnerId(ownerId) {
167
+ return this.findByOwner(ownerId);
168
+ }
169
+ async findByUserAndWorkspace(ownerId, workspaceId) {
170
+ return this.projectRepository.find({
171
+ where: { ownerId, workspaceId },
172
+ order: { lastOpenedAt: 'DESC' }
173
+ });
174
+ }
175
+ async findByWorkspaceId(workspaceId) {
176
+ return this.findByWorkspace(workspaceId);
177
+ }
178
+ async findRecentlyOpened(ownerId, limit = 10) {
179
+ return this.findRecent(ownerId, limit);
180
+ }
181
+ async findByGlobalStatus(status) {
182
+ return this.projectRepository.find({
183
+ where: { status },
184
+ order: { updatedAt: 'DESC' }
185
+ });
186
+ }
187
+ };
188
+ exports.EditorProjectRepository = EditorProjectRepository;
189
+ exports.EditorProjectRepository = EditorProjectRepository = __decorate([
190
+ (0, common_1.Injectable)(),
191
+ __param(0, (0, typeorm_2.InjectRepository)(editor_project_entity_1.EditorProject)),
192
+ __metadata("design:paramtypes", [typeorm_1.Repository])
193
+ ], EditorProjectRepository);
@@ -0,0 +1,10 @@
1
+ import { Repository } from 'typeorm';
2
+ import { Effect, EffectType } from '../entities/effect.entity';
3
+ import { BaseRepository } from './base.repository';
4
+ export declare class EffectRepository extends BaseRepository<Effect> {
5
+ private readonly effectRepository;
6
+ constructor(effectRepository: Repository<Effect>);
7
+ findByType(effectType: EffectType): Promise<Effect[]>;
8
+ findActiveEffects(): Promise<Effect[]>;
9
+ incrementUsage(id: string): Promise<void>;
10
+ }
@@ -0,0 +1,47 @@
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.EffectRepository = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const effect_entity_1 = require("../entities/effect.entity");
20
+ const base_repository_1 = require("./base.repository");
21
+ let EffectRepository = class EffectRepository extends base_repository_1.BaseRepository {
22
+ constructor(effectRepository) {
23
+ super(effectRepository);
24
+ this.effectRepository = effectRepository;
25
+ }
26
+ async findByType(effectType) {
27
+ return this.effectRepository.find({
28
+ where: { effectType, isActive: true },
29
+ order: { usageCount: 'DESC' },
30
+ });
31
+ }
32
+ async findActiveEffects() {
33
+ return this.effectRepository.find({
34
+ where: { isActive: true },
35
+ order: { usageCount: 'DESC' },
36
+ });
37
+ }
38
+ async incrementUsage(id) {
39
+ await this.effectRepository.increment({ id }, 'usageCount', 1);
40
+ }
41
+ };
42
+ exports.EffectRepository = EffectRepository;
43
+ exports.EffectRepository = EffectRepository = __decorate([
44
+ (0, common_1.Injectable)(),
45
+ __param(0, (0, typeorm_1.InjectRepository)(effect_entity_1.Effect)),
46
+ __metadata("design:paramtypes", [typeorm_2.Repository])
47
+ ], EffectRepository);
@@ -0,0 +1,23 @@
1
+ export { BaseRepository } from './base.repository';
2
+ export { UserRepository } from './user.repository';
3
+ export { UserProfileRepository } from './user-profile.repository';
4
+ export { UserOnboardingRepository } from './user-onboarding.repository';
5
+ export { AuthSessionRepository } from './auth-session.repository';
6
+ export { WorkspaceRepository } from './workspace.repository';
7
+ export { WorkspaceMemberRepository } from './workspace-member.repository';
8
+ export { InviteRepository } from './invite.repository';
9
+ export { EditorProjectRepository } from './editor-project.repository';
10
+ export { CommentRepository } from './comment.repository';
11
+ export { SubscriptionPlanRepository } from './subscription-plan.repository';
12
+ export { PlanRepository } from './plan.repository';
13
+ export { UserSubscriptionRepository } from './user-subscription.repository';
14
+ export { SubscriptionUsageRepository } from './subscription-usage.repository';
15
+ export { PaymentTransactionRepository } from './payment-transaction.repository';
16
+ export { StripeWebhookRepository } from './stripe-webhook.repository';
17
+ export { CreditTransactionRepository } from './credit-transaction.repository';
18
+ export { RewardRuleRepository } from './reward-rule.repository';
19
+ export { AiUsageRepository } from './ai-usage.repository';
20
+ export { AssetRepository } from './asset.repository';
21
+ export { EffectRepository } from './effect.repository';
22
+ export { VideoTranscodeRepository } from './video-transcode.repository';
23
+ export { VideoRenderRepository } from './video-render.repository';
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VideoRenderRepository = exports.VideoTranscodeRepository = exports.EffectRepository = exports.AssetRepository = exports.AiUsageRepository = 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
+ var base_repository_1 = require("./base.repository");
5
+ Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return base_repository_1.BaseRepository; } });
6
+ var user_repository_1 = require("./user.repository");
7
+ Object.defineProperty(exports, "UserRepository", { enumerable: true, get: function () { return user_repository_1.UserRepository; } });
8
+ var user_profile_repository_1 = require("./user-profile.repository");
9
+ Object.defineProperty(exports, "UserProfileRepository", { enumerable: true, get: function () { return user_profile_repository_1.UserProfileRepository; } });
10
+ var user_onboarding_repository_1 = require("./user-onboarding.repository");
11
+ Object.defineProperty(exports, "UserOnboardingRepository", { enumerable: true, get: function () { return user_onboarding_repository_1.UserOnboardingRepository; } });
12
+ var auth_session_repository_1 = require("./auth-session.repository");
13
+ Object.defineProperty(exports, "AuthSessionRepository", { enumerable: true, get: function () { return auth_session_repository_1.AuthSessionRepository; } });
14
+ var workspace_repository_1 = require("./workspace.repository");
15
+ Object.defineProperty(exports, "WorkspaceRepository", { enumerable: true, get: function () { return workspace_repository_1.WorkspaceRepository; } });
16
+ var workspace_member_repository_1 = require("./workspace-member.repository");
17
+ Object.defineProperty(exports, "WorkspaceMemberRepository", { enumerable: true, get: function () { return workspace_member_repository_1.WorkspaceMemberRepository; } });
18
+ var invite_repository_1 = require("./invite.repository");
19
+ Object.defineProperty(exports, "InviteRepository", { enumerable: true, get: function () { return invite_repository_1.InviteRepository; } });
20
+ var editor_project_repository_1 = require("./editor-project.repository");
21
+ Object.defineProperty(exports, "EditorProjectRepository", { enumerable: true, get: function () { return editor_project_repository_1.EditorProjectRepository; } });
22
+ var comment_repository_1 = require("./comment.repository");
23
+ Object.defineProperty(exports, "CommentRepository", { enumerable: true, get: function () { return comment_repository_1.CommentRepository; } });
24
+ var subscription_plan_repository_1 = require("./subscription-plan.repository");
25
+ Object.defineProperty(exports, "SubscriptionPlanRepository", { enumerable: true, get: function () { return subscription_plan_repository_1.SubscriptionPlanRepository; } });
26
+ var plan_repository_1 = require("./plan.repository");
27
+ Object.defineProperty(exports, "PlanRepository", { enumerable: true, get: function () { return plan_repository_1.PlanRepository; } });
28
+ var user_subscription_repository_1 = require("./user-subscription.repository");
29
+ Object.defineProperty(exports, "UserSubscriptionRepository", { enumerable: true, get: function () { return user_subscription_repository_1.UserSubscriptionRepository; } });
30
+ var subscription_usage_repository_1 = require("./subscription-usage.repository");
31
+ Object.defineProperty(exports, "SubscriptionUsageRepository", { enumerable: true, get: function () { return subscription_usage_repository_1.SubscriptionUsageRepository; } });
32
+ var payment_transaction_repository_1 = require("./payment-transaction.repository");
33
+ Object.defineProperty(exports, "PaymentTransactionRepository", { enumerable: true, get: function () { return payment_transaction_repository_1.PaymentTransactionRepository; } });
34
+ var stripe_webhook_repository_1 = require("./stripe-webhook.repository");
35
+ Object.defineProperty(exports, "StripeWebhookRepository", { enumerable: true, get: function () { return stripe_webhook_repository_1.StripeWebhookRepository; } });
36
+ var credit_transaction_repository_1 = require("./credit-transaction.repository");
37
+ Object.defineProperty(exports, "CreditTransactionRepository", { enumerable: true, get: function () { return credit_transaction_repository_1.CreditTransactionRepository; } });
38
+ var reward_rule_repository_1 = require("./reward-rule.repository");
39
+ Object.defineProperty(exports, "RewardRuleRepository", { enumerable: true, get: function () { return reward_rule_repository_1.RewardRuleRepository; } });
40
+ var ai_usage_repository_1 = require("./ai-usage.repository");
41
+ Object.defineProperty(exports, "AiUsageRepository", { enumerable: true, get: function () { return ai_usage_repository_1.AiUsageRepository; } });
42
+ var asset_repository_1 = require("./asset.repository");
43
+ Object.defineProperty(exports, "AssetRepository", { enumerable: true, get: function () { return asset_repository_1.AssetRepository; } });
44
+ var effect_repository_1 = require("./effect.repository");
45
+ Object.defineProperty(exports, "EffectRepository", { enumerable: true, get: function () { return effect_repository_1.EffectRepository; } });
46
+ var video_transcode_repository_1 = require("./video-transcode.repository");
47
+ Object.defineProperty(exports, "VideoTranscodeRepository", { enumerable: true, get: function () { return video_transcode_repository_1.VideoTranscodeRepository; } });
48
+ var video_render_repository_1 = require("./video-render.repository");
49
+ Object.defineProperty(exports, "VideoRenderRepository", { enumerable: true, get: function () { return video_render_repository_1.VideoRenderRepository; } });
@@ -0,0 +1,12 @@
1
+ import { Repository } from 'typeorm';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Invite } from '../entities/invite.entity';
4
+ export declare class InviteRepository extends BaseRepository<Invite> {
5
+ constructor(repository: Repository<Invite>);
6
+ findByToken(token: string): Promise<Invite | null>;
7
+ findByEmail(email: string): Promise<Invite[]>;
8
+ findByWorkspaceId(workspaceId: string): Promise<Invite[]>;
9
+ findPending(): Promise<Invite[]>;
10
+ markExpired(id: string): Promise<void>;
11
+ acceptInvite(token: string): Promise<void>;
12
+ }