Просмотр исходного кода

fix(core): Add resolver for Role.channels

Michael Bromley 6 лет назад
Родитель
Сommit
5a2ddc5a35

+ 2 - 0
packages/core/src/api/api-internal-modules.ts

@@ -45,6 +45,7 @@ import {
     ProductVariantEntityResolver,
 } from './resolvers/entity/product-variant-entity.resolver';
 import { RefundEntityResolver } from './resolvers/entity/refund-entity.resolver';
+import { RoleEntityResolver } from './resolvers/entity/role-entity.resolver';
 import { ShopAuthResolver } from './resolvers/shop/shop-auth.resolver';
 import { ShopCustomerResolver } from './resolvers/shop/shop-customer.resolver';
 import { ShopEnvironmentResolver } from './resolvers/shop/shop-environment.resolver';
@@ -96,6 +97,7 @@ export const entityResolvers = [
     ProductOptionGroupEntityResolver,
     ProductVariantEntityResolver,
     RefundEntityResolver,
+    RoleEntityResolver,
 ];
 
 export const adminEntityResolvers = [ProductVariantAdminEntityResolver, ProductAdminEntityResolver];

+ 20 - 0
packages/core/src/api/resolvers/entity/role-entity.resolver.ts

@@ -0,0 +1,20 @@
+import { Parent, ResolveProperty, Resolver } from '@nestjs/graphql';
+
+import { Channel } from '../../../entity/channel/channel.entity';
+import { Role } from '../../../entity/role/role.entity';
+import { RoleService } from '../../../service/services/role.service';
+import { RequestContext } from '../../common/request-context';
+import { Ctx } from '../../decorators/request-context.decorator';
+
+@Resolver('Role')
+export class RoleEntityResolver {
+    constructor(private roleService: RoleService) {}
+
+    @ResolveProperty()
+    async channels(@Ctx() ctx: RequestContext, @Parent() role: Role): Promise<Channel[]> {
+        if (role.channels) {
+            return role.channels;
+        }
+        return this.roleService.getChannelsForRole(role.id);
+    }
+}

+ 4 - 0
packages/core/src/service/services/role.service.ts

@@ -59,6 +59,10 @@ export class RoleService {
         });
     }
 
+    getChannelsForRole(roleId: ID): Promise<Channel[]> {
+        return this.findOne(roleId).then(role => (role ? role.channels : []));
+    }
+
     getSuperAdminRole(): Promise<Role> {
         return this.getRoleByCode(SUPER_ADMIN_ROLE_CODE).then(role => {
             if (!role) {