/** * UserLayoutOverride Resolver(v2.1 M3) * * Apollo Federation 子图:UserLayoutOverride Entity * - @key(fields: "userId") 支持跨子图引用 * - @ResolveReference 使用 DataLoader 批量加载(ADR-035) * - Query 入口供 Apollo Router 直接查询 */ import { Resolver, Query, Args, ID, ResolveReference, ObjectType, Field, Directive, } from "@nestjs/graphql"; import { DataLoaderService, type UserLayoutOverrideEntity, } from "../dataloader.service.js"; import { Permissions, RequirePermission, } from "../../middleware/permission.guard.js"; @ObjectType() @Directive(`@key(fields: "userId")`) export class UserLayoutOverrideGql { @Field(() => ID) userId!: string; @Field() activeLayout!: string; @Field() updatedAt!: string; } @Resolver(() => UserLayoutOverrideGql) export class UserLayoutResolver { constructor(private readonly loader: DataLoaderService) {} @ResolveReference() async resolveReference(ref: { userId: string; }): Promise { return this.loader.userLayoutLoader.load(ref.userId); } @Query(() => UserLayoutOverrideGql, { nullable: true }) @RequirePermission(Permissions.CONFIG_USER) async userLayoutOverride( @Args("userId", { type: () => ID }) userId: string, ): Promise { return this.loader.userLayoutLoader.load(userId); } }