avicenna/service/data-hub/data-connector/src/modules/app-ticket-system/tickets.resolver.ts

83 lines
2.2 KiB
TypeScript

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');
}
}