import { CreateShippingZoneMethodRequestType, DeleteShippingZoneMethodRequestType, ListShippingZoneMethodRequestType, ShippingZoneMethod, ShippingZoneMethodByIdRequestType, UpdateShippingZoneMethodRequestType, } from './types'; import { AxiosInstance } from 'axios'; export default class ShippingZoneMethods { private readonly client: AxiosInstance; constructor(client: AxiosInstance) { this.client = client; } async create({ zone_id, data, }: CreateShippingZoneMethodRequestType): Promise { const response = await this.client.post( `/shipping/zones/${zone_id}/methods`, data ); return response.data; } async getById({ zone_id, instance_id, }: ShippingZoneMethodByIdRequestType): Promise { const response = await this.client.get( `/shipping/zones/${zone_id}/methods/${instance_id}` ); return response.data; } async list({ zone_id, }: ListShippingZoneMethodRequestType): Promise<{ data: ShippingZoneMethod[]; count: number; totalPages: number; }> { const response = await this.client.get( `/shipping/zones/${zone_id}/methods` ); return { data: response.data, count: response.headers['x-wp-total'], totalPages: response.headers['x-wp-totalpages'], }; } async update({ zone_id, instance_id, data, }: UpdateShippingZoneMethodRequestType): Promise { const response = await this.client.put( `/shipping/zones/${zone_id}/methods/${instance_id}`, data ); return response.data; } async delete({ zone_id, instance_id, data: { force = true }, }: DeleteShippingZoneMethodRequestType): Promise { const response = await this.client.delete( `/shipping/zones/${zone_id}/methods/${instance_id}`, { data: { force, }, } ); return response.data; } }