Skip to content

Commit 2cef9b6

Browse files
committed
Expose Actor & SystemAgent to GQL
1 parent 4a93c35 commit 2cef9b6

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

src/components/user/actor.repository.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Injectable } from '@nestjs/common';
22
import { CachedByArg } from '@seedcompany/common';
3-
import { ID, Role } from '~/common';
3+
import { Role } from '~/common';
4+
import { SystemAgent } from './dto';
45

56
@Injectable()
67
export abstract class ActorRepository {
@@ -22,5 +23,5 @@ export abstract class ActorRepository {
2223
protected abstract upsertAgent(
2324
name: string,
2425
roles?: readonly Role[],
25-
): Promise<{ id: ID; name: string; roles: readonly Role[] }>;
26+
): Promise<SystemAgent>;
2627
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { InterfaceType, ObjectType } from '@nestjs/graphql';
2+
import { keys as keysOf } from 'ts-transformer-keys';
3+
import {
4+
DataObject,
5+
ID,
6+
IdField,
7+
NameField,
8+
resolveByTypename,
9+
Role,
10+
SecuredProperty,
11+
SecuredProps,
12+
} from '~/common';
13+
import { RegisterResource } from '~/core';
14+
import { e } from '~/core/edgedb';
15+
16+
@RegisterResource({ db: e.Actor })
17+
@InterfaceType({
18+
resolveType: resolveByTypename(Actor.name),
19+
})
20+
export class Actor extends DataObject {
21+
static readonly Props: string[] = keysOf<Actor>();
22+
static readonly SecuredProps: string[] = keysOf<SecuredProps<Actor>>();
23+
24+
@IdField()
25+
readonly id: ID;
26+
}
27+
28+
@ObjectType({
29+
implements: [Actor],
30+
})
31+
export abstract class SystemAgent extends Actor {
32+
__typename?: 'SystemAgent';
33+
34+
@NameField()
35+
readonly name: string;
36+
37+
readonly roles: readonly Role[];
38+
}
39+
40+
@ObjectType({
41+
description: SecuredProperty.descriptionFor('a actor'),
42+
})
43+
export class SecuredActor extends SecuredProperty(Actor) {}
44+
45+
declare module '~/core/resources/map' {
46+
interface ResourceMap {
47+
Actor: typeof Actor;
48+
}
49+
interface ResourceDBMap {
50+
Actor: typeof e.Actor;
51+
}
52+
}

src/components/user/dto/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './actor.dto';
12
export * from './user.dto';
23
export * from './list-users.dto';
34
export * from './create-person.dto';

src/components/user/dto/user.dto.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ import { Pinnable } from '../../pin/dto';
2121
import { IProject as Project } from '../../project/dto';
2222
import { Education } from '../education/dto';
2323
import { Unavailability } from '../unavailability/dto';
24+
import { Actor } from './actor.dto';
2425
import { KnownLanguage } from './known-language.dto';
2526
import { SecuredUserStatus } from './user-status.enum';
2627

27-
const Interfaces = IntersectTypes(Resource, Pinnable);
28+
const Interfaces = IntersectTypes(Resource, Actor, Pinnable);
2829

2930
@RegisterResource({ db: e.User })
3031
@ObjectType({

0 commit comments

Comments
 (0)