Skip to content

Commit 84cc238

Browse files
committed
Accept LinkTo<File> anywhere FileId is used
1 parent 2c4a1cc commit 84cc238

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

src/components/file/file.service.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import {
1616
generateId,
1717
ID,
1818
InputException,
19+
isIdLike,
1920
NotFoundException,
21+
Secured,
2022
ServerException,
2123
Session,
2224
UnauthorizedException,
@@ -26,17 +28,18 @@ import {
2628
ConfigService,
2729
IEventBus,
2830
ILogger,
31+
LinkTo,
2932
Logger,
3033
RollbackManager,
3134
} from '~/core';
3235
import { FileBucket } from './bucket';
3336
import {
3437
CreateDefinedFileVersionInput,
3538
CreateFileVersionInput,
36-
DefinedFile,
3739
Directory,
3840
Downloadable,
3941
File,
42+
FileId,
4043
FileListInput,
4144
FileListOutput,
4245
FileNode,
@@ -528,7 +531,7 @@ export class FileService {
528531
async updateDefinedFile<
529532
Input extends CreateDefinedFileVersionInput | undefined,
530533
>(
531-
file: DefinedFile,
534+
file: Secured<FileId | LinkTo<'File'>>,
532535
field: string,
533536
input: Input,
534537
session: Session,
@@ -545,10 +548,11 @@ export class FileService {
545548
field,
546549
);
547550
}
551+
const fileId = isIdLike(file.value) ? file.value : file.value.id;
548552
try {
549553
return await this.createFileVersion(
550554
{
551-
parentId: file.value,
555+
parentId: fileId,
552556
...input,
553557
},
554558
session,

src/components/file/resolve-defined-file.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
import { LoaderOf } from '@seedcompany/data-loader';
2-
import { mapSecuredValue, NotFoundException, ServerException } from '~/common';
3-
import { DefinedFile, isFile, SecuredFile } from './dto';
2+
import {
3+
isIdLike,
4+
mapSecuredValue,
5+
NotFoundException,
6+
Secured,
7+
ServerException,
8+
} from '~/common';
9+
import { LinkTo } from '~/core';
10+
import { FileId, isFile, SecuredFile } from './dto';
411
import { FileNodeLoader } from './file-node.loader';
512

613
export async function resolveDefinedFile(
714
loader: LoaderOf<FileNodeLoader>,
8-
input: DefinedFile,
15+
input: Secured<FileId | LinkTo<'File'>>,
916
): Promise<SecuredFile> {
10-
return await mapSecuredValue(input, async (fileId) => {
17+
return await mapSecuredValue(input, async (file) => {
18+
const fileId = isIdLike(file) ? file : file.id;
1119
try {
1220
const file = await loader.load(fileId);
1321
if (!isFile(file)) {

src/core/database/changes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ type ChangeKey<Key extends keyof T & string, T> = T[Key] extends SetChangeType<
5757
? Override extends string
5858
? Override
5959
: never
60-
: UnwrapSecured<T[Key]> extends FileId
60+
: UnwrapSecured<T[Key]> extends FileId | LinkTo<'File'>
6161
? Key
6262
: NonNullable<UnwrapSecured<T[Key]>> extends ID | LinkTo<any>
6363
? `${Key}Id` // our convention for single relationships
@@ -69,7 +69,7 @@ type ChangeOf<Val> = Val extends SetChangeType<any, infer Override>
6969
| RawChangeOf<UnwrapSecured<Val> & {}>
7070
| (UnwrapSecured<Val> extends null ? null : unknown);
7171

72-
type RawChangeOf<Val> = Val extends FileId
72+
type RawChangeOf<Val> = Val extends FileId | LinkTo<'File'>
7373
? CreateDefinedFileVersionInput
7474
: Val extends LinkTo<any>
7575
? ID

src/core/database/query/create-node.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ResourceShape,
1010
UnsecuredDto,
1111
} from '~/common';
12+
import { LinkTo } from '~/core';
1213
import { FileId } from '../../../components/file';
1314
import { Variable } from '../query-augmentation/condition-variables';
1415

@@ -21,7 +22,9 @@ export interface CreateNodeOptions<TResourceStatic extends ResourceShape<any>> {
2122
}
2223

2324
type InitialPropsOf<T> = {
24-
[K in keyof T & string]?: Variable | (T[K] extends FileId ? ID : T[K]);
25+
[K in keyof T & string]?:
26+
| Variable
27+
| (T[K] extends FileId | LinkTo<'File'> ? ID : T[K]);
2528
};
2629

2730
/**

0 commit comments

Comments
 (0)