membersByHandle.resolver.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { ObjectType, Field, Float, Int, Arg, Query, Resolver, createUnionType } from 'type-graphql';
  2. import { Inject } from 'typedi';
  3. import { Membership } from '../membership/membership.model';
  4. import { MembersByHandleFTSService } from './membersByHandle.service';
  5. import { MembershipWhereInput, } from '../../../generated';
  6. @ObjectType()
  7. export class MembersByHandleFTSOutput {
  8. @Field(type => MembersByHandleSearchItem)
  9. item!: typeof MembersByHandleSearchItem
  10. @Field(type => Float)
  11. rank!: number
  12. @Field(type => String)
  13. isTypeOf!: string
  14. @Field(type => String)
  15. highlight!: string
  16. }
  17. export const MembersByHandleSearchItem = createUnionType({
  18. name: "MembersByHandleSearchResult",
  19. types: () => [
  20. Membership,
  21. ],
  22. });
  23. @Resolver()
  24. export default class MembersByHandleFTSResolver {
  25. constructor(@Inject('MembersByHandleFTSService') readonly service: MembersByHandleFTSService) {}
  26. @Query(() => [MembersByHandleFTSOutput])
  27. async membersByHandle(
  28. @Arg('text') query: string,
  29. @Arg('limit', () => Int, { defaultValue: 5 }) limit: number,
  30. @Arg('skip', () => Int, { defaultValue: 0 }) skip: number,
  31. @Arg('whereMembership', { nullable: true }) whereMembership?: MembershipWhereInput,
  32. ):Promise<Array<MembersByHandleFTSOutput>>{
  33. return this.service.search(query, limit, skip, whereMembership,);
  34. }
  35. }