handles.resolver.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { ObjectType, Field, Float, Int, Arg, Query, Resolver, createUnionType } from 'type-graphql';
  2. import { Inject } from 'typedi';
  3. import { Member } from '../member/member.model';
  4. import { HandlesFTSService } from './handles.service';
  5. @ObjectType()
  6. export class HandlesFTSOutput {
  7. @Field(type => HandlesSearchItem)
  8. item!: typeof HandlesSearchItem
  9. @Field(type => Float)
  10. rank!: number
  11. @Field(type => String)
  12. isTypeOf!: string
  13. @Field(type => String)
  14. highlight!: string
  15. }
  16. export const HandlesSearchItem = createUnionType({
  17. name: "HandlesSearchResult",
  18. types: () => [
  19. Member,
  20. ],
  21. });
  22. @Resolver()
  23. export default class HandlesFTSResolver {
  24. constructor(@Inject('HandlesFTSService') readonly service: HandlesFTSService) {}
  25. @Query(() => [HandlesFTSOutput])
  26. async handles(
  27. @Arg('text') query: string,
  28. @Arg('limit', () => Int, { defaultValue: 5 }) limit: number):Promise<Array<HandlesFTSOutput>>{
  29. return this.service.search(query, limit);
  30. }
  31. }