import { CommentValue, TicketData } from '../../interfaces' import { Api } from '../api' export const TICKET_API = '/service/elements/api' export interface TicketShowParams { checklist?: string element?: string hasProperty?: string | Record limit?: number offset?: number status?: string page?: number user?: string withDescendants?: boolean sort?: string // eg "createdAt.value" dateFrom?: string dateTo?: string } export interface TicketCreateBody { // eslint-disable-next-line @typescript-eslint/no-explicit-any data: Record organization: string } export interface TicketShowResult { count: Record data: TicketData[] } export class Tickets { api: Api constructor(api: Api) { this.api = api } async create(data: TicketCreateBody['data'], organization: string) { return this.api.apisauce.post(`${TICKET_API}/Ticket`, { data, organization, }) } async update(hash: string, data: TicketCreateBody['data']) { return this.api.apisauce.patch( `${TICKET_API}/Ticket/${hash}`, data, ) } async show(params: TicketShowParams) { const requestParams = { ...params, hasProperty: JSON.stringify(params.hasProperty), } return this.api.apisauce.get( `${TICKET_API}/Ticket`, requestParams, { headers: { Accept: 'application/vnd.edocu.elements.v0.0.4+json', }, cache: false }, ) } async get(hash: string) { return this.api.apisauce.get( `${TICKET_API}/Ticket/${hash}`, undefined, ) } async patchTicket(hash: string, data: Record) { return this.api.apisauce.patch( `${TICKET_API}/Ticket/${hash}`, data, ) } async postComment(hash: string, organization: string, value: string) { return this.api.apisauce.post( `${TICKET_API}/Ticket/${hash}/comments`, { organization, value }, ) } }