eust-conciliation
Version:
54 lines (47 loc) • 1.7 kB
text/typescript
import { Injectable } from '@severo-tech/injection-decorator';
import { BadGateway } from '@somma/node-errors';
import axios, { isAxiosError } from 'axios';
import {
IInvoiceClient,
IInvoiceClientFilter,
} from '../../application/contracts';
import { Invoice } from '../../domain/invoice';
import { Base01EUSTClient } from './base-01eust-client';
import { RetryMethod } from '../../application/decorators';
()
export class Invoice01EUSTClient extends Base01EUSTClient implements IInvoiceClient {
({ ms: 500 })
public async getUnreconciled(filters: IInvoiceClientFilter): Promise<Invoice[]> {
const url = `${this.baseURL}/v1/invoices/unreconciled`;
const params = {
...filters,
};
const headers = {
Authorization: await this.getToken(),
};
this.logger.debug(
`"Invoice01EUSTClient.getUnreconciled" - Sending GET request to url [${url}] with params [${JSON.stringify(
params,
)}]`,
);
try {
const { data } = await axios.get<Invoice[]>(url, {
params,
headers,
});
return data.map((invoice: Invoice) => ({
...invoice,
issueDate: new Date(invoice.issueDate as unknown as string),
createdAt: new Date(invoice.createdAt as unknown as string),
updatedAt: new Date(invoice.updatedAt as unknown as string),
}));
} catch (error) {
const message = `Cannot get Unreconciled Invoices: GET - "${url}" | params: [${JSON.stringify(
params,
)}]`;
const err = isAxiosError(error) ? error.response?.data : error;
this.logger.error(message, err);
throw new BadGateway(message, undefined, err);
}
}
}