Skip to content

Commit 53acc7d

Browse files
committed
Change GQL Tools.usages to a secured list to follow suit
Mainly allows for pagination in future without a breaking change
1 parent 376284a commit 53acc7d

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/components/tools/tool-usage/tool-usage-by-tool.loader.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import {
66
type LoaderOptionsOf,
77
} from '~/core/data-loader';
88
import { type Tool } from '../tool/dto';
9-
import { type ToolUsage } from './dto';
9+
import { type SecuredToolUsageList } from './dto';
1010
import { ToolUsageLoader } from './tool-usage.loader';
1111
import { ToolUsageService } from './tool-usage.service';
1212

1313
export interface UsagesByTool {
1414
tool: Tool;
15-
usages: readonly ToolUsage[];
15+
usages: SecuredToolUsageList;
1616
}
1717

1818
@LoaderFactory()
@@ -35,7 +35,7 @@ export class ToolUsageByToolLoader
3535
const res = await this.usages.readManyForTools(tools);
3636

3737
const canonicalUsages = await ctx.getLoader(ToolUsageLoader);
38-
const usages = res.flatMap((u) => u.usages);
38+
const usages = res.flatMap((u) => u.usages.items);
3939
canonicalUsages.primeAll(usages);
4040

4141
return res;

src/components/tools/tool-usage/tool-usage.service.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,23 @@ export class ToolUsageService {
9292
return await Promise.all(
9393
rows.map(async (row): Promise<UsagesByTool> => {
9494
const tool = toolsById.get(row.tool.id)!;
95-
const usages = await Promise.all(
95+
const usagesRaw = await Promise.all(
9696
row.usages.map(async (dto) => {
9797
const container = await this.loadContainer(dto.container);
9898
return this.secure(dto, container) ?? [];
9999
}),
100100
);
101-
return { tool, usages: usages.flat() };
101+
const usages = usagesRaw.flat();
102+
return {
103+
tool,
104+
usages: {
105+
items: usages,
106+
total: usages.length,
107+
hasMore: false,
108+
canRead: true,
109+
canCreate: false,
110+
},
111+
};
102112
}),
103113
);
104114
}

src/components/tools/tool-usage/tool-usages.resolver.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
22
import { Loader, type LoaderOf } from '@seedcompany/data-loader';
33
import { Tool } from '../tool/dto';
4-
import { ToolUsage } from './dto';
4+
import { SecuredToolUsageList } from './dto';
55
import { ToolUsageByToolLoader } from './tool-usage-by-tool.loader';
66

77
@Resolver(() => Tool)
88
export class ToolUsagesResolver {
9-
@ResolveField(() => [ToolUsage], {
9+
@ResolveField(() => SecuredToolUsageList, {
1010
description: 'The usages of this tool',
1111
})
1212
async usages(
1313
@Parent() tool: Tool,
1414
@Loader(() => ToolUsageByToolLoader)
1515
loader: LoaderOf<ToolUsageByToolLoader>,
16-
): Promise<readonly ToolUsage[]> {
16+
): Promise<SecuredToolUsageList> {
1717
const { usages } = await loader.load(tool);
1818
return usages;
1919
}

0 commit comments

Comments
 (0)