@bpinhosilva/agent-orchestrator 1.0.0-alpha.21 → 1.0.0-alpha.23

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 (169) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +198 -28
  3. package/dist/agents/agents.controller.js +5 -0
  4. package/dist/agents/agents.controller.js.map +1 -1
  5. package/dist/agents/dto/agent-request.dto.js +2 -1
  6. package/dist/agents/dto/agent-request.dto.js.map +1 -1
  7. package/dist/agents/dto/create-agent.dto.js +6 -1
  8. package/dist/agents/dto/create-agent.dto.js.map +1 -1
  9. package/dist/app.module.js +5 -0
  10. package/dist/app.module.js.map +1 -1
  11. package/dist/auth/auth.controller.d.ts +6 -1
  12. package/dist/auth/auth.controller.js +23 -7
  13. package/dist/auth/auth.controller.js.map +1 -1
  14. package/dist/auth/auth.service.d.ts +1 -0
  15. package/dist/auth/decorators/current-user.decorator.d.ts +1 -0
  16. package/dist/auth/decorators/current-user.decorator.js +9 -0
  17. package/dist/auth/decorators/current-user.decorator.js.map +1 -0
  18. package/dist/auth/decorators/roles.decorator.d.ts +3 -0
  19. package/dist/auth/decorators/roles.decorator.js +8 -0
  20. package/dist/auth/decorators/roles.decorator.js.map +1 -0
  21. package/dist/auth/entities/refresh-token.entity.js +2 -1
  22. package/dist/auth/entities/refresh-token.entity.js.map +1 -1
  23. package/dist/auth/guards/roles.guard.d.ts +7 -0
  24. package/dist/auth/guards/roles.guard.js +52 -0
  25. package/dist/auth/guards/roles.guard.js.map +1 -0
  26. package/dist/common/storage.service.d.ts +2 -0
  27. package/dist/common/storage.service.js +27 -0
  28. package/dist/common/storage.service.js.map +1 -1
  29. package/dist/config/env.validation.js +2 -0
  30. package/dist/config/env.validation.js.map +1 -1
  31. package/dist/config/typeorm.js +1 -1
  32. package/dist/config/typeorm.js.map +1 -1
  33. package/dist/main.js +16 -13
  34. package/dist/main.js.map +1 -1
  35. package/dist/migrations/1775103764402-AddRbacAndProjectMembership.d.ts +6 -0
  36. package/dist/migrations/1775103764402-AddRbacAndProjectMembership.js +124 -0
  37. package/dist/migrations/1775103764402-AddRbacAndProjectMembership.js.map +1 -0
  38. package/dist/models/models.controller.js +5 -0
  39. package/dist/models/models.controller.js.map +1 -1
  40. package/dist/projects/dto/add-member.dto.d.ts +5 -0
  41. package/dist/projects/dto/add-member.dto.js +33 -0
  42. package/dist/projects/dto/add-member.dto.js.map +1 -0
  43. package/dist/projects/entities/project-member.entity.d.ts +13 -0
  44. package/dist/projects/entities/project-member.entity.js +61 -0
  45. package/dist/projects/entities/project-member.entity.js.map +1 -0
  46. package/dist/projects/entities/project.entity.d.ts +2 -0
  47. package/dist/projects/entities/project.entity.js +9 -2
  48. package/dist/projects/entities/project.entity.js.map +1 -1
  49. package/dist/projects/projects.controller.d.ts +10 -5
  50. package/dist/projects/projects.controller.js +64 -15
  51. package/dist/projects/projects.controller.js.map +1 -1
  52. package/dist/projects/projects.module.js +5 -1
  53. package/dist/projects/projects.module.js.map +1 -1
  54. package/dist/projects/projects.service.d.ts +14 -6
  55. package/dist/projects/projects.service.js +125 -12
  56. package/dist/projects/projects.service.js.map +1 -1
  57. package/dist/providers/providers.controller.js +5 -0
  58. package/dist/providers/providers.controller.js.map +1 -1
  59. package/dist/tasks/entities/recurrent-task-exec.entity.js +1 -0
  60. package/dist/tasks/entities/recurrent-task-exec.entity.js.map +1 -1
  61. package/dist/tasks/entities/recurrent-task.entity.d.ts +2 -0
  62. package/dist/tasks/entities/recurrent-task.entity.js +14 -2
  63. package/dist/tasks/entities/recurrent-task.entity.js.map +1 -1
  64. package/dist/tasks/recurrent-tasks.controller.d.ts +9 -6
  65. package/dist/tasks/recurrent-tasks.controller.js +51 -30
  66. package/dist/tasks/recurrent-tasks.controller.js.map +1 -1
  67. package/dist/tasks/recurrent-tasks.service.d.ts +5 -5
  68. package/dist/tasks/recurrent-tasks.service.js +24 -11
  69. package/dist/tasks/recurrent-tasks.service.js.map +1 -1
  70. package/dist/tasks/task-scheduler.service.d.ts +4 -1
  71. package/dist/tasks/task-scheduler.service.js +15 -2
  72. package/dist/tasks/task-scheduler.service.js.map +1 -1
  73. package/dist/tasks/tasks.controller.d.ts +11 -8
  74. package/dist/tasks/tasks.controller.js +43 -23
  75. package/dist/tasks/tasks.controller.js.map +1 -1
  76. package/dist/tsconfig.build.tsbuildinfo +1 -1
  77. package/dist/ui/assets/AgentFleet-CC0h_Ar0.js +1 -0
  78. package/dist/ui/assets/AgentFleet-CC0h_Ar0.js.map +1 -0
  79. package/dist/ui/assets/ConfirmDialog-mRH8i_xK.js +10 -0
  80. package/dist/ui/assets/ConfirmDialog-mRH8i_xK.js.map +1 -0
  81. package/dist/ui/assets/InitialsAvatar-0mIRaTK8.js +1 -0
  82. package/dist/ui/assets/InitialsAvatar-0mIRaTK8.js.map +1 -0
  83. package/dist/ui/assets/MarkdownField-flCuU7w3.js +1 -0
  84. package/dist/ui/assets/MarkdownField-flCuU7w3.js.map +1 -0
  85. package/dist/ui/assets/ProjectDetail-CY-VSV2D.js +1 -0
  86. package/dist/ui/assets/ProjectDetail-CY-VSV2D.js.map +1 -0
  87. package/dist/ui/assets/Providers-C9_lxOG1.js +1 -0
  88. package/dist/ui/assets/Providers-C9_lxOG1.js.map +1 -0
  89. package/dist/ui/assets/Scheduler-Du2cIGfB.js +1 -0
  90. package/dist/ui/assets/Scheduler-Du2cIGfB.js.map +1 -0
  91. package/dist/ui/assets/TaskDetail-BdQJCVo3.js +1 -0
  92. package/dist/ui/assets/TaskDetail-BdQJCVo3.js.map +1 -0
  93. package/dist/ui/assets/TaskManager-CWDh69pf.js +8 -0
  94. package/dist/ui/assets/TaskManager-CWDh69pf.js.map +1 -0
  95. package/dist/ui/assets/{activity-CYFCUKYz.js → activity-CIlCK2jL.js} +1 -1
  96. package/dist/ui/assets/activity-CIlCK2jL.js.map +1 -0
  97. package/dist/ui/assets/{brain-D1LPqnhA.js → brain-_N041Xks.js} +1 -1
  98. package/dist/ui/assets/brain-_N041Xks.js.map +1 -0
  99. package/dist/ui/assets/check-DgCfni6J.js +1 -0
  100. package/dist/ui/assets/check-DgCfni6J.js.map +1 -0
  101. package/dist/ui/assets/clock-C0d1RzP_.js +1 -0
  102. package/dist/ui/assets/clock-C0d1RzP_.js.map +1 -0
  103. package/dist/ui/assets/cn-i-5ItZGU.js +1 -0
  104. package/dist/ui/assets/cn-i-5ItZGU.js.map +1 -0
  105. package/dist/ui/assets/{eye-DSoNYXlu.js → eye-RB18-re_.js} +1 -1
  106. package/dist/ui/assets/eye-RB18-re_.js.map +1 -0
  107. package/dist/ui/assets/index-CCsHBe__.css +1 -0
  108. package/dist/ui/assets/index-yzhzS93F.js +2 -0
  109. package/dist/ui/assets/index-yzhzS93F.js.map +1 -0
  110. package/dist/ui/assets/{layers-BQR0gbW3.js → layers-D5ECV506.js} +1 -1
  111. package/dist/ui/assets/layers-D5ECV506.js.map +1 -0
  112. package/dist/ui/assets/providers-BMRq_pkm.js +1 -0
  113. package/dist/ui/assets/providers-BMRq_pkm.js.map +1 -0
  114. package/dist/ui/assets/rolldown-runtime-COnpUsM8.js +1 -0
  115. package/dist/ui/assets/{send-Cgv_rLex.js → send-BA7-sXzg.js} +1 -1
  116. package/dist/ui/assets/send-BA7-sXzg.js.map +1 -0
  117. package/dist/ui/assets/{shield-check-02qtz3Au.js → shield-check-D7JIluse.js} +1 -1
  118. package/dist/ui/assets/shield-check-D7JIluse.js.map +1 -0
  119. package/dist/ui/assets/{sparkles-cO3r5TCU.js → sparkles-CCXaTT3H.js} +1 -1
  120. package/dist/ui/assets/sparkles-CCXaTT3H.js.map +1 -0
  121. package/dist/ui/assets/{tasks-BZ0wO0e9.js → tasks-DEHCZk48.js} +1 -1
  122. package/dist/ui/assets/tasks-DEHCZk48.js.map +1 -0
  123. package/dist/ui/assets/{trash-2-7e8TY3SJ.js → trash-2-BNP4kC5c.js} +1 -1
  124. package/dist/ui/assets/trash-2-BNP4kC5c.js.map +1 -0
  125. package/dist/ui/assets/{trending-up-Dh3I3BnW.js → trending-up-DBTQIgW8.js} +1 -1
  126. package/dist/ui/assets/trending-up-DBTQIgW8.js.map +1 -0
  127. package/dist/ui/assets/useNotification-DK-pV16c.js +6 -0
  128. package/dist/ui/assets/useNotification-DK-pV16c.js.map +1 -0
  129. package/dist/ui/assets/{user-sikuVJBW.js → user-Cp55HCCi.js} +1 -1
  130. package/dist/ui/assets/user-Cp55HCCi.js.map +1 -0
  131. package/dist/ui/assets/vendor-dnd-CxfOy4-Z.js +5 -0
  132. package/dist/ui/assets/vendor-dnd-CxfOy4-Z.js.map +1 -0
  133. package/dist/ui/assets/vendor-forms-HC2wK6B9.js +39 -0
  134. package/dist/ui/assets/vendor-forms-HC2wK6B9.js.map +1 -0
  135. package/dist/ui/assets/vendor-markdown-Dl_1qnne.js +29 -0
  136. package/dist/ui/assets/vendor-markdown-Dl_1qnne.js.map +1 -0
  137. package/dist/ui/assets/vendor-motion-CkXYvnuI.js +9 -0
  138. package/dist/ui/assets/vendor-motion-CkXYvnuI.js.map +1 -0
  139. package/dist/ui/assets/vendor-query-DQlZ8h7P.js +1 -0
  140. package/dist/ui/assets/vendor-query-DQlZ8h7P.js.map +1 -0
  141. package/dist/ui/assets/vendor-react-CiDbU5Ns.js +11 -0
  142. package/dist/ui/assets/vendor-react-CiDbU5Ns.js.map +1 -0
  143. package/dist/ui/assets/{zap-CFqyHdPJ.js → zap-D1sST66b.js} +1 -1
  144. package/dist/ui/assets/zap-D1sST66b.js.map +1 -0
  145. package/dist/ui/index.html +9 -4
  146. package/dist/users/entities/user.entity.d.ts +5 -0
  147. package/dist/users/entities/user.entity.js +10 -1
  148. package/dist/users/entities/user.entity.js.map +1 -1
  149. package/dist/users/users.controller.d.ts +0 -2
  150. package/dist/users/users.controller.js +3 -12
  151. package/dist/users/users.controller.js.map +1 -1
  152. package/dist/users/users.service.js +9 -1
  153. package/dist/users/users.service.js.map +1 -1
  154. package/package.json +3 -2
  155. package/dist/ui/assets/AgentFleet-CQIXvils.js +0 -6
  156. package/dist/ui/assets/ConfirmDialog-nQ8F6FEz.js +0 -1
  157. package/dist/ui/assets/MarkdownField-BvkVHJZh.js +0 -29
  158. package/dist/ui/assets/ProjectDetail-CZ-tFtQo.js +0 -1
  159. package/dist/ui/assets/Providers-C61nXOPZ.js +0 -1
  160. package/dist/ui/assets/Scheduler-BwWeFfsh.js +0 -1
  161. package/dist/ui/assets/TaskDetail-BKQ3Vgnu.js +0 -1
  162. package/dist/ui/assets/TaskManager-CCOnj4Gq.js +0 -16
  163. package/dist/ui/assets/check-BZcW41Vk.js +0 -1
  164. package/dist/ui/assets/clock-vIUNSAVw.js +0 -1
  165. package/dist/ui/assets/file-text-DyBkf5PF.js +0 -1
  166. package/dist/ui/assets/index-BX3YIi49.css +0 -1
  167. package/dist/ui/assets/index-Ctbpa_Ei.js +0 -20
  168. package/dist/ui/assets/providers-C3SQm75E.js +0 -1
  169. package/dist/ui/assets/useNotification-nXJIHD_q.js +0 -6
@@ -13,6 +13,7 @@ exports.Project = exports.ProjectStatus = void 0;
13
13
  const openapi = require("@nestjs/swagger");
14
14
  const typeorm_1 = require("typeorm");
15
15
  const agent_entity_1 = require("../../agents/entities/agent.entity");
16
+ const project_member_entity_1 = require("./project-member.entity");
16
17
  var ProjectStatus;
17
18
  (function (ProjectStatus) {
18
19
  ProjectStatus["PLANNING"] = "planning";
@@ -27,10 +28,11 @@ let Project = class Project {
27
28
  description;
28
29
  status;
29
30
  ownerAgent;
31
+ members;
30
32
  createdAt;
31
33
  updatedAt;
32
34
  static _OPENAPI_METADATA_FACTORY() {
33
- return { id: { required: true, type: () => String }, title: { required: true, type: () => String }, description: { required: true, type: () => String }, status: { required: true, enum: require("./project.entity").ProjectStatus }, ownerAgent: { required: true, type: () => require("../../agents/entities/agent.entity").AgentEntity, nullable: true }, createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date } };
35
+ return { id: { required: true, type: () => String }, title: { required: true, type: () => String }, description: { required: true, type: () => String }, status: { required: true, enum: require("./project.entity").ProjectStatus }, ownerAgent: { required: true, type: () => require("../../agents/entities/agent.entity").AgentEntity, nullable: true }, members: { required: true, type: () => [require("./project-member.entity").ProjectMember] }, createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date } };
34
36
  }
35
37
  };
36
38
  exports.Project = Project;
@@ -63,6 +65,10 @@ __decorate([
63
65
  }),
64
66
  __metadata("design:type", Object)
65
67
  ], Project.prototype, "ownerAgent", void 0);
68
+ __decorate([
69
+ (0, typeorm_1.OneToMany)(() => project_member_entity_1.ProjectMember, (member) => member.project),
70
+ __metadata("design:type", Array)
71
+ ], Project.prototype, "members", void 0);
66
72
  __decorate([
67
73
  (0, typeorm_1.CreateDateColumn)(),
68
74
  __metadata("design:type", Date)
@@ -72,6 +78,7 @@ __decorate([
72
78
  __metadata("design:type", Date)
73
79
  ], Project.prototype, "updatedAt", void 0);
74
80
  exports.Project = Project = __decorate([
75
- (0, typeorm_1.Entity)('projects')
81
+ (0, typeorm_1.Entity)('projects'),
82
+ (0, typeorm_1.Index)(['status'])
76
83
  ], Project);
77
84
  //# sourceMappingURL=project.entity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.entity.js","sourceRoot":"","sources":["../../../src/projects/entities/project.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAQiB;AACjB,qEAAiE;AAEjE,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,sCAAqB,CAAA;AACvB,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAGM,IAAM,OAAO,GAAb,MAAM,OAAO;IAElB,EAAE,CAAS;IAGX,KAAK,CAAS;IAGd,WAAW,CAAS;IAOpB,MAAM,CAAgB;IAQtB,UAAU,CAAqB;IAG/B,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AA9BY,0BAAO;AAElB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;mCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;sCACK;AAGd;IADC,IAAA,gBAAM,EAAC,MAAM,CAAC;;4CACK;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa,CAAC,QAAQ;KAChC,CAAC;;uCACoB;AAQtB;IANC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,EAAE;QAC5B,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,UAAU;KACrB,CAAC;;2CAC6B;AAG/B;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;kBA7BL,OAAO;IADnB,IAAA,gBAAM,EAAC,UAAU,CAAC;GACN,OAAO,CA8BnB"}
1
+ {"version":3,"file":"project.entity.js","sourceRoot":"","sources":["../../../src/projects/entities/project.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCASiB;AACjB,qEAAiE;AACjE,mEAAwD;AAExD,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,sCAAqB,CAAA;AACvB,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAIM,IAAM,OAAO,GAAb,MAAM,OAAO;IAElB,EAAE,CAAS;IAGX,KAAK,CAAS;IAGd,WAAW,CAAS;IAOpB,MAAM,CAAgB;IAQtB,UAAU,CAAqB;IAG/B,OAAO,CAAkB;IAGzB,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AAjCY,0BAAO;AAElB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;mCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;sCACK;AAGd;IADC,IAAA,gBAAM,EAAC,MAAM,CAAC;;4CACK;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa,CAAC,QAAQ;KAChC,CAAC;;uCACoB;AAQtB;IANC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,EAAE;QAC5B,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,UAAU;KACrB,CAAC;;2CAC6B;AAG/B;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,qCAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;;wCAClC;AAGzB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;kBAhCL,OAAO;IAFnB,IAAA,gBAAM,EAAC,UAAU,CAAC;IAClB,IAAA,eAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;GACL,OAAO,CAiCnB"}
@@ -1,12 +1,17 @@
1
1
  import { ProjectsService } from './projects.service';
2
2
  import { CreateProjectDto } from './dto/create-project.dto';
3
3
  import { UpdateProjectDto } from './dto/update-project.dto';
4
+ import { AddMemberDto } from './dto/add-member.dto';
5
+ import { User } from '../users/entities/user.entity';
4
6
  export declare class ProjectsController {
5
7
  private readonly projectsService;
6
8
  constructor(projectsService: ProjectsService);
7
- create(createProjectDto: CreateProjectDto): Promise<import("./entities/project.entity").Project>;
8
- findAll(): Promise<import("./entities/project.entity").Project[]>;
9
- findOne(id: string): Promise<import("./entities/project.entity").Project>;
10
- update(id: string, updateProjectDto: UpdateProjectDto): Promise<import("./entities/project.entity").Project>;
11
- remove(id: string): Promise<void>;
9
+ create(createProjectDto: CreateProjectDto, user: User): Promise<import("./entities/project.entity").Project>;
10
+ findAll(user: User): Promise<import("./entities/project.entity").Project[]>;
11
+ findOne(id: string, user: User): Promise<import("./entities/project.entity").Project>;
12
+ update(id: string, updateProjectDto: UpdateProjectDto, user: User): Promise<import("./entities/project.entity").Project>;
13
+ remove(id: string, user: User): Promise<void>;
14
+ addMember(id: string, addMemberDto: AddMemberDto, user: User): Promise<import("./entities/project-member.entity").ProjectMember>;
15
+ getMembers(id: string, user: User): Promise<import("./entities/project-member.entity").ProjectMember[]>;
16
+ removeMember(id: string, userId: string, user: User): Promise<void>;
12
17
  }
@@ -18,25 +18,37 @@ const common_1 = require("@nestjs/common");
18
18
  const projects_service_1 = require("./projects.service");
19
19
  const create_project_dto_1 = require("./dto/create-project.dto");
20
20
  const update_project_dto_1 = require("./dto/update-project.dto");
21
+ const add_member_dto_1 = require("./dto/add-member.dto");
22
+ const current_user_decorator_1 = require("../auth/decorators/current-user.decorator");
23
+ const user_entity_1 = require("../users/entities/user.entity");
21
24
  let ProjectsController = class ProjectsController {
22
25
  projectsService;
23
26
  constructor(projectsService) {
24
27
  this.projectsService = projectsService;
25
28
  }
26
- create(createProjectDto) {
27
- return this.projectsService.create(createProjectDto);
29
+ create(createProjectDto, user) {
30
+ return this.projectsService.create(createProjectDto, user);
28
31
  }
29
- findAll() {
30
- return this.projectsService.findAll();
32
+ findAll(user) {
33
+ return this.projectsService.findAll(user);
31
34
  }
32
- findOne(id) {
33
- return this.projectsService.findOne(id);
35
+ findOne(id, user) {
36
+ return this.projectsService.findOne(id, user);
34
37
  }
35
- update(id, updateProjectDto) {
36
- return this.projectsService.update(id, updateProjectDto);
38
+ update(id, updateProjectDto, user) {
39
+ return this.projectsService.update(id, updateProjectDto, user);
37
40
  }
38
- remove(id) {
39
- return this.projectsService.remove(id);
41
+ remove(id, user) {
42
+ return this.projectsService.remove(id, user);
43
+ }
44
+ addMember(id, addMemberDto, user) {
45
+ return this.projectsService.addMember(id, addMemberDto, user);
46
+ }
47
+ getMembers(id, user) {
48
+ return this.projectsService.getMembers(id, user);
49
+ }
50
+ removeMember(id, userId, user) {
51
+ return this.projectsService.removeMember(id, userId, user);
40
52
  }
41
53
  };
42
54
  exports.ProjectsController = ProjectsController;
@@ -44,23 +56,27 @@ __decorate([
44
56
  (0, common_1.Post)(),
45
57
  openapi.ApiResponse({ status: 201, type: require("./entities/project.entity").Project }),
46
58
  __param(0, (0, common_1.Body)()),
59
+ __param(1, (0, current_user_decorator_1.CurrentUser)()),
47
60
  __metadata("design:type", Function),
48
- __metadata("design:paramtypes", [create_project_dto_1.CreateProjectDto]),
61
+ __metadata("design:paramtypes", [create_project_dto_1.CreateProjectDto,
62
+ user_entity_1.User]),
49
63
  __metadata("design:returntype", void 0)
50
64
  ], ProjectsController.prototype, "create", null);
51
65
  __decorate([
52
66
  (0, common_1.Get)(),
53
67
  openapi.ApiResponse({ status: 200, type: [require("./entities/project.entity").Project] }),
68
+ __param(0, (0, current_user_decorator_1.CurrentUser)()),
54
69
  __metadata("design:type", Function),
55
- __metadata("design:paramtypes", []),
70
+ __metadata("design:paramtypes", [user_entity_1.User]),
56
71
  __metadata("design:returntype", void 0)
57
72
  ], ProjectsController.prototype, "findAll", null);
58
73
  __decorate([
59
74
  (0, common_1.Get)(':id'),
60
75
  openapi.ApiResponse({ status: 200, type: require("./entities/project.entity").Project }),
61
76
  __param(0, (0, common_1.Param)('id')),
77
+ __param(1, (0, current_user_decorator_1.CurrentUser)()),
62
78
  __metadata("design:type", Function),
63
- __metadata("design:paramtypes", [String]),
79
+ __metadata("design:paramtypes", [String, user_entity_1.User]),
64
80
  __metadata("design:returntype", void 0)
65
81
  ], ProjectsController.prototype, "findOne", null);
66
82
  __decorate([
@@ -68,18 +84,51 @@ __decorate([
68
84
  openapi.ApiResponse({ status: 200, type: require("./entities/project.entity").Project }),
69
85
  __param(0, (0, common_1.Param)('id')),
70
86
  __param(1, (0, common_1.Body)()),
87
+ __param(2, (0, current_user_decorator_1.CurrentUser)()),
71
88
  __metadata("design:type", Function),
72
- __metadata("design:paramtypes", [String, update_project_dto_1.UpdateProjectDto]),
89
+ __metadata("design:paramtypes", [String, update_project_dto_1.UpdateProjectDto,
90
+ user_entity_1.User]),
73
91
  __metadata("design:returntype", void 0)
74
92
  ], ProjectsController.prototype, "update", null);
75
93
  __decorate([
76
94
  (0, common_1.Delete)(':id'),
77
95
  openapi.ApiResponse({ status: 200 }),
78
96
  __param(0, (0, common_1.Param)('id')),
97
+ __param(1, (0, current_user_decorator_1.CurrentUser)()),
79
98
  __metadata("design:type", Function),
80
- __metadata("design:paramtypes", [String]),
99
+ __metadata("design:paramtypes", [String, user_entity_1.User]),
81
100
  __metadata("design:returntype", void 0)
82
101
  ], ProjectsController.prototype, "remove", null);
102
+ __decorate([
103
+ (0, common_1.Post)(':id/members'),
104
+ openapi.ApiResponse({ status: 201, type: require("./entities/project-member.entity").ProjectMember }),
105
+ __param(0, (0, common_1.Param)('id')),
106
+ __param(1, (0, common_1.Body)()),
107
+ __param(2, (0, current_user_decorator_1.CurrentUser)()),
108
+ __metadata("design:type", Function),
109
+ __metadata("design:paramtypes", [String, add_member_dto_1.AddMemberDto,
110
+ user_entity_1.User]),
111
+ __metadata("design:returntype", void 0)
112
+ ], ProjectsController.prototype, "addMember", null);
113
+ __decorate([
114
+ (0, common_1.Get)(':id/members'),
115
+ openapi.ApiResponse({ status: 200, type: [require("./entities/project-member.entity").ProjectMember] }),
116
+ __param(0, (0, common_1.Param)('id')),
117
+ __param(1, (0, current_user_decorator_1.CurrentUser)()),
118
+ __metadata("design:type", Function),
119
+ __metadata("design:paramtypes", [String, user_entity_1.User]),
120
+ __metadata("design:returntype", void 0)
121
+ ], ProjectsController.prototype, "getMembers", null);
122
+ __decorate([
123
+ (0, common_1.Delete)(':id/members/:userId'),
124
+ openapi.ApiResponse({ status: 200 }),
125
+ __param(0, (0, common_1.Param)('id')),
126
+ __param(1, (0, common_1.Param)('userId')),
127
+ __param(2, (0, current_user_decorator_1.CurrentUser)()),
128
+ __metadata("design:type", Function),
129
+ __metadata("design:paramtypes", [String, String, user_entity_1.User]),
130
+ __metadata("design:returntype", void 0)
131
+ ], ProjectsController.prototype, "removeMember", null);
83
132
  exports.ProjectsController = ProjectsController = __decorate([
84
133
  (0, common_1.Controller)('projects'),
85
134
  __metadata("design:paramtypes", [projects_service_1.ProjectsService])
@@ -1 +1 @@
1
- {"version":3,"file":"projects.controller.js","sourceRoot":"","sources":["../../src/projects/projects.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,yDAAqD;AACrD,iEAA4D;AAC5D,iEAA4D;AAGrD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACA;IAA7B,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAGjE,MAAM,CAAS,gBAAkC;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAGD,OAAO;QACL,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAGD,OAAO,CAAc,EAAU;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAGD,MAAM,CAAc,EAAU,EAAU,gBAAkC;QACxE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IAGD,MAAM,CAAc,EAAU;QAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;CACF,CAAA;AA3BY,gDAAkB;AAI7B;IADC,IAAA,aAAI,GAAE;;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAmB,qCAAgB;;gDAEhD;AAGD;IADC,IAAA,YAAG,GAAE;;;;;iDAGL;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;;IACF,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;iDAEnB;AAGD;IADC,IAAA,cAAK,EAAC,KAAK,CAAC;;IACL,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAmB,qCAAgB;;gDAEzE;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;gDAElB;6BA1BU,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,UAAU,CAAC;qCAEyB,kCAAe;GADlD,kBAAkB,CA2B9B"}
1
+ {"version":3,"file":"projects.controller.js","sourceRoot":"","sources":["../../src/projects/projects.controller.ts"],"names":[],"mappings":"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"}
@@ -12,13 +12,17 @@ const typeorm_1 = require("@nestjs/typeorm");
12
12
  const projects_service_1 = require("./projects.service");
13
13
  const projects_controller_1 = require("./projects.controller");
14
14
  const project_entity_1 = require("./entities/project.entity");
15
+ const project_member_entity_1 = require("./entities/project-member.entity");
15
16
  const agent_entity_1 = require("../agents/entities/agent.entity");
17
+ const user_entity_1 = require("../users/entities/user.entity");
16
18
  let ProjectsModule = class ProjectsModule {
17
19
  };
18
20
  exports.ProjectsModule = ProjectsModule;
19
21
  exports.ProjectsModule = ProjectsModule = __decorate([
20
22
  (0, common_1.Module)({
21
- imports: [typeorm_1.TypeOrmModule.forFeature([project_entity_1.Project, agent_entity_1.AgentEntity])],
23
+ imports: [
24
+ typeorm_1.TypeOrmModule.forFeature([project_entity_1.Project, project_member_entity_1.ProjectMember, agent_entity_1.AgentEntity, user_entity_1.User]),
25
+ ],
22
26
  controllers: [projects_controller_1.ProjectsController],
23
27
  providers: [projects_service_1.ProjectsService],
24
28
  exports: [projects_service_1.ProjectsService],
@@ -1 +1 @@
1
- {"version":3,"file":"projects.module.js","sourceRoot":"","sources":["../../src/projects/projects.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,yDAAqD;AACrD,+DAA2D;AAC3D,8DAAoD;AACpD,kEAA8D;AAQvD,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,wBAAO,EAAE,0BAAW,CAAC,CAAC,CAAC;QAC3D,WAAW,EAAE,CAAC,wCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
1
+ {"version":3,"file":"projects.module.js","sourceRoot":"","sources":["../../src/projects/projects.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,yDAAqD;AACrD,+DAA2D;AAC3D,8DAAoD;AACpD,4EAAiE;AACjE,kEAA8D;AAC9D,+DAAqD;AAU9C,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAR1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,wBAAO,EAAE,qCAAa,EAAE,0BAAW,EAAE,kBAAI,CAAC,CAAC;SACtE;QACD,WAAW,EAAE,CAAC,wCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
@@ -1,13 +1,21 @@
1
1
  import { Repository } from 'typeorm';
2
2
  import { CreateProjectDto } from './dto/create-project.dto';
3
3
  import { UpdateProjectDto } from './dto/update-project.dto';
4
+ import { AddMemberDto } from './dto/add-member.dto';
4
5
  import { Project } from './entities/project.entity';
6
+ import { ProjectMember } from './entities/project-member.entity';
7
+ import { User } from '../users/entities/user.entity';
5
8
  export declare class ProjectsService {
6
9
  private readonly projectsRepository;
7
- constructor(projectsRepository: Repository<Project>);
8
- create(createProjectDto: CreateProjectDto): Promise<Project>;
9
- findAll(): Promise<Project[]>;
10
- findOne(id: string): Promise<Project>;
11
- update(id: string, updateProjectDto: UpdateProjectDto): Promise<Project>;
12
- remove(id: string): Promise<void>;
10
+ private readonly memberRepository;
11
+ private readonly userRepository;
12
+ constructor(projectsRepository: Repository<Project>, memberRepository: Repository<ProjectMember>, userRepository: Repository<User>);
13
+ create(createProjectDto: CreateProjectDto, user: User): Promise<Project>;
14
+ findAll(user: User): Promise<Project[]>;
15
+ findOne(id: string, user: User): Promise<Project>;
16
+ update(id: string, updateProjectDto: UpdateProjectDto, user: User): Promise<Project>;
17
+ remove(id: string, user: User): Promise<void>;
18
+ addMember(projectId: string, addMemberDto: AddMemberDto, user: User): Promise<ProjectMember>;
19
+ removeMember(projectId: string, targetUserId: string, user: User): Promise<void>;
20
+ getMembers(projectId: string, user: User): Promise<ProjectMember[]>;
13
21
  }
@@ -17,12 +17,18 @@ const common_1 = require("@nestjs/common");
17
17
  const typeorm_1 = require("@nestjs/typeorm");
18
18
  const typeorm_2 = require("typeorm");
19
19
  const project_entity_1 = require("./entities/project.entity");
20
+ const project_member_entity_1 = require("./entities/project-member.entity");
21
+ const user_entity_1 = require("../users/entities/user.entity");
20
22
  let ProjectsService = class ProjectsService {
21
23
  projectsRepository;
22
- constructor(projectsRepository) {
24
+ memberRepository;
25
+ userRepository;
26
+ constructor(projectsRepository, memberRepository, userRepository) {
23
27
  this.projectsRepository = projectsRepository;
28
+ this.memberRepository = memberRepository;
29
+ this.userRepository = userRepository;
24
30
  }
25
- async create(createProjectDto) {
31
+ async create(createProjectDto, user) {
26
32
  return this.projectsRepository.manager.transaction(async (manager) => {
27
33
  const project = manager.create(project_entity_1.Project, {
28
34
  title: createProjectDto.title,
@@ -32,25 +38,58 @@ let ProjectsService = class ProjectsService {
32
38
  ? { id: createProjectDto.ownerAgentId }
33
39
  : null,
34
40
  });
35
- return manager.save(project);
41
+ const savedProject = await manager.save(project);
42
+ const membership = manager.create(project_member_entity_1.ProjectMember, {
43
+ project: savedProject,
44
+ user: { id: user.id },
45
+ role: project_member_entity_1.ProjectMemberRole.OWNER,
46
+ });
47
+ await manager.save(membership);
48
+ return savedProject;
36
49
  });
37
50
  }
38
- async findAll() {
39
- return this.projectsRepository.find();
51
+ async findAll(user) {
52
+ if (user.role === user_entity_1.UserRole.ADMIN) {
53
+ return this.projectsRepository.find();
54
+ }
55
+ return this.projectsRepository
56
+ .createQueryBuilder('project')
57
+ .innerJoin('project.members', 'pm', 'pm.userId = :userId', {
58
+ userId: user.id,
59
+ })
60
+ .getMany();
40
61
  }
41
- async findOne(id) {
42
- const project = await this.projectsRepository.findOne({ where: { id } });
62
+ async findOne(id, user) {
63
+ const project = await this.projectsRepository.findOne({
64
+ where: { id },
65
+ relations: ['members', 'members.user'],
66
+ });
43
67
  if (!project) {
44
68
  throw new common_1.NotFoundException(`Project with ID ${id} not found`);
45
69
  }
70
+ if (user.role !== user_entity_1.UserRole.ADMIN) {
71
+ const isMember = project.members.some((m) => m.user.id === user.id);
72
+ if (!isMember) {
73
+ throw new common_1.ForbiddenException('Access denied');
74
+ }
75
+ }
46
76
  return project;
47
77
  }
48
- async update(id, updateProjectDto) {
78
+ async update(id, updateProjectDto, user) {
49
79
  return this.projectsRepository.manager.transaction(async (manager) => {
50
- const project = await manager.findOne(project_entity_1.Project, { where: { id } });
80
+ const project = await manager.findOne(project_entity_1.Project, {
81
+ where: { id },
82
+ relations: ['members', 'members.user'],
83
+ });
51
84
  if (!project) {
52
85
  throw new common_1.NotFoundException(`Project with ID ${id} not found`);
53
86
  }
87
+ if (user.role !== user_entity_1.UserRole.ADMIN) {
88
+ const isMember = project.members.some((m) => m.user.id === user.id);
89
+ if (!isMember) {
90
+ throw new common_1.ForbiddenException('Access denied');
91
+ }
92
+ }
54
93
  if (updateProjectDto.title !== undefined)
55
94
  project.title = updateProjectDto.title;
56
95
  if (updateProjectDto.description !== undefined)
@@ -65,15 +104,89 @@ let ProjectsService = class ProjectsService {
65
104
  return manager.save(project);
66
105
  });
67
106
  }
68
- async remove(id) {
69
- const project = await this.findOne(id);
107
+ async remove(id, user) {
108
+ const project = await this.projectsRepository.findOne({
109
+ where: { id },
110
+ relations: ['members', 'members.user'],
111
+ });
112
+ if (!project) {
113
+ throw new common_1.NotFoundException(`Project with ID ${id} not found`);
114
+ }
115
+ if (user.role !== user_entity_1.UserRole.ADMIN) {
116
+ const ownership = project.members.find((m) => m.user.id === user.id && m.role === project_member_entity_1.ProjectMemberRole.OWNER);
117
+ if (!ownership) {
118
+ throw new common_1.ForbiddenException('Only the project owner can delete this project');
119
+ }
120
+ }
70
121
  await this.projectsRepository.remove(project);
71
122
  }
123
+ async addMember(projectId, addMemberDto, user) {
124
+ const project = await this.projectsRepository.findOne({
125
+ where: { id: projectId },
126
+ relations: ['members', 'members.user'],
127
+ });
128
+ if (!project) {
129
+ throw new common_1.NotFoundException(`Project with ID ${projectId} not found`);
130
+ }
131
+ if (user.role !== user_entity_1.UserRole.ADMIN) {
132
+ const ownership = project.members.find((m) => m.user.id === user.id && m.role === project_member_entity_1.ProjectMemberRole.OWNER);
133
+ if (!ownership) {
134
+ throw new common_1.ForbiddenException('Only the project owner can manage members');
135
+ }
136
+ }
137
+ const existing = project.members.find((m) => m.user.id === addMemberDto.userId);
138
+ if (existing) {
139
+ throw new common_1.ConflictException('User is already a member of this project');
140
+ }
141
+ const targetUser = await this.userRepository.findOne({
142
+ where: { id: addMemberDto.userId },
143
+ });
144
+ if (!targetUser) {
145
+ throw new common_1.NotFoundException(`User with ID ${addMemberDto.userId} not found`);
146
+ }
147
+ const membership = this.memberRepository.create({
148
+ project: { id: projectId },
149
+ user: targetUser,
150
+ role: addMemberDto.role ?? project_member_entity_1.ProjectMemberRole.MEMBER,
151
+ });
152
+ return this.memberRepository.save(membership);
153
+ }
154
+ async removeMember(projectId, targetUserId, user) {
155
+ const project = await this.projectsRepository.findOne({
156
+ where: { id: projectId },
157
+ relations: ['members', 'members.user'],
158
+ });
159
+ if (!project) {
160
+ throw new common_1.NotFoundException(`Project with ID ${projectId} not found`);
161
+ }
162
+ if (user.role !== user_entity_1.UserRole.ADMIN) {
163
+ const ownership = project.members.find((m) => m.user.id === user.id && m.role === project_member_entity_1.ProjectMemberRole.OWNER);
164
+ if (!ownership) {
165
+ throw new common_1.ForbiddenException('Only the project owner can manage members');
166
+ }
167
+ }
168
+ const membership = project.members.find((m) => m.user.id === targetUserId);
169
+ if (!membership) {
170
+ throw new common_1.NotFoundException('User is not a member of this project');
171
+ }
172
+ if (membership.role === project_member_entity_1.ProjectMemberRole.OWNER) {
173
+ throw new common_1.ForbiddenException('Cannot remove the project owner');
174
+ }
175
+ await this.memberRepository.remove(membership);
176
+ }
177
+ async getMembers(projectId, user) {
178
+ const project = await this.findOne(projectId, user);
179
+ return project.members;
180
+ }
72
181
  };
73
182
  exports.ProjectsService = ProjectsService;
74
183
  exports.ProjectsService = ProjectsService = __decorate([
75
184
  (0, common_1.Injectable)(),
76
185
  __param(0, (0, typeorm_1.InjectRepository)(project_entity_1.Project)),
77
- __metadata("design:paramtypes", [typeorm_2.Repository])
186
+ __param(1, (0, typeorm_1.InjectRepository)(project_member_entity_1.ProjectMember)),
187
+ __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
188
+ __metadata("design:paramtypes", [typeorm_2.Repository,
189
+ typeorm_2.Repository,
190
+ typeorm_2.Repository])
78
191
  ], ProjectsService);
79
192
  //# sourceMappingURL=projects.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.service.js","sourceRoot":"","sources":["../../src/projects/projects.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.service.js","sourceRoot":"","sources":["../../src/projects/projects.service.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ const common_1 = require("@nestjs/common");
18
18
  const providers_service_1 = require("./providers.service");
19
19
  const create_provider_dto_1 = require("./dto/create-provider.dto");
20
20
  const update_provider_dto_1 = require("./dto/update-provider.dto");
21
+ const roles_decorator_1 = require("../auth/decorators/roles.decorator");
22
+ const user_entity_1 = require("../users/entities/user.entity");
21
23
  let ProvidersController = class ProvidersController {
22
24
  providersService;
23
25
  constructor(providersService) {
@@ -44,6 +46,7 @@ let ProvidersController = class ProvidersController {
44
46
  };
45
47
  exports.ProvidersController = ProvidersController;
46
48
  __decorate([
49
+ (0, roles_decorator_1.Roles)(user_entity_1.UserRole.ADMIN),
47
50
  (0, common_1.Post)(),
48
51
  openapi.ApiResponse({ status: 201, type: require("./entities/provider.entity").Provider }),
49
52
  __param(0, (0, common_1.Body)()),
@@ -75,6 +78,7 @@ __decorate([
75
78
  __metadata("design:returntype", void 0)
76
79
  ], ProvidersController.prototype, "findModels", null);
77
80
  __decorate([
81
+ (0, roles_decorator_1.Roles)(user_entity_1.UserRole.ADMIN),
78
82
  (0, common_1.Patch)(':id'),
79
83
  openapi.ApiResponse({ status: 200, type: require("./entities/provider.entity").Provider }),
80
84
  __param(0, (0, common_1.Param)('id')),
@@ -84,6 +88,7 @@ __decorate([
84
88
  __metadata("design:returntype", void 0)
85
89
  ], ProvidersController.prototype, "update", null);
86
90
  __decorate([
91
+ (0, roles_decorator_1.Roles)(user_entity_1.UserRole.ADMIN),
87
92
  (0, common_1.Delete)(':id'),
88
93
  openapi.ApiResponse({ status: 200 }),
89
94
  __param(0, (0, common_1.Param)('id')),
@@ -1 +1 @@
1
- {"version":3,"file":"providers.controller.js","sourceRoot":"","sources":["../../src/providers/providers.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,2DAAuD;AACvD,mEAA8D;AAC9D,mEAA8D;AAGvD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACD;IAA7B,YAA6B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;IAAG,CAAC;IAGnE,MAAM,CAAS,iBAAoC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;IAGD,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAGD,OAAO,CAAc,EAAU;QAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAGD,UAAU,CAAc,EAAU;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAGD,MAAM,CACS,EAAU,EACf,iBAAoC;QAE5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAGD,MAAM,CAAc,EAAU;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AAnCY,kDAAmB;AAI9B;IADC,IAAA,aAAI,GAAE;;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAoB,uCAAiB;;iDAElD;AAGD;IADC,IAAA,YAAG,GAAE;;;;;kDAGL;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;;IACF,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;kDAEnB;AAGD;IADC,IAAA,YAAG,EAAC,YAAY,CAAC;;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;qDAEtB;AAGD;IADC,IAAA,cAAK,EAAC,KAAK,CAAC;;IAEV,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAoB,uCAAiB;;iDAG7C;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;iDAElB;8BAlCU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,WAAW,CAAC;qCAEyB,oCAAgB;GADpD,mBAAmB,CAmC/B"}
1
+ {"version":3,"file":"providers.controller.js","sourceRoot":"","sources":["../../src/providers/providers.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,2DAAuD;AACvD,mEAA8D;AAC9D,mEAA8D;AAC9D,wEAA2D;AAC3D,+DAAyD;AAGlD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACD;IAA7B,YAA6B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;IAAG,CAAC;IAInE,MAAM,CAAS,iBAAoC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;IAGD,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAGD,OAAO,CAAc,EAAU;QAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAGD,UAAU,CAAc,EAAU;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAID,MAAM,CACS,EAAU,EACf,iBAAoC;QAE5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAID,MAAM,CAAc,EAAU;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AAtCY,kDAAmB;AAK9B;IAFC,IAAA,uBAAK,EAAC,sBAAQ,CAAC,KAAK,CAAC;IACrB,IAAA,aAAI,GAAE;;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAoB,uCAAiB;;iDAElD;AAGD;IADC,IAAA,YAAG,GAAE;;;;;kDAGL;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;;IACF,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;kDAEnB;AAGD;IADC,IAAA,YAAG,EAAC,YAAY,CAAC;;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;qDAEtB;AAID;IAFC,IAAA,uBAAK,EAAC,sBAAQ,CAAC,KAAK,CAAC;IACrB,IAAA,cAAK,EAAC,KAAK,CAAC;;IAEV,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAoB,uCAAiB;;iDAG7C;AAID;IAFC,IAAA,uBAAK,EAAC,sBAAQ,CAAC,KAAK,CAAC;IACrB,IAAA,eAAM,EAAC,KAAK,CAAC;;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;iDAElB;8BArCU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,WAAW,CAAC;qCAEyB,oCAAgB;GADpD,mBAAmB,CAsC/B"}
@@ -38,6 +38,7 @@ __decorate([
38
38
  __metadata("design:type", String)
39
39
  ], RecurrentTaskExec.prototype, "id", void 0);
40
40
  __decorate([
41
+ (0, typeorm_1.Index)(),
41
42
  (0, typeorm_1.ManyToOne)(() => recurrent_task_entity_1.RecurrentTask, (rt) => rt.executions, {
42
43
  nullable: false,
43
44
  onDelete: 'CASCADE',
@@ -1 +1 @@
1
- {"version":3,"file":"recurrent-task-exec.entity.js","sourceRoot":"","sources":["../../../src/tasks/entities/recurrent-task-exec.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAOiB;AACjB,mEAAwD;AAExD,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;AACvB,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,EAAE,CAAS;IAMX,aAAa,CAAgB;IAO7B,MAAM,CAAa;IAGnB,MAAM,CAAS;IAGf,SAAS,CAAS;IAGlB,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AA5BY,8CAAiB;AAE5B;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;6CACpB;AAMX;IAJC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,qCAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE;QACrD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,SAAS;KACpB,CAAC;8BACa,qCAAa;wDAAC;AAO7B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;;iDACiB;AAGnB;IADC,IAAA,gBAAM,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACpB;AAGf;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDAChB;AAGlB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;oDAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;oDAAC;4BA3BL,iBAAiB;IAD7B,IAAA,gBAAM,EAAC,sBAAsB,CAAC;GAClB,iBAAiB,CA4B7B"}
1
+ {"version":3,"file":"recurrent-task-exec.entity.js","sourceRoot":"","sources":["../../../src/tasks/entities/recurrent-task-exec.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAQiB;AACjB,mEAAwD;AAExD,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;AACvB,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,EAAE,CAAS;IAOX,aAAa,CAAgB;IAO7B,MAAM,CAAa;IAGnB,MAAM,CAAS;IAGf,SAAS,CAAS;IAGlB,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AA7BY,8CAAiB;AAE5B;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;6CACpB;AAOX;IALC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,qCAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE;QACrD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,SAAS;KACpB,CAAC;8BACa,qCAAa;wDAAC;AAO7B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;;iDACiB;AAGnB;IADC,IAAA,gBAAM,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACpB;AAGf;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDAChB;AAGlB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;oDAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;oDAAC;4BA5BL,iBAAiB;IAD7B,IAAA,gBAAM,EAAC,sBAAsB,CAAC;GAClB,iBAAiB,CA6B7B"}
@@ -1,6 +1,7 @@
1
1
  import { AgentEntity } from '../../agents/entities/agent.entity';
2
2
  import { RecurrentTaskExec } from './recurrent-task-exec.entity';
3
3
  import { TaskPriority } from './task.entity';
4
+ import { Project } from '../../projects/entities/project.entity';
4
5
  export declare enum RecurrentTaskStatus {
5
6
  ACTIVE = "active",
6
7
  PAUSED = "paused",
@@ -14,6 +15,7 @@ export declare class RecurrentTask {
14
15
  priority: TaskPriority;
15
16
  cronExpression: string;
16
17
  assignee: AgentEntity;
18
+ project: Project | null;
17
19
  executions: RecurrentTaskExec[];
18
20
  createdAt: Date;
19
21
  updatedAt: Date;
@@ -15,6 +15,7 @@ const typeorm_1 = require("typeorm");
15
15
  const agent_entity_1 = require("../../agents/entities/agent.entity");
16
16
  const recurrent_task_exec_entity_1 = require("./recurrent-task-exec.entity");
17
17
  const task_entity_1 = require("./task.entity");
18
+ const project_entity_1 = require("../../projects/entities/project.entity");
18
19
  var RecurrentTaskStatus;
19
20
  (function (RecurrentTaskStatus) {
20
21
  RecurrentTaskStatus["ACTIVE"] = "active";
@@ -29,11 +30,12 @@ let RecurrentTask = class RecurrentTask {
29
30
  priority;
30
31
  cronExpression;
31
32
  assignee;
33
+ project;
32
34
  executions;
33
35
  createdAt;
34
36
  updatedAt;
35
37
  static _OPENAPI_METADATA_FACTORY() {
36
- return { id: { required: true, type: () => String }, title: { required: true, type: () => String }, description: { required: true, type: () => String }, status: { required: true, enum: require("./recurrent-task.entity").RecurrentTaskStatus }, priority: { required: true, enum: require("./task.entity").TaskPriority }, cronExpression: { required: true, type: () => String }, assignee: { required: true, type: () => require("../../agents/entities/agent.entity").AgentEntity }, executions: { required: true, type: () => [require("./recurrent-task-exec.entity").RecurrentTaskExec] }, createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date } };
38
+ return { id: { required: true, type: () => String }, title: { required: true, type: () => String }, description: { required: true, type: () => String }, status: { required: true, enum: require("./recurrent-task.entity").RecurrentTaskStatus }, priority: { required: true, enum: require("./task.entity").TaskPriority }, cronExpression: { required: true, type: () => String }, assignee: { required: true, type: () => require("../../agents/entities/agent.entity").AgentEntity }, project: { required: true, type: () => require("../../projects/entities/project.entity").Project, nullable: true }, executions: { required: true, type: () => [require("./recurrent-task-exec.entity").RecurrentTaskExec] }, createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date } };
37
39
  }
38
40
  };
39
41
  exports.RecurrentTask = RecurrentTask;
@@ -77,6 +79,15 @@ __decorate([
77
79
  }),
78
80
  __metadata("design:type", agent_entity_1.AgentEntity)
79
81
  ], RecurrentTask.prototype, "assignee", void 0);
82
+ __decorate([
83
+ (0, typeorm_1.Index)(),
84
+ (0, typeorm_1.ManyToOne)(() => project_entity_1.Project, {
85
+ nullable: true,
86
+ eager: false,
87
+ onDelete: 'CASCADE',
88
+ }),
89
+ __metadata("design:type", Object)
90
+ ], RecurrentTask.prototype, "project", void 0);
80
91
  __decorate([
81
92
  (0, typeorm_1.OneToMany)(() => recurrent_task_exec_entity_1.RecurrentTaskExec, (exec) => exec.recurrentTask),
82
93
  __metadata("design:type", Array)
@@ -90,6 +101,7 @@ __decorate([
90
101
  __metadata("design:type", Date)
91
102
  ], RecurrentTask.prototype, "updatedAt", void 0);
92
103
  exports.RecurrentTask = RecurrentTask = __decorate([
93
- (0, typeorm_1.Entity)('recurrent_tasks')
104
+ (0, typeorm_1.Entity)('recurrent_tasks'),
105
+ (0, typeorm_1.Index)(['status'])
94
106
  ], RecurrentTask);
95
107
  //# sourceMappingURL=recurrent-task.entity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recurrent-task.entity.js","sourceRoot":"","sources":["../../../src/tasks/entities/recurrent-task.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAQiB;AACjB,qEAAiE;AACjE,6EAAiE;AACjE,+CAA6C;AAE7C,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,wCAAiB,CAAA;IACjB,sCAAe,CAAA;AACjB,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAS;IAGX,KAAK,CAAS;IAGd,WAAW,CAAS;IAOpB,MAAM,CAAsB;IAO5B,QAAQ,CAAe;IAGvB,cAAc,CAAS;IAOvB,QAAQ,CAAc;IAGtB,UAAU,CAAsB;IAGhC,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AA1CY,sCAAa;AAExB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;yCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;4CACK;AAGd;IADC,IAAA,gBAAM,EAAC,MAAM,CAAC;;kDACK;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,mBAAmB,CAAC,MAAM;KACpC,CAAC;;6CAC0B;AAO5B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,0BAAY;QAClB,OAAO,EAAE,0BAAY,CAAC,MAAM;KAC7B,CAAC;;+CACqB;AAGvB;IADC,IAAA,gBAAM,GAAE;;qDACc;AAOvB;IALC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,EAAE;QAC5B,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;8BACQ,0BAAW;+CAAC;AAGtB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,8CAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;;iDACjC;AAGhC;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;gDAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;gDAAC;wBAzCL,aAAa;IADzB,IAAA,gBAAM,EAAC,iBAAiB,CAAC;GACb,aAAa,CA0CzB"}
1
+ {"version":3,"file":"recurrent-task.entity.js","sourceRoot":"","sources":["../../../src/tasks/entities/recurrent-task.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCASiB;AACjB,qEAAiE;AACjE,6EAAiE;AACjE,+CAA6C;AAC7C,2EAAiE;AAEjE,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,wCAAiB,CAAA;IACjB,sCAAe,CAAA;AACjB,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B;AAIM,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAS;IAGX,KAAK,CAAS;IAGd,WAAW,CAAS;IAOpB,MAAM,CAAsB;IAO5B,QAAQ,CAAe;IAGvB,cAAc,CAAS;IAOvB,QAAQ,CAAc;IAQtB,OAAO,CAAiB;IAGxB,UAAU,CAAsB;IAGhC,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB,CAAA;AAlDY,sCAAa;AAExB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;yCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;4CACK;AAGd;IADC,IAAA,gBAAM,EAAC,MAAM,CAAC;;kDACK;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,mBAAmB,CAAC,MAAM;KACpC,CAAC;;6CAC0B;AAO5B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,0BAAY;QAClB,OAAO,EAAE,0BAAY,CAAC,MAAM;KAC7B,CAAC;;+CACqB;AAGvB;IADC,IAAA,gBAAM,GAAE;;qDACc;AAOvB;IALC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,EAAE;QAC5B,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;8BACQ,0BAAW;+CAAC;AAQtB;IANC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,wBAAO,EAAE;QACxB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;KACpB,CAAC;;8CACsB;AAGxB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,8CAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;;iDACjC;AAGhC;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;gDAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;gDAAC;wBAjDL,aAAa;IAFzB,IAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB,IAAA,eAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;GACL,aAAa,CAkDzB"}