import { Args, Mutation, Parent, Query, ResolveField, Resolver, Subscription, } from '@nestjs/graphql'; import { TicketValidationState } from '@prisma/client'; import { TourObjectType } from '../app-accounting/tour.object-type'; import { DocumentInfoArgs, TicketsArgs } from './ticket-arg.types'; import { PaginatedTicketObjectType, TicketObjectType, TicketStateKeyFiguresObjectType, TicketStateMetaObjectType, TicketsUpdatedObjectType, } from './ticket.object-type'; import { TicketService } from './tickets.service'; @Resolver(() => TicketObjectType) export class TicketsResolver { constructor(private readonly ticketsService: TicketService) {} @Query(() => TicketObjectType) ticket(@Args('id') id: string) { return this.ticketsService.findById(id); } @Query(() => PaginatedTicketObjectType) tickets(@Args() { state, filters, cursor, take }: TicketsArgs) { return this.ticketsService.paginateTicketsByState( state, filters, take, cursor, ); } @Query(() => [TicketObjectType]) searchTickets(@Args('query') query: string) { return this.ticketsService.searchTickets(query); } @Query(() => TicketStateMetaObjectType) ticketStateMeta( @Args('state', { type: () => TicketValidationState }) ticketState: TicketValidationState, ) { return this.ticketsService.getTicketStateMeta(ticketState); } @Query(() => TicketStateKeyFiguresObjectType) ticketStateKeyFigures( @Args('state', { type: () => TicketValidationState }) ticketState: TicketValidationState, ) { return this.ticketsService.getTicketStateKeyFigures(ticketState); } @Mutation(() => TicketObjectType) setDocumentInfo( @Args('ticketId', { type: () => String }) ticketId: string, @Args() { approval, tdLocation }: DocumentInfoArgs, ) { return this.ticketsService.updateDocumentInfo(ticketId, { approval, tdLocation, }); } @ResolveField(() => [TourObjectType]) tours(@Parent() ticket: TicketObjectType) { return this.ticketsService.findToursByTicketId(ticket.id); } @Subscription(() => TicketsUpdatedObjectType) ticketsUpdated() { return this.ticketsService.pubSub.asyncIterator('ticketsUpdated'); } }