@meridianjs/meridian 1.31.0 → 2.1.0

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 (171) hide show
  1. package/dist/api/admin/events/route.d.ts.map +1 -1
  2. package/dist/api/admin/events/route.js +15 -8
  3. package/dist/api/admin/events/route.js.map +1 -1
  4. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.d.ts.map +1 -1
  5. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.js +34 -31
  6. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.js.map +1 -1
  7. package/dist/api/admin/issues/[id]/attachments/route.d.ts.map +1 -1
  8. package/dist/api/admin/issues/[id]/attachments/route.js +47 -22
  9. package/dist/api/admin/issues/[id]/attachments/route.js.map +1 -1
  10. package/dist/api/admin/issues/[id]/comments/route.d.ts.map +1 -1
  11. package/dist/api/admin/issues/[id]/comments/route.js +20 -17
  12. package/dist/api/admin/issues/[id]/comments/route.js.map +1 -1
  13. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.d.ts.map +1 -1
  14. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.js +63 -60
  15. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.js.map +1 -1
  16. package/dist/api/admin/issues/[id]/time-logs/route.d.ts.map +1 -1
  17. package/dist/api/admin/issues/[id]/time-logs/route.js +42 -17
  18. package/dist/api/admin/issues/[id]/time-logs/route.js.map +1 -1
  19. package/dist/api/admin/issues/[id]/time-logs/timer/route.d.ts.map +1 -1
  20. package/dist/api/admin/issues/[id]/time-logs/timer/route.js +49 -24
  21. package/dist/api/admin/issues/[id]/time-logs/timer/route.js.map +1 -1
  22. package/dist/api/admin/issues/route.d.ts.map +1 -1
  23. package/dist/api/admin/issues/route.js +2 -7
  24. package/dist/api/admin/issues/route.js.map +1 -1
  25. package/dist/api/admin/my/tasks/route.d.ts.map +1 -1
  26. package/dist/api/admin/my/tasks/route.js +16 -24
  27. package/dist/api/admin/my/tasks/route.js.map +1 -1
  28. package/dist/api/admin/projects/[id]/access/route.d.ts.map +1 -1
  29. package/dist/api/admin/projects/[id]/access/route.js +15 -2
  30. package/dist/api/admin/projects/[id]/access/route.js.map +1 -1
  31. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.d.ts +4 -0
  32. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.d.ts.map +1 -0
  33. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.js +105 -0
  34. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.js.map +1 -0
  35. package/dist/api/admin/projects/[id]/access-requests/route.d.ts +5 -0
  36. package/dist/api/admin/projects/[id]/access-requests/route.d.ts.map +1 -0
  37. package/dist/api/admin/projects/[id]/access-requests/route.js +138 -0
  38. package/dist/api/admin/projects/[id]/access-requests/route.js.map +1 -0
  39. package/dist/api/admin/projects/[id]/health/[updateId]/route.d.ts.map +1 -1
  40. package/dist/api/admin/projects/[id]/health/[updateId]/route.js +83 -73
  41. package/dist/api/admin/projects/[id]/health/[updateId]/route.js.map +1 -1
  42. package/dist/api/admin/projects/[id]/health/[updateId]/send/route.d.ts.map +1 -1
  43. package/dist/api/admin/projects/[id]/health/[updateId]/send/route.js +68 -65
  44. package/dist/api/admin/projects/[id]/health/[updateId]/send/route.js.map +1 -1
  45. package/dist/api/admin/projects/[id]/health/route.d.ts.map +1 -1
  46. package/dist/api/admin/projects/[id]/health/route.js +33 -30
  47. package/dist/api/admin/projects/[id]/health/route.js.map +1 -1
  48. package/dist/api/admin/projects/[id]/share/route.d.ts.map +1 -1
  49. package/dist/api/admin/projects/[id]/share/route.js +44 -39
  50. package/dist/api/admin/projects/[id]/share/route.js.map +1 -1
  51. package/dist/api/admin/projects/[id]/statuses/[statusId]/route.d.ts.map +1 -1
  52. package/dist/api/admin/projects/[id]/statuses/[statusId]/route.js +77 -72
  53. package/dist/api/admin/projects/[id]/statuses/[statusId]/route.js.map +1 -1
  54. package/dist/api/admin/projects/[id]/statuses/reorder/route.d.ts.map +1 -1
  55. package/dist/api/admin/projects/[id]/statuses/reorder/route.js +20 -17
  56. package/dist/api/admin/projects/[id]/statuses/reorder/route.js.map +1 -1
  57. package/dist/api/admin/projects/[id]/statuses/route.d.ts.map +1 -1
  58. package/dist/api/admin/projects/[id]/statuses/route.js +23 -20
  59. package/dist/api/admin/projects/[id]/statuses/route.js.map +1 -1
  60. package/dist/api/admin/projects/[id]/task-lists/route.d.ts.map +1 -1
  61. package/dist/api/admin/projects/[id]/task-lists/route.js +22 -19
  62. package/dist/api/admin/projects/[id]/task-lists/route.js.map +1 -1
  63. package/dist/api/admin/projects/route.d.ts.map +1 -1
  64. package/dist/api/admin/projects/route.js +58 -40
  65. package/dist/api/admin/projects/route.js.map +1 -1
  66. package/dist/api/admin/reporting/members/route.d.ts.map +1 -1
  67. package/dist/api/admin/reporting/members/route.js +2 -6
  68. package/dist/api/admin/reporting/members/route.js.map +1 -1
  69. package/dist/api/admin/reporting/time-logs/route.d.ts.map +1 -1
  70. package/dist/api/admin/reporting/time-logs/route.js +11 -26
  71. package/dist/api/admin/reporting/time-logs/route.js.map +1 -1
  72. package/dist/api/admin/task-lists/[id]/route.d.ts.map +1 -1
  73. package/dist/api/admin/task-lists/[id]/route.js +44 -39
  74. package/dist/api/admin/task-lists/[id]/route.js.map +1 -1
  75. package/dist/api/admin/time-logs/active-timer/route.d.ts.map +1 -1
  76. package/dist/api/admin/time-logs/active-timer/route.js +14 -11
  77. package/dist/api/admin/time-logs/active-timer/route.js.map +1 -1
  78. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.d.ts +1 -0
  79. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.d.ts.map +1 -1
  80. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.js +35 -15
  81. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.js.map +1 -1
  82. package/dist/api/admin/workspaces/[id]/access-requests/route.d.ts.map +1 -1
  83. package/dist/api/admin/workspaces/[id]/access-requests/route.js +5 -19
  84. package/dist/api/admin/workspaces/[id]/access-requests/route.js.map +1 -1
  85. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.d.ts.map +1 -1
  86. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.js +1 -15
  87. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.js.map +1 -1
  88. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.d.ts.map +1 -1
  89. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.js +1 -15
  90. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.js.map +1 -1
  91. package/dist/api/admin/workspaces/[id]/invitations/route.d.ts.map +1 -1
  92. package/dist/api/admin/workspaces/[id]/invitations/route.js +49 -65
  93. package/dist/api/admin/workspaces/[id]/invitations/route.js.map +1 -1
  94. package/dist/api/admin/workspaces/[id]/logo/route.d.ts.map +1 -1
  95. package/dist/api/admin/workspaces/[id]/logo/route.js +1 -15
  96. package/dist/api/admin/workspaces/[id]/logo/route.js.map +1 -1
  97. package/dist/api/admin/workspaces/[id]/members/[userId]/route.d.ts.map +1 -1
  98. package/dist/api/admin/workspaces/[id]/members/[userId]/route.js +1 -19
  99. package/dist/api/admin/workspaces/[id]/members/[userId]/route.js.map +1 -1
  100. package/dist/api/admin/workspaces/[id]/members/batch/route.d.ts.map +1 -1
  101. package/dist/api/admin/workspaces/[id]/members/batch/route.js +48 -56
  102. package/dist/api/admin/workspaces/[id]/members/batch/route.js.map +1 -1
  103. package/dist/api/admin/workspaces/[id]/members/route.d.ts.map +1 -1
  104. package/dist/api/admin/workspaces/[id]/members/route.js +43 -60
  105. package/dist/api/admin/workspaces/[id]/members/route.js.map +1 -1
  106. package/dist/api/admin/workspaces/[id]/route.d.ts.map +1 -1
  107. package/dist/api/admin/workspaces/[id]/route.js +3 -22
  108. package/dist/api/admin/workspaces/[id]/route.js.map +1 -1
  109. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/[userId]/route.d.ts.map +1 -1
  110. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/[userId]/route.js +1 -19
  111. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/[userId]/route.js.map +1 -1
  112. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/route.d.ts.map +1 -1
  113. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/route.js +1 -19
  114. package/dist/api/admin/workspaces/[id]/teams/[teamId]/members/route.js.map +1 -1
  115. package/dist/api/admin/workspaces/[id]/teams/[teamId]/route.d.ts.map +1 -1
  116. package/dist/api/admin/workspaces/[id]/teams/[teamId]/route.js +1 -19
  117. package/dist/api/admin/workspaces/[id]/teams/[teamId]/route.js.map +1 -1
  118. package/dist/api/admin/workspaces/[id]/teams/route.d.ts.map +1 -1
  119. package/dist/api/admin/workspaces/[id]/teams/route.js +1 -19
  120. package/dist/api/admin/workspaces/[id]/teams/route.js.map +1 -1
  121. package/dist/api/admin/workspaces/my-access-requests/route.d.ts +3 -0
  122. package/dist/api/admin/workspaces/my-access-requests/route.d.ts.map +1 -0
  123. package/dist/api/admin/workspaces/my-access-requests/route.js +20 -0
  124. package/dist/api/admin/workspaces/my-access-requests/route.js.map +1 -0
  125. package/dist/api/admin/workspaces/route.d.ts.map +1 -1
  126. package/dist/api/admin/workspaces/route.js +49 -34
  127. package/dist/api/admin/workspaces/route.js.map +1 -1
  128. package/dist/api/admin/workspaces/search/route.d.ts.map +1 -1
  129. package/dist/api/admin/workspaces/search/route.js +5 -2
  130. package/dist/api/admin/workspaces/search/route.js.map +1 -1
  131. package/dist/api/auth/_apply-pending-invites.d.ts +12 -0
  132. package/dist/api/auth/_apply-pending-invites.d.ts.map +1 -0
  133. package/dist/api/auth/_apply-pending-invites.js +68 -0
  134. package/dist/api/auth/_apply-pending-invites.js.map +1 -0
  135. package/dist/api/auth/google/callback/route.d.ts.map +1 -1
  136. package/dist/api/auth/google/callback/route.js +20 -0
  137. package/dist/api/auth/google/callback/route.js.map +1 -1
  138. package/dist/api/auth/invite/[token]/route.d.ts.map +1 -1
  139. package/dist/api/auth/invite/[token]/route.js +2 -9
  140. package/dist/api/auth/invite/[token]/route.js.map +1 -1
  141. package/dist/api/auth/register/route.d.ts.map +1 -1
  142. package/dist/api/auth/register/route.js +16 -0
  143. package/dist/api/auth/register/route.js.map +1 -1
  144. package/dist/api/utils/assign-default-role.d.ts +6 -0
  145. package/dist/api/utils/assign-default-role.d.ts.map +1 -0
  146. package/dist/api/utils/assign-default-role.js +23 -0
  147. package/dist/api/utils/assign-default-role.js.map +1 -0
  148. package/dist/api/utils/project-access.d.ts +9 -0
  149. package/dist/api/utils/project-access.d.ts.map +1 -1
  150. package/dist/api/utils/project-access.js +27 -0
  151. package/dist/api/utils/project-access.js.map +1 -1
  152. package/dist/api/utils/workspace-access.d.ts +17 -0
  153. package/dist/api/utils/workspace-access.d.ts.map +1 -0
  154. package/dist/api/utils/workspace-access.js +72 -0
  155. package/dist/api/utils/workspace-access.js.map +1 -0
  156. package/dist/subscribers/project-access-request-resolved.d.ts +12 -0
  157. package/dist/subscribers/project-access-request-resolved.d.ts.map +1 -0
  158. package/dist/subscribers/project-access-request-resolved.js +55 -0
  159. package/dist/subscribers/project-access-request-resolved.js.map +1 -0
  160. package/dist/subscribers/project-access-requested.d.ts +11 -0
  161. package/dist/subscribers/project-access-requested.d.ts.map +1 -0
  162. package/dist/subscribers/project-access-requested.js +12 -0
  163. package/dist/subscribers/project-access-requested.js.map +1 -0
  164. package/dist/subscribers/workspace-access-request-resolved.d.ts +12 -0
  165. package/dist/subscribers/workspace-access-request-resolved.d.ts.map +1 -0
  166. package/dist/subscribers/workspace-access-request-resolved.js +60 -0
  167. package/dist/subscribers/workspace-access-request-resolved.js.map +1 -0
  168. package/dist/subscribers/workspace-access-requested.d.ts.map +1 -1
  169. package/dist/subscribers/workspace-access-requested.js +1 -0
  170. package/dist/subscribers/workspace-access-requested.js.map +1 -1
  171. package/package.json +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/share/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/share/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/[statusId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAsChD,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA0BnD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/[statusId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAwChD,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA4BnD,CAAA"}
@@ -1,81 +1,86 @@
1
+ import { requirePermission } from "@meridianjs/auth";
1
2
  import { hasProjectAccess } from "../../../../../utils/project-access.js";
2
3
  export const PUT = async (req, res) => {
3
- const { name, color, category, metadata } = req.body;
4
- const svc = req.scope.resolve("projectModuleService");
5
- const activityService = req.scope.resolve("activityModuleService");
6
- const project = await svc.retrieveProject(req.params.id).catch(() => null);
7
- if (!project) {
8
- res.status(404).json({ error: { message: "Project not found" } });
9
- return;
10
- }
11
- if (!await hasProjectAccess(req, project)) {
12
- res.status(403).json({ error: { message: "Forbidden" } });
13
- return;
14
- }
15
- const existing = await svc.retrieveProjectStatus(req.params.statusId).catch(() => null);
16
- const payload = {};
17
- if (name !== undefined)
18
- payload.name = name;
19
- if (color !== undefined)
20
- payload.color = color;
21
- if (category !== undefined)
22
- payload.category = category;
23
- if (metadata !== undefined)
24
- payload.metadata = metadata;
25
- // Snapshot old values before update — MikroORM identity map means `existing`
26
- // and the returned entity share the same object reference, so reading from
27
- // `existing` after the update would yield the new values.
28
- const oldValues = {};
29
- if (existing) {
30
- for (const key of Object.keys(payload)) {
31
- oldValues[key] = existing[key];
4
+ requirePermission("project:update")(req, res, async () => {
5
+ const { name, color, category, metadata } = req.body;
6
+ const svc = req.scope.resolve("projectModuleService");
7
+ const activityService = req.scope.resolve("activityModuleService");
8
+ const project = await svc.retrieveProject(req.params.id).catch(() => null);
9
+ if (!project) {
10
+ res.status(404).json({ error: { message: "Project not found" } });
11
+ return;
32
12
  }
33
- }
34
- const updated = await svc.updateProjectStatus(req.params.statusId, payload);
35
- if (existing) {
36
- const changes = {};
37
- for (const key of Object.keys(payload)) {
38
- changes[key] = { from: oldValues[key], to: payload[key] };
13
+ if (!await hasProjectAccess(req, project)) {
14
+ res.status(403).json({ error: { message: "Forbidden" } });
15
+ return;
39
16
  }
17
+ const existing = await svc.retrieveProjectStatus(req.params.statusId).catch(() => null);
18
+ const payload = {};
19
+ if (name !== undefined)
20
+ payload.name = name;
21
+ if (color !== undefined)
22
+ payload.color = color;
23
+ if (category !== undefined)
24
+ payload.category = category;
25
+ if (metadata !== undefined)
26
+ payload.metadata = metadata;
27
+ // Snapshot old values before update — MikroORM identity map means `existing`
28
+ // and the returned entity share the same object reference, so reading from
29
+ // `existing` after the update would yield the new values.
30
+ const oldValues = {};
31
+ if (existing) {
32
+ for (const key of Object.keys(payload)) {
33
+ oldValues[key] = existing[key];
34
+ }
35
+ }
36
+ const updated = await svc.updateProjectStatus(req.params.statusId, payload);
37
+ if (existing) {
38
+ const changes = {};
39
+ for (const key of Object.keys(payload)) {
40
+ changes[key] = { from: oldValues[key], to: payload[key] };
41
+ }
42
+ activityService.recordActivity({
43
+ entity_type: "project", entity_id: req.params.id,
44
+ actor_id: req.user?.id ?? "system", action: "status_updated",
45
+ workspace_id: project.workspace_id, changes,
46
+ }).catch(() => { });
47
+ }
48
+ res.json({ status: updated });
49
+ });
50
+ };
51
+ export const DELETE = async (req, res) => {
52
+ requirePermission("project:update")(req, res, async () => {
53
+ const svc = req.scope.resolve("projectModuleService");
54
+ const issueSvc = req.scope.resolve("issueModuleService");
55
+ const activityService = req.scope.resolve("activityModuleService");
56
+ const project = await svc.retrieveProject(req.params.id).catch(() => null);
57
+ if (!project) {
58
+ res.status(404).json({ error: { message: "Project not found" } });
59
+ return;
60
+ }
61
+ if (!await hasProjectAccess(req, project)) {
62
+ res.status(403).json({ error: { message: "Forbidden" } });
63
+ return;
64
+ }
65
+ const statuses = await svc.listStatusesByProject(req.params.id);
66
+ const target = statuses.find((s) => s.id === req.params.statusId);
67
+ if (!target) {
68
+ res.status(404).json({ error: { message: "Status not found" } });
69
+ return;
70
+ }
71
+ const [, count] = await issueSvc.listAndCountIssues({ project_id: req.params.id, status: target.key }, { limit: 1, offset: 0 });
72
+ if (count > 0) {
73
+ res.status(409).json({ error: { message: `Cannot delete status "${target.name}": ${count} issue(s) still use it` } });
74
+ return;
75
+ }
76
+ await svc.deleteProjectStatus(req.params.statusId);
40
77
  activityService.recordActivity({
41
78
  entity_type: "project", entity_id: req.params.id,
42
- actor_id: req.user?.id ?? "system", action: "status_updated",
43
- workspace_id: project.workspace_id, changes,
79
+ actor_id: req.user?.id ?? "system", action: "status_deleted",
80
+ workspace_id: project.workspace_id,
81
+ changes: { name: { from: target.name, to: null }, key: { from: target.key, to: null } },
44
82
  }).catch(() => { });
45
- }
46
- res.json({ status: updated });
47
- };
48
- export const DELETE = async (req, res) => {
49
- const svc = req.scope.resolve("projectModuleService");
50
- const issueSvc = req.scope.resolve("issueModuleService");
51
- const activityService = req.scope.resolve("activityModuleService");
52
- const project = await svc.retrieveProject(req.params.id).catch(() => null);
53
- if (!project) {
54
- res.status(404).json({ error: { message: "Project not found" } });
55
- return;
56
- }
57
- if (!await hasProjectAccess(req, project)) {
58
- res.status(403).json({ error: { message: "Forbidden" } });
59
- return;
60
- }
61
- const statuses = await svc.listStatusesByProject(req.params.id);
62
- const target = statuses.find((s) => s.id === req.params.statusId);
63
- if (!target) {
64
- res.status(404).json({ error: { message: "Status not found" } });
65
- return;
66
- }
67
- const [, count] = await issueSvc.listAndCountIssues({ project_id: req.params.id, status: target.key }, { limit: 1, offset: 0 });
68
- if (count > 0) {
69
- res.status(409).json({ error: { message: `Cannot delete status "${target.name}": ${count} issue(s) still use it` } });
70
- return;
71
- }
72
- await svc.deleteProjectStatus(req.params.statusId);
73
- activityService.recordActivity({
74
- entity_type: "project", entity_id: req.params.id,
75
- actor_id: req.user?.id ?? "system", action: "status_deleted",
76
- workspace_id: project.workspace_id,
77
- changes: { name: { from: target.name, to: null }, key: { from: target.key, to: null } },
78
- }).catch(() => { });
79
- res.status(204).send();
83
+ res.status(204).send();
84
+ });
80
85
  };
81
86
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/[statusId]/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/[statusId]/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/reorder/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAejD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/reorder/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAiBjD,CAAA"}
@@ -1,21 +1,24 @@
1
+ import { requirePermission } from "@meridianjs/auth";
1
2
  import { hasProjectAccess } from "../../../../../utils/project-access.js";
2
3
  export const POST = async (req, res) => {
3
- const { orderedIds } = req.body;
4
- if (!Array.isArray(orderedIds) || orderedIds.length === 0) {
5
- res.status(400).json({ error: { message: "orderedIds must be a non-empty array" } });
6
- return;
7
- }
8
- const svc = req.scope.resolve("projectModuleService");
9
- const project = await svc.retrieveProject(req.params.id).catch(() => null);
10
- if (!project) {
11
- res.status(404).json({ error: { message: "Project not found" } });
12
- return;
13
- }
14
- if (!await hasProjectAccess(req, project)) {
15
- res.status(403).json({ error: { message: "Forbidden" } });
16
- return;
17
- }
18
- await svc.reorderStatuses(req.params.id, orderedIds);
19
- res.status(204).send();
4
+ requirePermission("project:update")(req, res, async () => {
5
+ const { orderedIds } = req.body;
6
+ if (!Array.isArray(orderedIds) || orderedIds.length === 0) {
7
+ res.status(400).json({ error: { message: "orderedIds must be a non-empty array" } });
8
+ return;
9
+ }
10
+ const svc = req.scope.resolve("projectModuleService");
11
+ const project = await svc.retrieveProject(req.params.id).catch(() => null);
12
+ if (!project) {
13
+ res.status(404).json({ error: { message: "Project not found" } });
14
+ return;
15
+ }
16
+ if (!await hasProjectAccess(req, project)) {
17
+ res.status(403).json({ error: { message: "Forbidden" } });
18
+ return;
19
+ }
20
+ await svc.reorderStatuses(req.params.id, orderedIds);
21
+ res.status(204).send();
22
+ });
20
23
  };
21
24
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/reorder/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACpD,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,CAAC,CAAA;QACpF,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAAC,OAAM;IAAC,CAAC;IAC3F,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QACzD,OAAM;IACR,CAAC;IACD,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/statuses/reorder/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACpD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,CAAC,CAAA;YACpF,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;QAC5D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAC3F,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACC,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/statuses/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAOvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAUhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAmBjD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/statuses/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAUhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAqBjD,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { requirePermission } from "@meridianjs/auth";
1
2
  import { hasProjectAccess } from "../../../../utils/project-access.js";
2
3
  function toKey(name) {
3
4
  return name.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
@@ -17,26 +18,28 @@ export const GET = async (req, res) => {
17
18
  res.json({ statuses });
18
19
  };
19
20
  export const POST = async (req, res) => {
20
- const { name, color, category } = req.body;
21
- if (!name || !color || !category) {
22
- res.status(400).json({ error: { message: "name, color, and category are required" } });
23
- return;
24
- }
25
- const svc = req.scope.resolve("projectModuleService");
26
- const project = await svc.retrieveProject(req.params.id).catch(() => null);
27
- if (!project) {
28
- res.status(404).json({ error: { message: "Project not found" } });
29
- return;
30
- }
31
- if (!await hasProjectAccess(req, project)) {
32
- res.status(403).json({ error: { message: "Forbidden" } });
33
- return;
34
- }
35
- const existing = await svc.listStatusesByProject(req.params.id);
36
- const position = existing.length > 0 ? Math.max(...existing.map((s) => s.position)) + 1 : 0;
37
- const status = await svc.createProjectStatus({
38
- project_id: req.params.id, name, key: toKey(name), color, category, position,
21
+ requirePermission("project:update")(req, res, async () => {
22
+ const { name, color, category } = req.body;
23
+ if (!name || !color || !category) {
24
+ res.status(400).json({ error: { message: "name, color, and category are required" } });
25
+ return;
26
+ }
27
+ const svc = req.scope.resolve("projectModuleService");
28
+ const project = await svc.retrieveProject(req.params.id).catch(() => null);
29
+ if (!project) {
30
+ res.status(404).json({ error: { message: "Project not found" } });
31
+ return;
32
+ }
33
+ if (!await hasProjectAccess(req, project)) {
34
+ res.status(403).json({ error: { message: "Forbidden" } });
35
+ return;
36
+ }
37
+ const existing = await svc.listStatusesByProject(req.params.id);
38
+ const position = existing.length > 0 ? Math.max(...existing.map((s) => s.position)) + 1 : 0;
39
+ const status = await svc.createProjectStatus({
40
+ project_id: req.params.id, name, key: toKey(name), color, category, position,
41
+ });
42
+ res.status(201).json({ status });
39
43
  });
40
- res.status(201).json({ status });
41
44
  };
42
45
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/statuses/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/statuses/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/task-lists/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAWhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAejD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/task-lists/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAWhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAiBjD,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { requirePermission } from "@meridianjs/auth";
1
2
  import { hasProjectAccess } from "../../../../utils/project-access.js";
2
3
  export const GET = async (req, res) => {
3
4
  const projectService = req.scope.resolve("projectModuleService");
@@ -15,25 +16,27 @@ export const GET = async (req, res) => {
15
16
  res.json({ task_lists: taskLists, count: taskLists.length });
16
17
  };
17
18
  export const POST = async (req, res) => {
18
- const { name, description } = req.body;
19
- if (!name?.trim()) {
20
- res.status(400).json({ error: { message: "name is required" } });
21
- return;
22
- }
23
- const projectService = req.scope.resolve("projectModuleService");
24
- const project = await projectService.retrieveProject(req.params.id).catch(() => null);
25
- if (!project) {
26
- res.status(404).json({ error: { message: "Project not found" } });
27
- return;
28
- }
29
- if (!await hasProjectAccess(req, project)) {
30
- res.status(403).json({ error: { message: "Forbidden" } });
31
- return;
32
- }
33
- const issueService = req.scope.resolve("issueModuleService");
34
- const taskList = await issueService.createTaskList({
35
- name: name.trim(), description: description?.trim() || undefined, project_id: req.params.id,
19
+ requirePermission("project:update")(req, res, async () => {
20
+ const { name, description } = req.body;
21
+ if (!name?.trim()) {
22
+ res.status(400).json({ error: { message: "name is required" } });
23
+ return;
24
+ }
25
+ const projectService = req.scope.resolve("projectModuleService");
26
+ const project = await projectService.retrieveProject(req.params.id).catch(() => null);
27
+ if (!project) {
28
+ res.status(404).json({ error: { message: "Project not found" } });
29
+ return;
30
+ }
31
+ if (!await hasProjectAccess(req, project)) {
32
+ res.status(403).json({ error: { message: "Forbidden" } });
33
+ return;
34
+ }
35
+ const issueService = req.scope.resolve("issueModuleService");
36
+ const taskList = await issueService.createTaskList({
37
+ name: name.trim(), description: description?.trim() || undefined, project_id: req.params.id,
38
+ });
39
+ res.status(201).json({ task_list: taskList });
36
40
  });
37
- res.status(201).json({ task_list: taskList });
38
41
  };
39
42
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/task-lists/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/task-lists/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/api/admin/projects/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAIrD,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAiGhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAgCrE,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/api/admin/projects/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAKrD,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAsHhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAgCrE,CAAA"}
@@ -1,7 +1,9 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
2
  import { createProjectWorkflow } from "../../../workflows/create-project.js";
3
+ import { getAccessibleWorkspaceIds } from "../../utils/workspace-access.js";
3
4
  export const GET = async (req, res) => {
4
5
  const projectService = req.scope.resolve("projectModuleService");
6
+ const projectMemberService = req.scope.resolve("projectMemberModuleService");
5
7
  const limit = Math.min(Number(req.query.limit) || 20, 100);
6
8
  const offset = Number(req.query.offset) || 0;
7
9
  const filters = {};
@@ -26,31 +28,15 @@ export const GET = async (req, res) => {
26
28
  res.json({ projects, count, limit, offset });
27
29
  return;
28
30
  }
29
- const workspaceService = req.scope.resolve("workspaceModuleService");
30
- const workspaceMemberService = req.scope.resolve("workspaceMemberModuleService");
31
- const userId = req.user?.id;
32
31
  // Determine which workspace IDs are being queried
33
- let queriedWsIds = null;
32
+ let queriedWsIds;
34
33
  if (Array.isArray(filters.workspace_id)) {
35
34
  queriedWsIds = filters.workspace_id;
36
35
  }
37
36
  else if (filters.workspace_id) {
38
37
  queriedWsIds = [filters.workspace_id];
39
38
  }
40
- // Fetch workspace objects to check is_private
41
- let workspaces;
42
- if (queriedWsIds) {
43
- workspaces = (await Promise.all(queriedWsIds.map((id) => workspaceService.retrieveWorkspace(id).catch(() => null)))).filter(Boolean);
44
- }
45
- else {
46
- const [all] = await workspaceService.listAndCountWorkspaces({}, { limit: 1000 });
47
- workspaces = all;
48
- }
49
- // Keep public workspaces + private ones where user is a member
50
- const memberWsIds = new Set(await workspaceMemberService.getWorkspaceIdsForUser(userId));
51
- const allowedIds = workspaces
52
- .filter((ws) => !ws.is_private || memberWsIds.has(ws.id))
53
- .map((ws) => ws.id);
39
+ const allowedIds = await getAccessibleWorkspaceIds(req, queriedWsIds);
54
40
  if (allowedIds.length === 0) {
55
41
  res.json({ projects: [], count: 0, limit, offset });
56
42
  return;
@@ -58,36 +44,68 @@ export const GET = async (req, res) => {
58
44
  const privilegedFilters = { ...filters };
59
45
  privilegedFilters.workspace_id = allowedIds.length === 1 ? allowedIds[0] : allowedIds;
60
46
  const [projects, count] = await projectService.listAndCountProjects(privilegedFilters, { limit, offset });
61
- res.json({ projects, count, limit, offset });
47
+ const projectIds = projects.map((p) => p.id);
48
+ const pendingCounts = await projectMemberService.getPendingCountsForProjects(projectIds);
49
+ const enriched = projects.map((p) => ({
50
+ ...p,
51
+ is_member: true,
52
+ pending_request_count: pendingCounts.get(p.id) ?? 0,
53
+ has_pending_request: false,
54
+ }));
55
+ res.json({ projects: enriched, count, limit, offset });
62
56
  return;
63
57
  }
64
58
  const workspaceMemberService = req.scope.resolve("workspaceMemberModuleService");
65
59
  const teamMemberService = req.scope.resolve("teamMemberModuleService");
66
- const projectMemberService = req.scope.resolve("projectMemberModuleService");
67
60
  const userId = req.user?.id;
68
- // Workspace admins see all projects in their workspace
69
- if (filters.workspace_id) {
70
- const membership = await workspaceMemberService.getMembership(filters.workspace_id, userId);
71
- if (!membership) {
72
- res.status(403).json({ error: { message: "Forbidden — not a member of this workspace" } });
73
- return;
74
- }
75
- if (membership.role === "admin") {
76
- const [projects, count] = await projectService.listAndCountProjects(filters, { limit, offset });
77
- res.json({ projects, count, limit, offset });
78
- return;
79
- }
61
+ if (!filters.workspace_id) {
62
+ res.status(400).json({ error: { message: "workspace_id is required" } });
63
+ return;
80
64
  }
81
- // Members: filter by explicit project access
82
- const userTeamIds = await teamMemberService.getUserTeamIds(userId);
83
- const accessibleProjectIds = await projectMemberService.getAccessibleProjectIds(userId, userTeamIds);
84
- if (accessibleProjectIds.length === 0) {
85
- res.json({ projects: [], count: 0, limit, offset });
65
+ const membership = await workspaceMemberService.getMembership(filters.workspace_id, userId);
66
+ if (!membership) {
67
+ res.status(403).json({ error: { message: "Forbidden — not a member of this workspace" } });
86
68
  return;
87
69
  }
88
- const memberFilters = { ...filters, id: accessibleProjectIds };
89
- const [projects, count] = await projectService.listAndCountProjects(memberFilters, { limit, offset });
90
- res.json({ projects, count, limit, offset });
70
+ // All workspace members see ALL projects in the workspace
71
+ const [projects, count] = await projectService.listAndCountProjects(filters, { limit, offset });
72
+ const projectIds = projects.map((p) => p.id);
73
+ // Workspace admins have access to all projects
74
+ if (membership.role === "admin") {
75
+ const pendingCounts = await projectMemberService.getPendingCountsForProjects(projectIds);
76
+ const enriched = projects.map((p) => ({
77
+ ...p,
78
+ is_member: true,
79
+ pending_request_count: pendingCounts.get(p.id) ?? 0,
80
+ has_pending_request: false,
81
+ }));
82
+ res.json({ projects: enriched, count, limit, offset });
83
+ return;
84
+ }
85
+ // Regular members: determine per-project access and pending counts for managed projects
86
+ const userTeamIds = await teamMemberService.getUserTeamIds(userId);
87
+ const memberRecords = await projectMemberService.listProjectMembersForProjects(projectIds);
88
+ const teamRecords = await projectMemberService.listProjectTeamIdsForProjects(projectIds);
89
+ const memberProjectIds = new Set(memberRecords.filter((m) => m.user_id === userId).map((m) => m.project_id));
90
+ const teamProjectIds = new Set(userTeamIds.length > 0
91
+ ? teamRecords.filter((t) => userTeamIds.includes(t.team_id)).map((t) => t.project_id)
92
+ : []);
93
+ const accessibleIds = new Set([...memberProjectIds, ...teamProjectIds]);
94
+ // Only fetch pending counts for projects where user is a manager
95
+ const managedProjectIds = memberRecords
96
+ .filter((m) => m.user_id === userId && m.role === "manager")
97
+ .map((m) => m.project_id);
98
+ const pendingCounts = await projectMemberService.getPendingCountsForProjects(managedProjectIds);
99
+ // Check which non-member projects the user has a pending access request for
100
+ const nonMemberIds = projects.filter((p) => !accessibleIds.has(p.id)).map((p) => p.id);
101
+ const pendingProjectIds = await projectMemberService.getUserPendingProjectIds(userId, nonMemberIds);
102
+ const enriched = projects.map((p) => ({
103
+ ...p,
104
+ is_member: accessibleIds.has(p.id),
105
+ pending_request_count: pendingCounts.get(p.id) ?? 0,
106
+ has_pending_request: !accessibleIds.has(p.id) && pendingProjectIds.has(p.id),
107
+ }));
108
+ res.json({ projects: enriched, count, limit, offset });
91
109
  };
92
110
  export const POST = async (req, res, next) => {
93
111
  requirePermission("project:create")(req, res, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/api/admin/projects/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/api/admin/projects/route.ts"],"names":[],"mappings":"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"}