Skip to content

Commit 163fa76

Browse files
committed
Refactor ResourceRef into LinkTo
1 parent 46aebb6 commit 163fa76

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

src/components/file/file.repository.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,7 @@ import { Direction } from 'cypher-query-builder/dist/typings/clauses/order-by';
1414
import { AnyConditions } from 'cypher-query-builder/dist/typings/clauses/where-utils';
1515
import { DateTime } from 'luxon';
1616
import { ID, NotFoundException, ServerException, Session } from '../../common';
17-
import {
18-
CommonRepository,
19-
ILogger,
20-
Logger,
21-
OnIndex,
22-
ResourceRef,
23-
} from '../../core';
17+
import { CommonRepository, ILogger, LinkTo, Logger, OnIndex } from '../../core';
2418
import {
2519
ACTIVE,
2620
createNode,
@@ -407,7 +401,7 @@ export class FileRepository extends CommonRepository {
407401
public: isPublic,
408402
session,
409403
}: {
410-
resource: ResourceRef<any>;
404+
resource: LinkTo<any>;
411405
relation: string;
412406
name: string;
413407
public?: boolean;

src/components/prompts/dto/prompt-response.dto.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ import {
1818
UnsecuredDto,
1919
Variant,
2020
} from '~/common';
21-
import { ResourceRef } from '~/core';
21+
import { LinkToUnknown } from '~/core';
2222
import { BaseNode } from '~/core/database/results';
2323
import { User } from '../../user';
2424
import { Prompt, SecuredPrompt } from './prompt.dto';
2525

2626
@ObjectType()
2727
export class PromptResponse extends Resource {
28-
readonly parent: ResourceRef<any>;
28+
readonly parent: LinkToUnknown;
2929

3030
@Field()
3131
readonly prompt: SecuredPrompt;

src/core/resources/resource.loader.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,29 @@ import { ResourceResolver } from './resource-resolver.service';
1313

1414
type SomeResourceType = ValueOf<ResourceMap>;
1515

16-
export interface ResourceRef<Key extends keyof ResourceMap> {
16+
/**
17+
* A reference to a resource with a dynamic / unknown type.
18+
*/
19+
export interface PolymorphicLinkTo<Key extends keyof ResourceMap> {
1720
__typename: Key;
1821
id: ID;
1922
}
2023

24+
/**
25+
* A reference to a resource with a dynamic / unknown type.
26+
*/
27+
export type LinkToUnknown = PolymorphicLinkTo<keyof ResourceMap>;
28+
29+
/**
30+
* A reference to a resource with a static / known type.
31+
*/
32+
export interface LinkTo<Key extends keyof ResourceMap> {
33+
id: ID;
34+
// Here for DX, and maybe type checking.
35+
// Won't be used at runtime.
36+
__typename?: Key;
37+
}
38+
2139
@Injectable()
2240
export class ResourceLoader {
2341
constructor(
@@ -37,7 +55,7 @@ export class ResourceLoader {
3755
}
3856

3957
async loadByRef<Key extends keyof ResourceMap>(
40-
obj: ResourceRef<Key>,
58+
obj: PolymorphicLinkTo<Key>,
4159
view?: ObjectView,
4260
) {
4361
return await this.load(obj.__typename, obj.id, view);

0 commit comments

Comments
 (0)