Skip to content

Commit 3156ea6

Browse files
committed
feat: add roleAssignAbilities mutation and implementation in RoleService
1 parent 43748b3 commit 3156ea6

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

src/packages/ce/src/role/Role.service.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
import {DRoleDependencies, DNamespaceRoleReactiveService,ReactiveArrayStore, DNamespaceRoleView} from "@code0-tech/pictor"
21
import {
3-
NamespaceProject, NamespaceRole,
2+
DNamespaceRoleReactiveService,
3+
DNamespaceRoleView,
4+
DRoleDependencies,
5+
ReactiveArrayStore
6+
} from "@code0-tech/pictor"
7+
import {
8+
Mutation,
9+
NamespaceRole,
410
NamespacesRolesAssignAbilitiesInput,
511
NamespacesRolesAssignAbilitiesPayload,
612
NamespacesRolesAssignProjectsInput,
@@ -13,6 +19,7 @@ import {
1319
} from "@code0-tech/sagittarius-graphql-types"
1420
import {GraphqlClient} from "@core/util/graphql-client";
1521
import rolesQuery from "@edition/role/queries/Roles.query.graphql";
22+
import roleAssignAbilitiesMutation from "@edition/role/mutations/Role.assignAbilities.mutation.graphql";
1623

1724
export class RoleService extends DNamespaceRoleReactiveService {
1825

@@ -63,15 +70,38 @@ export class RoleService extends DNamespaceRoleReactiveService {
6370
return role !== undefined
6471
}
6572

66-
roleAssignAbilities(payload: NamespacesRolesAssignAbilitiesInput): Promise<NamespacesRolesAssignAbilitiesPayload | undefined> {
67-
throw new Error("Method not implemented.")
73+
async roleAssignAbilities(payload: NamespacesRolesAssignAbilitiesInput): Promise<NamespacesRolesAssignAbilitiesPayload | undefined> {
74+
const result = await this.client.mutate<Mutation, NamespacesRolesAssignAbilitiesInput>({
75+
mutation: roleAssignAbilitiesMutation,
76+
variables: {
77+
...payload
78+
}
79+
})
80+
81+
//TODO: should be done by a new query
82+
if (result.data && result.data.namespacesRolesAssignAbilities) {
83+
const currentRole = this.getById(payload.roleId)
84+
const index = super.values().findIndex(m => m.id === payload.roleId)
85+
86+
const newRole = new DNamespaceRoleView({
87+
...currentRole?.json(),
88+
abilities: payload.abilities
89+
})
90+
91+
this.set(index, newRole)
92+
}
93+
94+
return result.data?.namespacesRolesAssignAbilities ?? undefined
6895
}
96+
6997
roleAssignProject(payload: NamespacesRolesAssignProjectsInput): Promise<NamespacesRolesAssignProjectsPayload | undefined> {
7098
throw new Error("Method not implemented.")
7199
}
100+
72101
roleCreate(payload: NamespacesRolesCreateInput): Promise<NamespacesRolesCreatePayload | undefined> {
73102
throw new Error("Method not implemented.")
74103
}
104+
75105
roleDelete(payload: NamespacesRolesDeleteInput): Promise<NamespacesRolesDeletePayload | undefined> {
76106
throw new Error("Method not implemented.")
77107
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
mutation roleAssignAbilities($roleId: NamespaceRoleID!, $abilities: [NamespaceRoleAbility!]!) {
2+
namespacesRolesAssignAbilities(input: {
3+
roleId: $roleId,
4+
abilities: $abilities
5+
}) {
6+
errors {
7+
...on Error {
8+
errorCode,
9+
details {
10+
__typename
11+
}
12+
}
13+
}
14+
15+
}
16+
}

0 commit comments

Comments
 (0)