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,32 @@
1
+ export declare enum UserRole {
2
+ USER = "user",
3
+ ADMIN = "admin",
4
+ MODERATOR = "moderator"
5
+ }
6
+ export declare enum UserStatus {
7
+ ACTIVE = "active",
8
+ INACTIVE = "inactive",
9
+ SUSPENDED = "suspended",
10
+ DELETED = "deleted"
11
+ }
12
+ export declare class User {
13
+ id: string;
14
+ workspaceId: string;
15
+ email: string;
16
+ username?: string;
17
+ auth0UserId: string;
18
+ passwordHash: string;
19
+ emailVerified: boolean;
20
+ status: UserStatus;
21
+ role: UserRole;
22
+ isActive: boolean;
23
+ isEmailVerified: boolean;
24
+ verificationToken?: string;
25
+ stripeCustomerId?: string;
26
+ lastLoginAt?: string;
27
+ emailVerifiedAt?: string;
28
+ deletedAt?: string;
29
+ scheduledDeletionAt?: string;
30
+ createdAt?: string;
31
+ updatedAt?: string;
32
+ }
@@ -0,0 +1,133 @@
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.User = exports.UserStatus = exports.UserRole = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ var UserRole;
15
+ (function (UserRole) {
16
+ UserRole["USER"] = "user";
17
+ UserRole["ADMIN"] = "admin";
18
+ UserRole["MODERATOR"] = "moderator";
19
+ })(UserRole || (exports.UserRole = UserRole = {}));
20
+ var UserStatus;
21
+ (function (UserStatus) {
22
+ UserStatus["ACTIVE"] = "active";
23
+ UserStatus["INACTIVE"] = "inactive";
24
+ UserStatus["SUSPENDED"] = "suspended";
25
+ UserStatus["DELETED"] = "deleted";
26
+ })(UserStatus || (exports.UserStatus = UserStatus = {}));
27
+ class User {
28
+ id;
29
+ workspaceId = '';
30
+ email;
31
+ username;
32
+ auth0UserId;
33
+ passwordHash;
34
+ emailVerified = false;
35
+ status = UserStatus.ACTIVE;
36
+ role = UserRole.USER;
37
+ isActive = true;
38
+ isEmailVerified = false;
39
+ verificationToken;
40
+ stripeCustomerId;
41
+ lastLoginAt;
42
+ emailVerifiedAt;
43
+ deletedAt;
44
+ scheduledDeletionAt;
45
+ createdAt;
46
+ updatedAt;
47
+ }
48
+ exports.User = User;
49
+ __decorate([
50
+ (0, class_validator_1.IsString)(),
51
+ __metadata("design:type", String)
52
+ ], User.prototype, "id", void 0);
53
+ __decorate([
54
+ (0, class_validator_1.IsString)(),
55
+ __metadata("design:type", String)
56
+ ], User.prototype, "workspaceId", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsEmail)(),
59
+ __metadata("design:type", String)
60
+ ], User.prototype, "email", void 0);
61
+ __decorate([
62
+ (0, class_validator_1.IsString)(),
63
+ (0, class_validator_1.IsOptional)(),
64
+ __metadata("design:type", String)
65
+ ], User.prototype, "username", void 0);
66
+ __decorate([
67
+ (0, class_validator_1.IsString)(),
68
+ __metadata("design:type", String)
69
+ ], User.prototype, "auth0UserId", void 0);
70
+ __decorate([
71
+ (0, class_validator_1.IsString)(),
72
+ __metadata("design:type", String)
73
+ ], User.prototype, "passwordHash", void 0);
74
+ __decorate([
75
+ (0, class_validator_1.IsBoolean)(),
76
+ __metadata("design:type", Boolean)
77
+ ], User.prototype, "emailVerified", void 0);
78
+ __decorate([
79
+ (0, class_validator_1.IsEnum)(UserStatus),
80
+ __metadata("design:type", String)
81
+ ], User.prototype, "status", void 0);
82
+ __decorate([
83
+ (0, class_validator_1.IsEnum)(UserRole),
84
+ __metadata("design:type", String)
85
+ ], User.prototype, "role", void 0);
86
+ __decorate([
87
+ (0, class_validator_1.IsBoolean)(),
88
+ __metadata("design:type", Boolean)
89
+ ], User.prototype, "isActive", void 0);
90
+ __decorate([
91
+ (0, class_validator_1.IsBoolean)(),
92
+ __metadata("design:type", Boolean)
93
+ ], User.prototype, "isEmailVerified", void 0);
94
+ __decorate([
95
+ (0, class_validator_1.IsString)(),
96
+ (0, class_validator_1.IsOptional)(),
97
+ __metadata("design:type", String)
98
+ ], User.prototype, "verificationToken", void 0);
99
+ __decorate([
100
+ (0, class_validator_1.IsString)(),
101
+ (0, class_validator_1.IsOptional)(),
102
+ __metadata("design:type", String)
103
+ ], User.prototype, "stripeCustomerId", void 0);
104
+ __decorate([
105
+ (0, class_validator_1.IsString)(),
106
+ (0, class_validator_1.IsOptional)(),
107
+ __metadata("design:type", String)
108
+ ], User.prototype, "lastLoginAt", void 0);
109
+ __decorate([
110
+ (0, class_validator_1.IsString)(),
111
+ (0, class_validator_1.IsOptional)(),
112
+ __metadata("design:type", String)
113
+ ], User.prototype, "emailVerifiedAt", void 0);
114
+ __decorate([
115
+ (0, class_validator_1.IsString)(),
116
+ (0, class_validator_1.IsOptional)(),
117
+ __metadata("design:type", String)
118
+ ], User.prototype, "deletedAt", void 0);
119
+ __decorate([
120
+ (0, class_validator_1.IsString)(),
121
+ (0, class_validator_1.IsOptional)(),
122
+ __metadata("design:type", String)
123
+ ], User.prototype, "scheduledDeletionAt", void 0);
124
+ __decorate([
125
+ (0, class_validator_1.IsString)(),
126
+ (0, class_validator_1.IsOptional)(),
127
+ __metadata("design:type", String)
128
+ ], User.prototype, "createdAt", void 0);
129
+ __decorate([
130
+ (0, class_validator_1.IsString)(),
131
+ (0, class_validator_1.IsOptional)(),
132
+ __metadata("design:type", String)
133
+ ], User.prototype, "updatedAt", void 0);
@@ -0,0 +1,8 @@
1
+ export declare class WorkspaceMember {
2
+ id: string;
3
+ workspaceId: string;
4
+ userId: string;
5
+ role?: string;
6
+ permissions?: string[];
7
+ joinedAt?: string;
8
+ }
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.WorkspaceMember = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class WorkspaceMember {
15
+ id;
16
+ workspaceId;
17
+ userId;
18
+ role;
19
+ permissions;
20
+ joinedAt;
21
+ }
22
+ exports.WorkspaceMember = WorkspaceMember;
23
+ __decorate([
24
+ (0, class_validator_1.IsString)(),
25
+ __metadata("design:type", String)
26
+ ], WorkspaceMember.prototype, "id", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsString)(),
29
+ __metadata("design:type", String)
30
+ ], WorkspaceMember.prototype, "workspaceId", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsString)(),
33
+ __metadata("design:type", String)
34
+ ], WorkspaceMember.prototype, "userId", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsString)(),
37
+ (0, class_validator_1.IsOptional)(),
38
+ __metadata("design:type", String)
39
+ ], WorkspaceMember.prototype, "role", void 0);
40
+ __decorate([
41
+ (0, class_validator_1.IsArray)(),
42
+ (0, class_validator_1.IsOptional)(),
43
+ __metadata("design:type", Array)
44
+ ], WorkspaceMember.prototype, "permissions", void 0);
45
+ __decorate([
46
+ (0, class_validator_1.IsString)(),
47
+ (0, class_validator_1.IsOptional)(),
48
+ __metadata("design:type", String)
49
+ ], WorkspaceMember.prototype, "joinedAt", void 0);
@@ -0,0 +1,9 @@
1
+ export declare class Workspace {
2
+ id: string;
3
+ name: string;
4
+ description?: string;
5
+ ownerId: string;
6
+ isShared: boolean;
7
+ createdAt?: string;
8
+ updatedAt?: string;
9
+ }
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Workspace = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class Workspace {
15
+ id;
16
+ name;
17
+ description;
18
+ ownerId;
19
+ isShared = false;
20
+ createdAt;
21
+ updatedAt;
22
+ }
23
+ exports.Workspace = Workspace;
24
+ __decorate([
25
+ (0, class_validator_1.IsString)(),
26
+ __metadata("design:type", String)
27
+ ], Workspace.prototype, "id", void 0);
28
+ __decorate([
29
+ (0, class_validator_1.IsString)(),
30
+ __metadata("design:type", String)
31
+ ], Workspace.prototype, "name", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.IsOptional)(),
35
+ __metadata("design:type", String)
36
+ ], Workspace.prototype, "description", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsString)(),
39
+ __metadata("design:type", String)
40
+ ], Workspace.prototype, "ownerId", void 0);
41
+ __decorate([
42
+ (0, class_validator_1.IsBoolean)(),
43
+ __metadata("design:type", Boolean)
44
+ ], Workspace.prototype, "isShared", void 0);
45
+ __decorate([
46
+ (0, class_validator_1.IsString)(),
47
+ (0, class_validator_1.IsOptional)(),
48
+ __metadata("design:type", String)
49
+ ], Workspace.prototype, "createdAt", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsString)(),
52
+ (0, class_validator_1.IsOptional)(),
53
+ __metadata("design:type", String)
54
+ ], Workspace.prototype, "updatedAt", void 0);
@@ -0,0 +1,4 @@
1
+ export * from './entities';
2
+ export * from './repositories';
3
+ export * from './common/enums';
4
+ export { DynamoDbRepoModule } from './app.module';
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
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
+ exports.DynamoDbRepoModule = void 0;
18
+ __exportStar(require("./entities"), exports);
19
+ __exportStar(require("./repositories"), exports);
20
+ __exportStar(require("./common/enums"), exports);
21
+ var app_module_1 = require("./app.module");
22
+ Object.defineProperty(exports, "DynamoDbRepoModule", { enumerable: true, get: function () { return app_module_1.DynamoDbRepoModule; } });
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@nestjs/core");
4
+ const app_module_1 = require("./app.module");
5
+ async function bootstrap() {
6
+ const app = await core_1.NestFactory.create(app_module_1.DynamoDbRepoModule);
7
+ await app.listen(process.env.PORT ?? 8083);
8
+ console.log('DynamoDB Service is running on port: http://localhost:', process.env.PORT ?? 8083);
9
+ }
10
+ bootstrap();
@@ -0,0 +1,15 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { Asset, AssetType, AssetStatus } from '../entities/asset.entity';
4
+ export declare class AssetRepository extends BaseRepository<Asset> {
5
+ constructor(dynamoDbClient: DynamoDB);
6
+ findByWorkspaceId(workspaceId: string): Promise<Asset[]>;
7
+ findByFileType(fileType: AssetType, workspaceId?: string): Promise<Asset[]>;
8
+ findByUploadStatus(status: AssetStatus): Promise<Asset[]>;
9
+ findByUploadedBy(userId: string): Promise<Asset[]>;
10
+ findByTags(tags: string[], workspaceId?: string): Promise<Asset[]>;
11
+ searchAssets(searchTerm: string, workspaceId?: string): Promise<Asset[]>;
12
+ updateUsage(assetId: string): Promise<void>;
13
+ getWorkspaceStorageUsage(workspaceId: string): Promise<number>;
14
+ findPublicAssets(fileType?: AssetType): Promise<Asset[]>;
15
+ }
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AssetRepository = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
15
+ const base_repository_1 = require("./base.repository");
16
+ let AssetRepository = class AssetRepository extends base_repository_1.BaseRepository {
17
+ constructor(dynamoDbClient) {
18
+ super(dynamoDbClient, `asset-${process.env.STAGE}`);
19
+ }
20
+ async findByWorkspaceId(workspaceId) {
21
+ return this.find({ workspaceId });
22
+ }
23
+ async findByFileType(fileType, workspaceId) {
24
+ if (workspaceId) {
25
+ return this.find({ workspaceId, fileType });
26
+ }
27
+ return this.find({ fileType });
28
+ }
29
+ async findByUploadStatus(status) {
30
+ return this.find({ uploadStatus: status });
31
+ }
32
+ async findByUploadedBy(userId) {
33
+ return this.find({ uploadedBy: userId });
34
+ }
35
+ async findByTags(tags, workspaceId) {
36
+ const tagConditions = tags
37
+ .map((_, index) => `contains(tags, :tag${index})`)
38
+ .join(' OR ');
39
+ let filterExpression = `(${tagConditions})`;
40
+ const expressionAttributeValues = {};
41
+ tags.forEach((tag, index) => {
42
+ expressionAttributeValues[`:tag${index}`] = tag;
43
+ });
44
+ if (workspaceId) {
45
+ filterExpression += ' AND workspaceId = :workspaceId';
46
+ expressionAttributeValues[':workspaceId'] = workspaceId;
47
+ }
48
+ const result = await this.dynamoDb.scan({
49
+ TableName: this.tableName,
50
+ FilterExpression: filterExpression,
51
+ ExpressionAttributeValues: expressionAttributeValues,
52
+ });
53
+ return result.Items || [];
54
+ }
55
+ async searchAssets(searchTerm, workspaceId) {
56
+ let filterExpression = 'contains(#name, :searchTerm) OR contains(originalFilename, :searchTerm)';
57
+ const expressionAttributeNames = {
58
+ '#name': 'name',
59
+ };
60
+ const expressionAttributeValues = {
61
+ ':searchTerm': searchTerm,
62
+ };
63
+ if (workspaceId) {
64
+ filterExpression += ' AND workspaceId = :workspaceId';
65
+ expressionAttributeValues[':workspaceId'] = workspaceId;
66
+ }
67
+ const result = await this.dynamoDb.scan({
68
+ TableName: this.tableName,
69
+ FilterExpression: filterExpression,
70
+ ExpressionAttributeNames: expressionAttributeNames,
71
+ ExpressionAttributeValues: expressionAttributeValues,
72
+ });
73
+ return result.Items || [];
74
+ }
75
+ async updateUsage(assetId) {
76
+ await this.dynamoDb.update({
77
+ TableName: this.tableName,
78
+ Key: { id: assetId },
79
+ UpdateExpression: 'ADD usageCount :increment SET lastUsedAt = :timestamp',
80
+ ExpressionAttributeValues: {
81
+ ':increment': 1,
82
+ ':timestamp': new Date().toISOString(),
83
+ },
84
+ });
85
+ }
86
+ async getWorkspaceStorageUsage(workspaceId) {
87
+ const assets = await this.find({ workspaceId });
88
+ return assets.reduce((total, asset) => total + (asset.fileSize || 0), 0);
89
+ }
90
+ async findPublicAssets(fileType) {
91
+ if (fileType) {
92
+ return this.find({ isPublic: true, fileType });
93
+ }
94
+ return this.find({ isPublic: true });
95
+ }
96
+ };
97
+ exports.AssetRepository = AssetRepository;
98
+ exports.AssetRepository = AssetRepository = __decorate([
99
+ (0, common_1.Injectable)(),
100
+ __metadata("design:paramtypes", [client_dynamodb_1.DynamoDB])
101
+ ], AssetRepository);
@@ -0,0 +1,31 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
3
+ export interface IBaseRepository<T> {
4
+ create(item: T): Promise<T>;
5
+ findById(id: string): Promise<T | undefined>;
6
+ findAll(): Promise<T[]>;
7
+ update(id: string, item: Partial<T>): Promise<T>;
8
+ delete(id: string): Promise<void>;
9
+ }
10
+ export declare abstract class BaseRepository<T> implements IBaseRepository<T> {
11
+ protected readonly tableName: string;
12
+ protected readonly dynamoDb: DynamoDBDocument;
13
+ protected readonly dynamoDbClient: DynamoDB;
14
+ constructor(dynamoDbClient: DynamoDB, tableName: string);
15
+ create(item: T): Promise<T>;
16
+ findById(id: string): Promise<T | undefined>;
17
+ findAll(limit?: number): Promise<T[]>;
18
+ update(id: string, item: Partial<T>): Promise<T>;
19
+ delete(id: string): Promise<void>;
20
+ batchCreate(items: T[]): Promise<T[]>;
21
+ findAllPaginated(lastEvaluatedKey?: any, limit?: number): Promise<{
22
+ items: T[];
23
+ lastEvaluatedKey?: any;
24
+ }>;
25
+ exists(id: string): Promise<boolean>;
26
+ find(conditions: Partial<T>, options?: {
27
+ indexName?: string;
28
+ keyConditionExpression?: string;
29
+ }): Promise<T[]>;
30
+ count(): Promise<number>;
31
+ }
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = void 0;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ const lib_dynamodb_2 = require("@aws-sdk/lib-dynamodb");
6
+ class BaseRepository {
7
+ tableName;
8
+ dynamoDb;
9
+ dynamoDbClient;
10
+ constructor(dynamoDbClient, tableName) {
11
+ const marshallOptions = {
12
+ convertEmptyValues: false,
13
+ removeUndefinedValues: true,
14
+ convertClassInstanceToMap: false,
15
+ };
16
+ const unmarshallOptions = {
17
+ wrapNumbers: false,
18
+ };
19
+ const translateConfig = { marshallOptions, unmarshallOptions };
20
+ this.tableName = tableName;
21
+ this.dynamoDbClient = dynamoDbClient;
22
+ this.dynamoDb = lib_dynamodb_1.DynamoDBDocument.from(dynamoDbClient, translateConfig);
23
+ }
24
+ async create(item) {
25
+ const itemWithTimestamps = {
26
+ ...item,
27
+ createdAt: item.createdAt || new Date().toISOString(),
28
+ updatedAt: new Date().toISOString(),
29
+ };
30
+ const command = new lib_dynamodb_2.PutCommand({
31
+ TableName: this.tableName,
32
+ Item: itemWithTimestamps,
33
+ ConditionExpression: 'attribute_not_exists(id)',
34
+ });
35
+ await this.dynamoDb.send(command);
36
+ return itemWithTimestamps;
37
+ }
38
+ async findById(id) {
39
+ const command = new lib_dynamodb_2.GetCommand({
40
+ TableName: this.tableName,
41
+ Key: { id },
42
+ });
43
+ const result = await this.dynamoDb.send(command);
44
+ return result.Item;
45
+ }
46
+ async findAll(limit) {
47
+ const command = new lib_dynamodb_2.ScanCommand({
48
+ TableName: this.tableName,
49
+ Limit: limit,
50
+ });
51
+ const result = await this.dynamoDb.send(command);
52
+ return result.Items || [];
53
+ }
54
+ async update(id, item) {
55
+ const updateExpressions = [];
56
+ const expressionAttributeNames = {};
57
+ const expressionAttributeValues = {};
58
+ const itemWithTimestamp = {
59
+ ...item,
60
+ updatedAt: new Date().toISOString(),
61
+ };
62
+ Object.entries(itemWithTimestamp).forEach(([key, value]) => {
63
+ if (value !== undefined && key !== 'id') {
64
+ updateExpressions.push(`#${key} = :${key}`);
65
+ expressionAttributeNames[`#${key}`] = key;
66
+ expressionAttributeValues[`:${key}`] = value;
67
+ }
68
+ });
69
+ if (updateExpressions.length === 0) {
70
+ throw new Error('No valid fields to update');
71
+ }
72
+ const command = new lib_dynamodb_2.UpdateCommand({
73
+ TableName: this.tableName,
74
+ Key: { id },
75
+ UpdateExpression: `SET ${updateExpressions.join(', ')}`,
76
+ ExpressionAttributeNames: expressionAttributeNames,
77
+ ExpressionAttributeValues: expressionAttributeValues,
78
+ ReturnValues: 'ALL_NEW',
79
+ ConditionExpression: 'attribute_exists(id)',
80
+ });
81
+ const result = await this.dynamoDb.send(command);
82
+ return result.Attributes;
83
+ }
84
+ async delete(id) {
85
+ const command = new lib_dynamodb_2.DeleteCommand({
86
+ TableName: this.tableName,
87
+ Key: { id },
88
+ ConditionExpression: 'attribute_exists(id)',
89
+ });
90
+ await this.dynamoDb.send(command);
91
+ }
92
+ async batchCreate(items) {
93
+ const batchSize = 25;
94
+ const results = [];
95
+ for (let i = 0; i < items.length; i += batchSize) {
96
+ const batch = items.slice(i, i + batchSize);
97
+ const batchResults = await Promise.all(batch.map((item) => this.create(item)));
98
+ results.push(...batchResults);
99
+ }
100
+ return results;
101
+ }
102
+ async findAllPaginated(lastEvaluatedKey, limit = 50) {
103
+ const command = new lib_dynamodb_2.ScanCommand({
104
+ TableName: this.tableName,
105
+ Limit: limit,
106
+ ExclusiveStartKey: lastEvaluatedKey,
107
+ });
108
+ const result = await this.dynamoDb.send(command);
109
+ return {
110
+ items: result.Items || [],
111
+ lastEvaluatedKey: result.LastEvaluatedKey,
112
+ };
113
+ }
114
+ async exists(id) {
115
+ const item = await this.findById(id);
116
+ return !!item;
117
+ }
118
+ async find(conditions, options) {
119
+ if ((!conditions || Object.keys(conditions).length === 0) &&
120
+ !options?.keyConditionExpression) {
121
+ throw new Error('At least one condition or keyConditionExpression is required for find()');
122
+ }
123
+ const expressionAttributeNames = {};
124
+ const expressionAttributeValues = {};
125
+ const filterExpressions = [];
126
+ Object.entries(conditions).forEach(([key, value]) => {
127
+ filterExpressions.push(`#${key} = :${key}`);
128
+ expressionAttributeNames[`#${key}`] = key;
129
+ expressionAttributeValues[`:${key}`] = value;
130
+ });
131
+ if (options?.keyConditionExpression) {
132
+ const result = await this.dynamoDb.send(new lib_dynamodb_1.QueryCommand({
133
+ TableName: this.tableName,
134
+ IndexName: options.indexName,
135
+ KeyConditionExpression: options.keyConditionExpression,
136
+ FilterExpression: filterExpressions.length
137
+ ? filterExpressions.join(' AND ')
138
+ : undefined,
139
+ ExpressionAttributeNames: Object.keys(expressionAttributeNames).length
140
+ ? expressionAttributeNames
141
+ : undefined,
142
+ ExpressionAttributeValues: Object.keys(expressionAttributeValues)
143
+ .length
144
+ ? expressionAttributeValues
145
+ : undefined,
146
+ }));
147
+ return result.Items || [];
148
+ }
149
+ const result = await this.dynamoDb.send(new lib_dynamodb_2.ScanCommand({
150
+ TableName: this.tableName,
151
+ FilterExpression: filterExpressions.length
152
+ ? filterExpressions.join(' AND ')
153
+ : undefined,
154
+ ExpressionAttributeNames: Object.keys(expressionAttributeNames).length
155
+ ? expressionAttributeNames
156
+ : undefined,
157
+ ExpressionAttributeValues: Object.keys(expressionAttributeValues).length
158
+ ? expressionAttributeValues
159
+ : undefined,
160
+ }));
161
+ return result.Items || [];
162
+ }
163
+ async count() {
164
+ const command = new lib_dynamodb_2.ScanCommand({
165
+ TableName: this.tableName,
166
+ Select: 'COUNT',
167
+ });
168
+ const result = await this.dynamoDb.send(command);
169
+ return result.Count || 0;
170
+ }
171
+ }
172
+ exports.BaseRepository = BaseRepository;
@@ -0,0 +1,9 @@
1
+ import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
+ import { BaseRepository } from './base.repository';
3
+ import { ClipEffect } from '../entities/clip-effect.entity';
4
+ export declare class ClipEffectRepository extends BaseRepository<ClipEffect> {
5
+ private readonly logger;
6
+ constructor(dynamoDbClient: DynamoDB);
7
+ findByClipId(clipId: string): Promise<ClipEffect[]>;
8
+ findByEffectId(effectId: string): Promise<ClipEffect[]>;
9
+ }