clhq-dynamodb-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 (130) hide show
  1. package/dist/app.module.d.ts +2 -0
  2. package/dist/app.module.js +88 -0
  3. package/dist/common/enums/index.d.ts +1 -0
  4. package/dist/common/enums/index.js +17 -0
  5. package/dist/common/enums/project-enums.d.ts +13 -0
  6. package/dist/common/enums/project-enums.js +18 -0
  7. package/dist/common/user.controller.d.ts +12 -0
  8. package/dist/common/user.controller.js +102 -0
  9. package/dist/dbservice/dynamodb-base.service.d.ts +23 -0
  10. package/dist/dbservice/dynamodb-base.service.js +105 -0
  11. package/dist/dbservice/index.d.ts +4 -0
  12. package/dist/dbservice/index.js +20 -0
  13. package/dist/dbservice/projects.service.d.ts +5 -0
  14. package/dist/dbservice/projects.service.js +25 -0
  15. package/dist/dbservice/users.service.d.ts +5 -0
  16. package/dist/dbservice/users.service.js +25 -0
  17. package/dist/dbservice/workspaces.service.d.ts +5 -0
  18. package/dist/dbservice/workspaces.service.js +25 -0
  19. package/dist/entities/ai-usage.entity.d.ts +16 -0
  20. package/dist/entities/ai-usage.entity.js +71 -0
  21. package/dist/entities/asset.entity.d.ts +59 -0
  22. package/dist/entities/asset.entity.js +185 -0
  23. package/dist/entities/auth.entity.d.ts +10 -0
  24. package/dist/entities/auth.entity.js +9 -0
  25. package/dist/entities/clip-effect.entity.d.ts +9 -0
  26. package/dist/entities/clip-effect.entity.js +53 -0
  27. package/dist/entities/clip.entity.d.ts +44 -0
  28. package/dist/entities/clip.entity.js +114 -0
  29. package/dist/entities/comment.entity.d.ts +18 -0
  30. package/dist/entities/comment.entity.js +83 -0
  31. package/dist/entities/common.entity.d.ts +21 -0
  32. package/dist/entities/common.entity.js +27 -0
  33. package/dist/entities/credit-transaction.entity.d.ts +15 -0
  34. package/dist/entities/credit-transaction.entity.js +66 -0
  35. package/dist/entities/editor-project.entity.d.ts +48 -0
  36. package/dist/entities/editor-project.entity.js +226 -0
  37. package/dist/entities/effect.entity.d.ts +22 -0
  38. package/dist/entities/effect.entity.js +87 -0
  39. package/dist/entities/index.d.ts +28 -0
  40. package/dist/entities/index.js +44 -0
  41. package/dist/entities/invite.entity.d.ts +17 -0
  42. package/dist/entities/invite.entity.js +73 -0
  43. package/dist/entities/keyframe.entity.d.ts +18 -0
  44. package/dist/entities/keyframe.entity.js +73 -0
  45. package/dist/entities/payment-transaction.entity.d.ts +40 -0
  46. package/dist/entities/payment-transaction.entity.js +138 -0
  47. package/dist/entities/payment.entity.d.ts +24 -0
  48. package/dist/entities/payment.entity.js +89 -0
  49. package/dist/entities/plan.entity.d.ts +13 -0
  50. package/dist/entities/plan.entity.js +77 -0
  51. package/dist/entities/project-version.entity.d.ts +11 -0
  52. package/dist/entities/project-version.entity.js +66 -0
  53. package/dist/entities/project.entity.d.ts +48 -0
  54. package/dist/entities/project.entity.js +175 -0
  55. package/dist/entities/reward-rule.entity.d.ts +15 -0
  56. package/dist/entities/reward-rule.entity.js +67 -0
  57. package/dist/entities/stripe-webhook-event.entity.d.ts +9 -0
  58. package/dist/entities/stripe-webhook-event.entity.js +54 -0
  59. package/dist/entities/subscription-plan.entity.d.ts +37 -0
  60. package/dist/entities/subscription-plan.entity.js +197 -0
  61. package/dist/entities/subscription-usage.entity.d.ts +15 -0
  62. package/dist/entities/subscription-usage.entity.js +83 -0
  63. package/dist/entities/timeline.entity.d.ts +8 -0
  64. package/dist/entities/timeline.entity.js +48 -0
  65. package/dist/entities/track.entity.d.ts +20 -0
  66. package/dist/entities/track.entity.js +81 -0
  67. package/dist/entities/user-onboarding-response.entity.d.ts +8 -0
  68. package/dist/entities/user-onboarding-response.entity.js +48 -0
  69. package/dist/entities/user-profile.entity.d.ts +51 -0
  70. package/dist/entities/user-profile.entity.js +200 -0
  71. package/dist/entities/user-subscription.entity.d.ts +44 -0
  72. package/dist/entities/user-subscription.entity.js +160 -0
  73. package/dist/entities/user.entity.d.ts +32 -0
  74. package/dist/entities/user.entity.js +133 -0
  75. package/dist/entities/workspace-member.entity.d.ts +8 -0
  76. package/dist/entities/workspace-member.entity.js +49 -0
  77. package/dist/entities/workspace.entity.d.ts +9 -0
  78. package/dist/entities/workspace.entity.js +54 -0
  79. package/dist/index.d.ts +4 -0
  80. package/dist/index.js +22 -0
  81. package/dist/main.d.ts +1 -0
  82. package/dist/main.js +10 -0
  83. package/dist/repositories/asset.repository.d.ts +15 -0
  84. package/dist/repositories/asset.repository.js +101 -0
  85. package/dist/repositories/base.repository.d.ts +31 -0
  86. package/dist/repositories/base.repository.js +172 -0
  87. package/dist/repositories/clip-effect.repository.d.ts +9 -0
  88. package/dist/repositories/clip-effect.repository.js +49 -0
  89. package/dist/repositories/clip.repository.d.ts +13 -0
  90. package/dist/repositories/clip.repository.js +101 -0
  91. package/dist/repositories/comment.repository.d.ts +12 -0
  92. package/dist/repositories/comment.repository.js +92 -0
  93. package/dist/repositories/editor-project.repository.d.ts +26 -0
  94. package/dist/repositories/editor-project.repository.js +107 -0
  95. package/dist/repositories/effect.repository.d.ts +10 -0
  96. package/dist/repositories/effect.repository.js +59 -0
  97. package/dist/repositories/index.d.ts +21 -0
  98. package/dist/repositories/index.js +37 -0
  99. package/dist/repositories/keyframe.repository.d.ts +9 -0
  100. package/dist/repositories/keyframe.repository.js +49 -0
  101. package/dist/repositories/payment-transaction.repository.d.ts +13 -0
  102. package/dist/repositories/payment-transaction.repository.js +123 -0
  103. package/dist/repositories/project-version.repository.d.ts +9 -0
  104. package/dist/repositories/project-version.repository.js +51 -0
  105. package/dist/repositories/project.repository.d.ts +17 -0
  106. package/dist/repositories/project.repository.js +132 -0
  107. package/dist/repositories/reward-rule.repository.d.ts +13 -0
  108. package/dist/repositories/reward-rule.repository.js +84 -0
  109. package/dist/repositories/subscription-plan.repository.d.ts +11 -0
  110. package/dist/repositories/subscription-plan.repository.js +49 -0
  111. package/dist/repositories/subscription-usage.repository.d.ts +12 -0
  112. package/dist/repositories/subscription-usage.repository.js +68 -0
  113. package/dist/repositories/timeline.repository.d.ts +9 -0
  114. package/dist/repositories/timeline.repository.js +53 -0
  115. package/dist/repositories/track.repository.d.ts +13 -0
  116. package/dist/repositories/track.repository.js +61 -0
  117. package/dist/repositories/user-onboarding-response.repository.d.ts +11 -0
  118. package/dist/repositories/user-onboarding-response.repository.js +58 -0
  119. package/dist/repositories/user-profile.repository.d.ts +18 -0
  120. package/dist/repositories/user-profile.repository.js +62 -0
  121. package/dist/repositories/user-subscription.repository.d.ts +13 -0
  122. package/dist/repositories/user-subscription.repository.js +52 -0
  123. package/dist/repositories/user.repository.d.ts +20 -0
  124. package/dist/repositories/user.repository.js +94 -0
  125. package/dist/repositories/workspace-member.repository.d.ts +10 -0
  126. package/dist/repositories/workspace-member.repository.js +37 -0
  127. package/dist/repositories/workspace.repository.d.ts +10 -0
  128. package/dist/repositories/workspace.repository.js +45 -0
  129. package/package.json +63 -0
  130. package/readme.entity.implementation.md +1560 -0
@@ -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 ClipEffectRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ClipEffectRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ let ClipEffectRepository = ClipEffectRepository_1 = class ClipEffectRepository extends base_repository_1.BaseRepository {
18
+ logger = new common_1.Logger(ClipEffectRepository_1.name);
19
+ constructor(dynamoDbClient) {
20
+ super(dynamoDbClient, `clip-effect-${process.env.STAGE}`);
21
+ }
22
+ async findByClipId(clipId) {
23
+ const result = await this.dynamoDb.query({
24
+ TableName: this.tableName,
25
+ IndexName: 'clipId-index',
26
+ KeyConditionExpression: 'clipId = :clipId',
27
+ ExpressionAttributeValues: {
28
+ ':clipId': clipId,
29
+ },
30
+ });
31
+ return result.Items || [];
32
+ }
33
+ async findByEffectId(effectId) {
34
+ const result = await this.dynamoDb.query({
35
+ TableName: this.tableName,
36
+ IndexName: 'effectId-index',
37
+ KeyConditionExpression: 'effectId = :effectId',
38
+ ExpressionAttributeValues: {
39
+ ':effectId': effectId,
40
+ },
41
+ });
42
+ return result.Items || [];
43
+ }
44
+ };
45
+ exports.ClipEffectRepository = ClipEffectRepository;
46
+ exports.ClipEffectRepository = ClipEffectRepository = ClipEffectRepository_1 = __decorate([
47
+ (0, common_1.Injectable)(),
48
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
49
+ ], ClipEffectRepository);
@@ -0,0 +1,13 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Clip } from '../entities/clip.entity';
4
+ export declare class ClipRepository extends BaseRepository<Clip> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByTrackId(trackId: string): Promise<Clip[]>;
8
+ findByAssetId(assetId: string): Promise<Clip[]>;
9
+ findClipsInTimeRange(trackId: string, startTime: number, endTime: number): Promise<Clip[]>;
10
+ findOverlappingClips(trackId: string, startTime: number, endTime: number): Promise<Clip[]>;
11
+ moveClip(clipId: string, newStartTime: number, newEndTime: number): Promise<void>;
12
+ duplicateClip(clipId: string, newTrackId?: string): Promise<Clip>;
13
+ }
@@ -0,0 +1,101 @@
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 ClipRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ClipRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ let ClipRepository = ClipRepository_1 = class ClipRepository extends base_repository_1.BaseRepository {
18
+ logger = new common_1.Logger(ClipRepository_1.name);
19
+ constructor(dynamoDbClient) {
20
+ super(dynamoDbClient, `clip-${process.env.STAGE}`);
21
+ }
22
+ async findByTrackId(trackId) {
23
+ const result = await this.dynamoDb.query({
24
+ TableName: this.tableName,
25
+ IndexName: 'trackId-startTimeMs-index',
26
+ KeyConditionExpression: 'trackId = :trackId',
27
+ ExpressionAttributeValues: {
28
+ ':trackId': trackId,
29
+ },
30
+ });
31
+ return result.Items || [];
32
+ }
33
+ async findByAssetId(assetId) {
34
+ const result = await this.dynamoDb.query({
35
+ TableName: this.tableName,
36
+ IndexName: 'assetId-index',
37
+ KeyConditionExpression: 'assetId = :assetId',
38
+ ExpressionAttributeValues: {
39
+ ':assetId': assetId,
40
+ },
41
+ });
42
+ return result.Items || [];
43
+ }
44
+ async findClipsInTimeRange(trackId, startTime, endTime) {
45
+ const result = await this.dynamoDb.query({
46
+ TableName: this.tableName,
47
+ IndexName: 'trackId-startTimeMs-index',
48
+ KeyConditionExpression: 'trackId = :trackId AND startTimeMs BETWEEN :startTime AND :endTime',
49
+ ExpressionAttributeValues: {
50
+ ':trackId': trackId,
51
+ ':startTime': startTime,
52
+ ':endTime': endTime,
53
+ },
54
+ });
55
+ return result.Items || [];
56
+ }
57
+ async findOverlappingClips(trackId, startTime, endTime) {
58
+ const result = await this.dynamoDb.scan({
59
+ TableName: this.tableName,
60
+ FilterExpression: 'trackId = :trackId AND ((startTimeMs <= :startTime AND endTimeMs > :startTime) OR (startTimeMs < :endTime AND endTimeMs >= :endTime) OR (startTimeMs >= :startTime AND endTimeMs <= :endTime))',
61
+ ExpressionAttributeValues: {
62
+ ':trackId': trackId,
63
+ ':startTime': startTime,
64
+ ':endTime': endTime,
65
+ },
66
+ });
67
+ return result.Items || [];
68
+ }
69
+ async moveClip(clipId, newStartTime, newEndTime) {
70
+ await this.dynamoDb.update({
71
+ TableName: this.tableName,
72
+ Key: { id: clipId },
73
+ UpdateExpression: 'SET startTimeMs = :startTime, endTimeMs = :endTime, updatedAt = :updatedAt',
74
+ ExpressionAttributeValues: {
75
+ ':startTime': newStartTime,
76
+ ':endTime': newEndTime,
77
+ ':updatedAt': new Date().toISOString(),
78
+ },
79
+ });
80
+ }
81
+ async duplicateClip(clipId, newTrackId) {
82
+ const originalClip = await this.findById(clipId);
83
+ if (!originalClip) {
84
+ throw new Error('Clip not found');
85
+ }
86
+ const newClip = {
87
+ ...originalClip,
88
+ id: `${Date.now()}-${Math.random()}`,
89
+ trackId: newTrackId || originalClip.trackId,
90
+ name: `${originalClip.name || 'Clip'} Copy`,
91
+ createdAt: new Date().toISOString(),
92
+ updatedAt: new Date().toISOString(),
93
+ };
94
+ return await this.create(newClip);
95
+ }
96
+ };
97
+ exports.ClipRepository = ClipRepository;
98
+ exports.ClipRepository = ClipRepository = ClipRepository_1 = __decorate([
99
+ (0, common_1.Injectable)(),
100
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
101
+ ], ClipRepository);
@@ -0,0 +1,12 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Comment, CommentStatus } from '../entities/comment.entity';
4
+ export declare class CommentRepository extends BaseRepository<Comment> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByProjectId(projectId: string): Promise<Comment[]>;
8
+ findByStatus(projectId: string, status: CommentStatus): Promise<Comment[]>;
9
+ findReplies(parentId: string): Promise<Comment[]>;
10
+ findByUserId(userId: string): Promise<Comment[]>;
11
+ markAsResolved(commentId: string): Promise<void>;
12
+ }
@@ -0,0 +1,92 @@
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 CommentRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CommentRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ const comment_entity_1 = require("../entities/comment.entity");
18
+ let CommentRepository = CommentRepository_1 = class CommentRepository extends base_repository_1.BaseRepository {
19
+ logger = new common_1.Logger(CommentRepository_1.name);
20
+ constructor(dynamoDbClient) {
21
+ super(dynamoDbClient, `comment-${process.env.STAGE}`);
22
+ }
23
+ async findByProjectId(projectId) {
24
+ const result = await this.dynamoDb.query({
25
+ TableName: this.tableName,
26
+ IndexName: 'projectId-createdAt-index',
27
+ KeyConditionExpression: 'projectId = :projectId',
28
+ ScanIndexForward: false,
29
+ ExpressionAttributeValues: {
30
+ ':projectId': projectId,
31
+ },
32
+ });
33
+ return result.Items || [];
34
+ }
35
+ async findByStatus(projectId, status) {
36
+ const result = await this.dynamoDb.query({
37
+ TableName: this.tableName,
38
+ IndexName: 'projectId-status-index',
39
+ KeyConditionExpression: 'projectId = :projectId AND #status = :status',
40
+ ExpressionAttributeNames: {
41
+ '#status': 'status',
42
+ },
43
+ ExpressionAttributeValues: {
44
+ ':projectId': projectId,
45
+ ':status': status,
46
+ },
47
+ });
48
+ return result.Items || [];
49
+ }
50
+ async findReplies(parentId) {
51
+ const result = await this.dynamoDb.query({
52
+ TableName: this.tableName,
53
+ IndexName: 'parentId-createdAt-index',
54
+ KeyConditionExpression: 'parentId = :parentId',
55
+ ExpressionAttributeValues: {
56
+ ':parentId': parentId,
57
+ },
58
+ });
59
+ return result.Items || [];
60
+ }
61
+ async findByUserId(userId) {
62
+ const result = await this.dynamoDb.query({
63
+ TableName: this.tableName,
64
+ IndexName: 'userId-createdAt-index',
65
+ KeyConditionExpression: 'userId = :userId',
66
+ ScanIndexForward: false,
67
+ ExpressionAttributeValues: {
68
+ ':userId': userId,
69
+ },
70
+ });
71
+ return result.Items || [];
72
+ }
73
+ async markAsResolved(commentId) {
74
+ await this.dynamoDb.update({
75
+ TableName: this.tableName,
76
+ Key: { id: commentId },
77
+ UpdateExpression: 'SET #status = :status, updatedAt = :updatedAt',
78
+ ExpressionAttributeNames: {
79
+ '#status': 'status',
80
+ },
81
+ ExpressionAttributeValues: {
82
+ ':status': comment_entity_1.CommentStatus.RESOLVED,
83
+ ':updatedAt': new Date().toISOString(),
84
+ },
85
+ });
86
+ }
87
+ };
88
+ exports.CommentRepository = CommentRepository;
89
+ exports.CommentRepository = CommentRepository = CommentRepository_1 = __decorate([
90
+ (0, common_1.Injectable)(),
91
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
92
+ ], CommentRepository);
@@ -0,0 +1,26 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { EditorProject } from '../entities/editor-project.entity';
4
+ import { ProjectStatus, ProjectVisibility } from '../common/enums';
5
+ export declare class EditorProjectRepository extends BaseRepository<EditorProject> {
6
+ private readonly logger;
7
+ constructor(dynamoDbClient: DynamoDB);
8
+ findByUserAndWorkspace(ownerId: string, workspaceId: string): Promise<EditorProject[]>;
9
+ findTemplates(): Promise<EditorProject[]>;
10
+ findFavorites(ownerId: string): Promise<EditorProject[]>;
11
+ findPremiumTemplates(): Promise<EditorProject[]>;
12
+ findRecentlyOpened(ownerId: string, limit?: number): Promise<EditorProject[]>;
13
+ countByOwner(ownerId: string): Promise<number>;
14
+ getAllTagsByOwner(ownerId: string): Promise<string[]>;
15
+ findByWorkspaceId(workspaceId: string): Promise<EditorProject[]>;
16
+ findByOwnerId(ownerId: string): Promise<EditorProject[]>;
17
+ findByStatus(status: ProjectStatus): Promise<EditorProject[]>;
18
+ findByVisibility(visibility: ProjectVisibility): Promise<EditorProject[]>;
19
+ findByTemplateCategory(templateCategory: string): Promise<EditorProject[]>;
20
+ findByTag(tag: string): Promise<EditorProject[]>;
21
+ findByCollaboratorId(collaboratorId: string): Promise<EditorProject[]>;
22
+ findByTitle(title: string): Promise<EditorProject[]>;
23
+ findById(id: string): Promise<EditorProject | undefined>;
24
+ updateThumbnailUrl(projectId: string, thumbnailUrl: string): Promise<void>;
25
+ duplicateProject(projectId: string, newTitle?: string): Promise<EditorProject>;
26
+ }
@@ -0,0 +1,107 @@
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 EditorProjectRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EditorProjectRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ let EditorProjectRepository = EditorProjectRepository_1 = class EditorProjectRepository extends base_repository_1.BaseRepository {
18
+ logger = new common_1.Logger(EditorProjectRepository_1.name);
19
+ constructor(dynamoDbClient) {
20
+ super(dynamoDbClient, `editor-project-${process.env.STAGE}`);
21
+ }
22
+ async findByUserAndWorkspace(ownerId, workspaceId) {
23
+ return this.find({ ownerId, workspaceId });
24
+ }
25
+ async findTemplates() {
26
+ return this.find({ isTemplate: true });
27
+ }
28
+ async findFavorites(ownerId) {
29
+ return this.find({ ownerId, isFavorite: true });
30
+ }
31
+ async findPremiumTemplates() {
32
+ return this.find({ isTemplate: true, isPremiumTemplate: true });
33
+ }
34
+ async findRecentlyOpened(ownerId, limit = 10) {
35
+ const projects = await this.find({ ownerId });
36
+ return projects
37
+ .filter((p) => !!p.lastOpenedAt)
38
+ .sort((a, b) => (b.lastOpenedAt || '').localeCompare(a.lastOpenedAt || ''))
39
+ .slice(0, limit);
40
+ }
41
+ async countByOwner(ownerId) {
42
+ const projects = await this.find({ ownerId });
43
+ return projects.length;
44
+ }
45
+ async getAllTagsByOwner(ownerId) {
46
+ const projects = await this.find({ ownerId });
47
+ const tagsSet = new Set();
48
+ projects.forEach((p) => {
49
+ if (Array.isArray(p.tags)) {
50
+ p.tags.forEach((tag) => tagsSet.add(tag));
51
+ }
52
+ });
53
+ return Array.from(tagsSet);
54
+ }
55
+ async findByWorkspaceId(workspaceId) {
56
+ return this.find({ workspaceId });
57
+ }
58
+ async findByOwnerId(ownerId) {
59
+ return this.find({ ownerId });
60
+ }
61
+ async findByStatus(status) {
62
+ return this.find({ status });
63
+ }
64
+ async findByVisibility(visibility) {
65
+ return this.find({ visibility });
66
+ }
67
+ async findByTemplateCategory(templateCategory) {
68
+ return this.find({ templateCategory });
69
+ }
70
+ async findByTag(tag) {
71
+ const projects = await this.find({});
72
+ return projects.filter((p) => Array.isArray(p.tags) && p.tags.includes(tag));
73
+ }
74
+ async findByCollaboratorId(collaboratorId) {
75
+ const projects = await this.find({});
76
+ return projects.filter((p) => Array.isArray(p.collaboratorIds) &&
77
+ p.collaboratorIds.includes(collaboratorId));
78
+ }
79
+ async findByTitle(title) {
80
+ return this.find({ title });
81
+ }
82
+ async findById(id) {
83
+ return super.findById(id);
84
+ }
85
+ async updateThumbnailUrl(projectId, thumbnailUrl) {
86
+ await this.update(projectId, { thumbnailUrl });
87
+ }
88
+ async duplicateProject(projectId, newTitle) {
89
+ const originalProject = await this.findById(projectId);
90
+ if (!originalProject) {
91
+ throw new Error('EditorProject not found');
92
+ }
93
+ const newProject = {
94
+ ...originalProject,
95
+ id: `${Date.now()}-${Math.random()}`,
96
+ title: newTitle || `${originalProject.title} Copy`,
97
+ createdAt: new Date().toISOString(),
98
+ updatedAt: new Date().toISOString(),
99
+ };
100
+ return await this.create(newProject);
101
+ }
102
+ };
103
+ exports.EditorProjectRepository = EditorProjectRepository;
104
+ exports.EditorProjectRepository = EditorProjectRepository = EditorProjectRepository_1 = __decorate([
105
+ (0, common_1.Injectable)(),
106
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
107
+ ], EditorProjectRepository);
@@ -0,0 +1,10 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Effect, EffectType } from '../entities/effect.entity';
4
+ export declare class EffectRepository extends BaseRepository<Effect> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByType(effectType: EffectType): Promise<Effect[]>;
8
+ findActive(): Promise<Effect[]>;
9
+ findById(id: string): Promise<Effect | undefined>;
10
+ }
@@ -0,0 +1,59 @@
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 EffectRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EffectRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ let EffectRepository = EffectRepository_1 = class EffectRepository extends base_repository_1.BaseRepository {
18
+ logger = new common_1.Logger(EffectRepository_1.name);
19
+ constructor(dynamoDbClient) {
20
+ super(dynamoDbClient, `effect-${process.env.STAGE}`);
21
+ }
22
+ async findByType(effectType) {
23
+ const result = await this.dynamoDb.query({
24
+ TableName: this.tableName,
25
+ IndexName: 'effectType-index',
26
+ KeyConditionExpression: 'effectType = :effectType',
27
+ ExpressionAttributeValues: {
28
+ ':effectType': effectType,
29
+ },
30
+ });
31
+ return result.Items || [];
32
+ }
33
+ async findActive() {
34
+ const result = await this.dynamoDb.query({
35
+ TableName: this.tableName,
36
+ IndexName: 'isActive-index',
37
+ KeyConditionExpression: 'isActive = :active',
38
+ ExpressionAttributeValues: {
39
+ ':active': true,
40
+ },
41
+ });
42
+ return result.Items || [];
43
+ }
44
+ async findById(id) {
45
+ const result = await this.dynamoDb.query({
46
+ TableName: this.tableName,
47
+ KeyConditionExpression: 'id = :id',
48
+ ExpressionAttributeValues: {
49
+ ':id': id,
50
+ },
51
+ });
52
+ return result.Items?.[0];
53
+ }
54
+ };
55
+ exports.EffectRepository = EffectRepository;
56
+ exports.EffectRepository = EffectRepository = EffectRepository_1 = __decorate([
57
+ (0, common_1.Injectable)(),
58
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
59
+ ], EffectRepository);
@@ -0,0 +1,21 @@
1
+ export * from './asset.repository';
2
+ export * from './base.repository';
3
+ export * from './clip.repository';
4
+ export * from './clip-effect.repository';
5
+ export * from './comment.repository';
6
+ export * from './effect.repository';
7
+ export * from './keyframe.repository';
8
+ export * from './payment-transaction.repository';
9
+ export * from './project-version.repository';
10
+ export * from './reward-rule.repository';
11
+ export * from './subscription-plan.repository';
12
+ export * from './subscription-usage.repository';
13
+ export * from './timeline.repository';
14
+ export * from './track.repository';
15
+ export * from './user.repository';
16
+ export * from './user-onboarding-response.repository';
17
+ export * from './user-subscription.repository';
18
+ export * from './workspace-member.repository';
19
+ export * from './workspace.repository';
20
+ export * from './user-profile.repository';
21
+ export * from './editor-project.repository';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./asset.repository"), exports);
18
+ __exportStar(require("./base.repository"), exports);
19
+ __exportStar(require("./clip.repository"), exports);
20
+ __exportStar(require("./clip-effect.repository"), exports);
21
+ __exportStar(require("./comment.repository"), exports);
22
+ __exportStar(require("./effect.repository"), exports);
23
+ __exportStar(require("./keyframe.repository"), exports);
24
+ __exportStar(require("./payment-transaction.repository"), exports);
25
+ __exportStar(require("./project-version.repository"), exports);
26
+ __exportStar(require("./reward-rule.repository"), exports);
27
+ __exportStar(require("./subscription-plan.repository"), exports);
28
+ __exportStar(require("./subscription-usage.repository"), exports);
29
+ __exportStar(require("./timeline.repository"), exports);
30
+ __exportStar(require("./track.repository"), exports);
31
+ __exportStar(require("./user.repository"), exports);
32
+ __exportStar(require("./user-onboarding-response.repository"), exports);
33
+ __exportStar(require("./user-subscription.repository"), exports);
34
+ __exportStar(require("./workspace-member.repository"), exports);
35
+ __exportStar(require("./workspace.repository"), exports);
36
+ __exportStar(require("./user-profile.repository"), exports);
37
+ __exportStar(require("./editor-project.repository"), exports);
@@ -0,0 +1,9 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Keyframe } from '../entities/keyframe.entity';
4
+ export declare class KeyframeRepository extends BaseRepository<Keyframe> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByClipId(clipId: string): Promise<Keyframe[]>;
8
+ findByClipEffectId(clipEffectId: string): Promise<Keyframe[]>;
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 KeyframeRepository_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.KeyframeRepository = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
16
+ const base_repository_1 = require("./base.repository");
17
+ let KeyframeRepository = KeyframeRepository_1 = class KeyframeRepository extends base_repository_1.BaseRepository {
18
+ logger = new common_1.Logger(KeyframeRepository_1.name);
19
+ constructor(dynamoDbClient) {
20
+ super(dynamoDbClient, `keyframe-${process.env.STAGE}`);
21
+ }
22
+ async findByClipId(clipId) {
23
+ const result = await this.dynamoDb.query({
24
+ TableName: this.tableName,
25
+ IndexName: 'clipId-index',
26
+ KeyConditionExpression: 'clipId = :clipId',
27
+ ExpressionAttributeValues: {
28
+ ':clipId': clipId,
29
+ },
30
+ });
31
+ return result.Items || [];
32
+ }
33
+ async findByClipEffectId(clipEffectId) {
34
+ const result = await this.dynamoDb.query({
35
+ TableName: this.tableName,
36
+ IndexName: 'clipEffectId-index',
37
+ KeyConditionExpression: 'clipEffectId = :clipEffectId',
38
+ ExpressionAttributeValues: {
39
+ ':clipEffectId': clipEffectId,
40
+ },
41
+ });
42
+ return result.Items || [];
43
+ }
44
+ };
45
+ exports.KeyframeRepository = KeyframeRepository;
46
+ exports.KeyframeRepository = KeyframeRepository = KeyframeRepository_1 = __decorate([
47
+ (0, common_1.Injectable)(),
48
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
49
+ ], KeyframeRepository);
@@ -0,0 +1,13 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { PaymentTransaction, TransactionStatus } from '../entities/payment-transaction.entity';
4
+ export declare class PaymentTransactionRepository extends BaseRepository<PaymentTransaction> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByUserId(userId: string): Promise<PaymentTransaction[]>;
8
+ findBySubscriptionId(subscriptionId: string): Promise<PaymentTransaction[]>;
9
+ findByStripePaymentIntentId(stripePaymentIntentId: string): Promise<PaymentTransaction | undefined>;
10
+ findByStatusAndDateRange(status: TransactionStatus, startDate: string, endDate: string): Promise<PaymentTransaction[]>;
11
+ findFailedTransactions(userId?: string): Promise<PaymentTransaction[]>;
12
+ getTotalRevenueByPeriod(startDate: string, endDate: string): Promise<number>;
13
+ }