|
1 | | -import type { Cluster, Kubeconfig, Project, ProjectRole, Zone, ProjectMembers } from '@prisma/client' |
| 1 | +import type { Cluster, Kubeconfig, Project, ProjectRole, Zone } from '@prisma/client' |
2 | 2 | import type { ClusterObject, HookResult, KubeCluster, KubeUser, Project as ProjectPayload, RepoCreds, Repository, Store, ZoneObject } from '@cpn-console/hooks' |
3 | 3 | import { hooks } from '@cpn-console/hooks' |
4 | 4 | import type { AsyncReturnType } from '@cpn-console/shared' |
5 | 5 | import { ProjectAuthorized, getPermsByUserRoles, resourceListToDict } from '@cpn-console/shared' |
6 | 6 | import { genericProxy } from './proxy.js' |
7 | | -import { archiveProject, getAdminPlugin, getAdminRoleById, getClusterByIdOrThrow, getClusterNamesByZoneId, getClustersAssociatedWithProject, getHookProjectInfos, getHookRepository, getProjectStore, getRole, getZoneByIdOrThrow, saveProjectStore, updateProjectClusterHistory, updateProjectCreated, updateProjectFailed, updateProjectWarning } from '@/resources/queries-index.js' |
| 7 | +import { archiveProject, getAdminPlugin, getAdminRoleById, getClusterByIdOrThrow, getClusterNamesByZoneId, getClustersAssociatedWithProject, getHookProjectInfos, getHookRepository, getProjectStore, getZoneByIdOrThrow, saveProjectStore, updateProjectClusterHistory, updateProjectCreated, updateProjectFailed, updateProjectWarning } from '@/resources/queries-index.js' |
8 | 8 | import type { ConfigRecords } from '@/resources/project-service/business.js' |
9 | 9 | import { dbToObj } from '@/resources/project-service/business.js' |
10 | 10 |
|
@@ -139,114 +139,6 @@ const user = { |
139 | 139 | }, |
140 | 140 | } as const |
141 | 141 |
|
142 | | -const projectMember = { |
143 | | - upsert: async (projectId: Project['id'], userId: ProjectMembers['userId']) => { |
144 | | - const project = await getHookProjectInfos(projectId) |
145 | | - const projectStore = dbToObj(await getProjectStore(project.id)) |
146 | | - const hookProject = transformToHookProject(project, projectStore) |
147 | | - const store = dbToObj(await getAdminPlugin()) |
148 | | - |
149 | | - const member = project.members.find(m => m.userId === userId) |
150 | | - if (!member) throw new Error('Member not found') |
151 | | - |
152 | | - const memberRoles = project.roles |
153 | | - .filter(role => member.roleIds.includes(role.id)) |
154 | | - .map(role => ({ |
155 | | - ...role, |
156 | | - permissions: role.permissions.toString(), |
157 | | - oidcGroup: role.oidcGroup ?? undefined, |
158 | | - project: hookProject, |
159 | | - })) |
160 | | - |
161 | | - const payload = { |
162 | | - userId: member.userId, |
163 | | - roleIds: member.roleIds, |
164 | | - firstName: member.user.firstName, |
165 | | - lastName: member.user.lastName, |
166 | | - email: member.user.email, |
167 | | - type: member.user.type as 'human' | 'bot' | 'ghost', |
168 | | - createdAt: member.user.createdAt.toISOString(), |
169 | | - updatedAt: member.user.updatedAt.toISOString(), |
170 | | - lastLogin: member.user.lastLogin?.toISOString(), |
171 | | - projectId: project.id, |
172 | | - roles: memberRoles, |
173 | | - project: hookProject, |
174 | | - } |
175 | | - |
176 | | - return hooks.upsertProjectMember.execute(payload, store) |
177 | | - }, |
178 | | - delete: async (projectId: Project['id'], userId: ProjectMembers['userId']) => { |
179 | | - const project = await getHookProjectInfos(projectId) |
180 | | - const projectStore = dbToObj(await getProjectStore(project.id)) |
181 | | - const hookProject = transformToHookProject(project, projectStore) |
182 | | - const store = dbToObj(await getAdminPlugin()) |
183 | | - |
184 | | - const member = project.members.find(m => m.userId === userId) |
185 | | - if (!member) throw new Error('Member not found') |
186 | | - |
187 | | - const memberRoles = project.roles |
188 | | - .filter(role => member.roleIds.includes(role.id)) |
189 | | - .map(role => ({ |
190 | | - ...role, |
191 | | - permissions: role.permissions.toString(), |
192 | | - oidcGroup: role.oidcGroup ?? undefined, |
193 | | - project: hookProject, |
194 | | - })) |
195 | | - |
196 | | - const payload = { |
197 | | - userId: member.userId, |
198 | | - roleIds: member.roleIds, |
199 | | - firstName: member.user.firstName, |
200 | | - lastName: member.user.lastName, |
201 | | - email: member.user.email, |
202 | | - type: member.user.type as 'human' | 'bot' | 'ghost', |
203 | | - createdAt: member.user.createdAt.toISOString(), |
204 | | - updatedAt: member.user.updatedAt.toISOString(), |
205 | | - lastLogin: member.user.lastLogin?.toISOString(), |
206 | | - projectId: project.id, |
207 | | - roles: memberRoles, |
208 | | - project: hookProject, |
209 | | - } |
210 | | - |
211 | | - return hooks.deleteProjectMember.execute(payload, store) |
212 | | - }, |
213 | | -} as const |
214 | | - |
215 | | -const projectRole = { |
216 | | - upsert: async (roleId: ProjectRole['id']) => { |
217 | | - const role = await getRole(roleId) |
218 | | - if (!role) throw new Error('Role not found') |
219 | | - |
220 | | - const project = await getHookProjectInfos(role.projectId) |
221 | | - const projectStore = dbToObj(await getProjectStore(role.projectId)) |
222 | | - const hookProject = transformToHookProject(project, projectStore) |
223 | | - |
224 | | - const rolePayload = { |
225 | | - ...role, |
226 | | - permissions: role.permissions.toString(), |
227 | | - project: hookProject, |
228 | | - } |
229 | | - const store = dbToObj(await getAdminPlugin()) |
230 | | - return hooks.upsertProjectRole.execute(rolePayload, store) |
231 | | - }, |
232 | | - delete: async (roleId: ProjectRole['id']) => { |
233 | | - const role = await getRole(roleId) |
234 | | - if (!role) throw new Error('Role not found') |
235 | | - |
236 | | - const project = await getHookProjectInfos(role.projectId) |
237 | | - const projectStore = dbToObj(await getProjectStore(role.projectId)) |
238 | | - const hookProject = transformToHookProject(project, projectStore) |
239 | | - |
240 | | - const rolePayload = { |
241 | | - ...role, |
242 | | - permissions: role.permissions.toString(), |
243 | | - project: hookProject, |
244 | | - } |
245 | | - const store = dbToObj(await getAdminPlugin()) |
246 | | - return hooks.deleteProjectRole.execute(rolePayload, store) |
247 | | - }, |
248 | | -} as const |
249 | | - |
250 | 142 | const zone = { |
251 | 143 | upsert: async (zoneId: Zone['id']) => { |
252 | 144 | const zone: ZoneObject = await getZoneByIdOrThrow(zoneId) |
@@ -299,10 +191,6 @@ export const hook = { |
299 | 191 | // @ts-ignore TODO voir comment opti la signature de la fonction |
300 | 192 | project: genericProxy(project, { upsert: ['delete'], delete: ['upsert', 'delete'], getSecrets: ['delete'] }), |
301 | 193 | // @ts-ignore TODO voir comment opti la signature de la fonction |
302 | | - projectRole: genericProxy(projectRole, { delete: ['upsert', 'delete'], upsert: ['delete'] }), |
303 | | - // @ts-ignore TODO voir comment opti la signature de la fonction |
304 | | - projectMember: genericProxy(projectMember, { delete: ['upsert'], upsert: ['delete'] }), |
305 | | - // @ts-ignore TODO voir comment opti la signature de la fonction |
306 | 194 | cluster: genericProxy(cluster, { delete: ['upsert', 'delete'], upsert: ['delete'] }), |
307 | 195 | // @ts-ignore TODO voir comment opti la signature de la fonction |
308 | 196 | zone: genericProxy(zone, { delete: ['upsert'], upsert: ['delete'] }), |
@@ -349,10 +237,20 @@ export function transformToHookProject(project: ProjectInfos, store: Store, repo |
349 | 237 | store, |
350 | 238 | users: [project.owner, ...project.members.map(({ user }) => user)], |
351 | 239 | roles: [ |
352 | | - { userId: project.ownerId, role: 'owner' }, |
353 | | - ...project.members.map(member => ({ |
354 | | - userId: member.userId, |
355 | | - role: 'user' as const, |
| 240 | + { |
| 241 | + name: 'owner', |
| 242 | + position: 0, |
| 243 | + users: [project.owner], |
| 244 | + }, |
| 245 | + ...project.roles.map(role => ({ |
| 246 | + name: role.name, |
| 247 | + permissions: role.permissions.toString(), |
| 248 | + position: role.position, |
| 249 | + type: role.type, |
| 250 | + oidcGroup: role.oidcGroup, |
| 251 | + users: project.members |
| 252 | + .filter(member => member.roleIds.includes(role.id)) |
| 253 | + .map(member => member.user), |
356 | 254 | })), |
357 | 255 | ], |
358 | 256 | }) |
|
0 commit comments