Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions src/RestClient/endpoints/V3/Cart/CartLineItems.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { AxiosInstance } from 'axios';

import { AxiosPromise } from '../../../../types';

import { getCartsPath } from './Carts';
import type { CartLineItem } from './types';

const cartLineItemsPath = 'items';

const getItemPath = (itemId?: string): string => (itemId ? `${cartLineItemsPath}/${itemId}` : cartLineItemsPath);
/**
* Builds a base CartLineItems API path given an optional cartLineItem ID
*
* @param cartId The cart ID
* @param id Optional filter parameters
* @returns Returns either '/v3/cart/:cartId/items' or '/v3/cart/:cartId/items/:itemId
*/
export const getCartLineItemsPath = (cartId: string, id?: string): string =>
`${getCartsPath(cartId)}/${getItemPath(id)}`;

class CartLineItems {
private client: AxiosInstance;

constructor(client: AxiosInstance) {
this.client = client;
}

/**
* Creates a new cartLineItem
*
* @param cartId The cart ID
* @param data Data used to create the cartLineItem
* @returns Promise resolving to a newly created cartLineItem
*/
create(cartId: string, data: CartLineItem['CreateRequest']): CartLineItem['CreateResponse'] {
return this.client.post(getCartLineItemsPath(cartId), data);
}

/**
* Updates an existing cartLineItem
*
* @param cartId The cart ID
* @param id The cartLineItem ID
* @param data Data used to update the cartLineItem
* @returns Promise resolving to an updated cartLineItem
*/
update(cartId: string, id: string, data: CartLineItem['UpdateRequest']): CartLineItem['UpdateResponse'] {
return this.client.put(getCartLineItemsPath(cartId, id), data);
}

/**
* Deletes a single cartLineItem by ID
*
* @param cartId The cart ID
* @param id The cartLineItem ID
* @param params Query params used to delete cartLineItem
* @returns Promise resolving to a 204 No Content response
*/
delete(cartId: string, id: string, params?: CartLineItem['DeleteRequest']): AxiosPromise<string> {
return this.client.delete(getCartLineItemsPath(cartId, id), {
params,
});
}
}

export default CartLineItems;
21 changes: 21 additions & 0 deletions src/RestClient/endpoints/V3/Cart/CartRedirect.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { AxiosInstance } from 'axios';

import { AxiosPromise } from '../../../../types';

import type { CartRedirect } from './types';

const cartRedirectPath = '/v3/carts';

export const getCartRedirectPath = (cartId: string): string => `${cartRedirectPath}/${cartId}/redirect_urls`;

export default class CartSettingsGlobalEndpoint {
private client: AxiosInstance;

constructor(client: AxiosInstance) {
this.client = client;
}

public get(cartId: string): AxiosPromise<CartRedirect> {
return this.client.get(getCartRedirectPath(cartId));
}
}
25 changes: 25 additions & 0 deletions src/RestClient/endpoints/V3/Cart/CartSettingsChannel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { AxiosInstance } from 'axios';

import { AxiosPromise } from '../../../../types';

import type { CartSettingsChannel } from './types';

const channelSettingsPath = '/v3/carts/settings/channel';

export const getCartSettingsChannelPath = (channelId: string): string => `${channelSettingsPath}/${channelId}`;

export default class CartSettingsChannelEndpoint {
private client: AxiosInstance;

constructor(client: AxiosInstance) {
this.client = client;
}

public get(channelId: string): AxiosPromise<CartSettingsChannel> {
return this.client.get(getCartSettingsChannelPath(channelId));
}

public update(channelId: string, data: CartSettingsChannel['UpdateRequest']): CartSettingsChannel['UpdateResponse'] {
return this.client.put(getCartSettingsChannelPath(channelId), data);
}
}
25 changes: 25 additions & 0 deletions src/RestClient/endpoints/V3/Cart/CartSettingsGlobal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { AxiosInstance } from 'axios';

import { AxiosPromise } from '../../../../types';

import type { CartSettingsGlobal } from './types';

const cartSettingsGlobalPath = '/v3/carts/settings';

export const getCartSettingsGlobalPath = (): string => `${cartSettingsGlobalPath}`;

export default class CartSettingsGlobalEndpoint {
private client: AxiosInstance;

constructor(client: AxiosInstance) {
this.client = client;
}

public get(): AxiosPromise<CartSettingsGlobal> {
return this.client.get(getCartSettingsGlobalPath());
}

public update(data: CartSettingsGlobal['UpdateRequest']): CartSettingsGlobal['UpdateResponse'] {
return this.client.put(getCartSettingsGlobalPath(), data);
}
}
62 changes: 62 additions & 0 deletions src/RestClient/endpoints/V3/Cart/Carts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { AxiosInstance } from 'axios';

import { AxiosPromise } from '../../../../types';

import type { Cart } from './types';

const cartsPath = '/v3/carts';

/**
* Builds a base Carts API path given an optional cart ID
*
* @param id Optional filter parameters
* @returns Returns either '/v3/carts' or '/v3/carts/:cartId
*/

export const getCartsPath = (id?: string): string => (id ? `${cartsPath}/${id}` : cartsPath);

class Carts {
private client: AxiosInstance;

constructor(client: AxiosInstance) {
this.client = client;
}

/**
* Creates a new cart
*
* @param data Data used to create the cart
* @returns Promise resolving to a newly created cart
*/
create(data: Cart['CreateRequest']): Cart['CreateResponse'] {
return this.client.post(getCartsPath(), data);
}

/**
* Gets a single cart by ID
*
* @param id The cart ID
* @param params Query params used to get cart
* @returns Promise resolving to a cart
*/
get(id: string, params?: Cart['GetRequest']): Cart['GetResponse'] {
return this.client.get(getCartsPath(id), {
params,
});
}

/**
* Deletes a single cart by ID
*
* @param id The cart ID
* @param params Query params used to delete cart
* @returns Promise resolving to a 204 No Content response
*/
delete(id: string, params?: Cart['DeleteRequest']): AxiosPromise<string> {
return this.client.delete(getCartsPath(id), {
params,
});
}
}

export default Carts;
25 changes: 25 additions & 0 deletions src/RestClient/endpoints/V3/Cart/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { AxiosInstance } from 'axios';

import CartLineItems from './CartLineItems';
import CartRedirect from './CartRedirect';
import Carts from './Carts';
import CartSettingsChannel from './CartSettingsChannel';
import CartSettingsGlobal from './CartSettingsGlobal';

class CartsV3 {
public carts: Carts;
public cartLineItems: CartLineItems;
public cartRedirect: CartRedirect;
public cartSettingsGlobal: CartSettingsGlobal;
public cartSettingsChannel: CartSettingsChannel;

constructor(client: AxiosInstance) {
this.carts = new Carts(client);
this.cartLineItems = new CartLineItems(client);
this.cartRedirect = new CartRedirect(client);
this.cartSettingsGlobal = new CartSettingsGlobal(client);
this.cartSettingsChannel = new CartSettingsChannel(client);
}
}

export default CartsV3;
61 changes: 61 additions & 0 deletions src/RestClient/endpoints/V3/Cart/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { operations } from '../../../../generate/generated/carts.v3';
import { AxiosPromise } from '../../../../types';

export interface Cart {
CreateRequest: operations['createACart']['requestBody']['content']['application/json'];
CreateResponse: AxiosPromise<operations['createACart']['responses']['201']['content']['application/json']>;
GetRequest: operations['getACart']['parameters']['path'];
GetResponse: AxiosPromise<operations['getACart']['responses']['200']['content']['application/json']>;
DeleteRequest: operations['deleteACart']['parameters']['path'];
DeleteResponse: AxiosPromise<operations['deleteACart']['responses']['204']['content']['application/json']>;
}

export interface CartLineItem {
CreateRequest: operations['addCartLineItem']['requestBody']['content']['application/json'];
CreateResponse: AxiosPromise<operations['addCartLineItem']['responses']['201']['content']['application/json']>;
UpdateRequest: operations['updateCartLineItem']['requestBody']['content']['application/json'];
UpdateResponse: AxiosPromise<operations['updateCartLineItem']['responses']['200']['content']['application/json']>;
DeleteRequest: operations['deleteCartLineItem']['parameters']['path'];
DeleteResponse: AxiosPromise<operations['deleteCartLineItem']['responses']['204']['content']['application/json']>;
}

export interface CartMetaField {
ListRequest: operations['getAllCartMetafields']['parameters']['path'];
ListResponse: AxiosPromise<operations['getAllCartMetafields']['responses']['200']['content']['application/json']>;
GetRequest: operations['getACartMetafield']['parameters']['path'];
GetResponse: AxiosPromise<operations['getACartMetafield']['responses']['200']['content']['application/json']>;
CreateRequest: operations['CreateCartMetafieldsByCartId']['requestBody']['content']['application/json'];
CreateResponse: AxiosPromise<
operations['CreateCartMetafieldsByCartId']['responses']['200']['content']['application/json']
>;
UpdateRequest: operations['UpdateCartMetafieldsByCartId']['parameters']['path'];
UpdateResponse: AxiosPromise<
operations['UpdateCartMetafieldsByCartId']['responses']['200']['content']['application/json']
>;
DeleteRequest: operations['deleteCartMetafieldById']['parameters']['path'];
DeleteResponse: AxiosPromise<
operations['deleteCartMetafieldById']['responses']['204']['content']['application/json']
>;
}

export interface CartRedirect {
CreateRequest: operations['createCartRedirectURL']['parameters']['path'];
CreateResponse: AxiosPromise<operations['createCartRedirectURL']['responses']['201']['content']['application/json']>;
}

export interface CartSettingsGlobal {
GetResponse: AxiosPromise<operations['getGlobalCartSettings']['responses']['200']['content']['application/json']>;
UpdateRequest: operations['updateGlobalCartSettings']['requestBody']['content']['application/json'];
UpdateResponse: AxiosPromise<
operations['updateGlobalCartSettings']['responses']['200']['content']['application/json']
>;
}

export interface CartSettingsChannel {
GetRequest: operations['getChannelCartSettings']['parameters']['path'];
GetResponse: AxiosPromise<operations['getChannelCartSettings']['responses']['200']['content']['application/json']>;
UpdateRequest: operations['updateChannelCartSettings']['parameters']['path'];
UpdateResponse: AxiosPromise<
operations['updateChannelCartSettings']['responses']['200']['content']['application/json']
>;
}
3 changes: 3 additions & 0 deletions src/RestClient/endpoints/V3/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { AxiosInstance } from 'axios';

import CartsV3 from './Cart';
import CatalogV3 from './Catalog';
import CustomersV3 from './Customers';
import ThemesV3 from './Themes';
Expand All @@ -8,12 +9,14 @@ class V3 {
private client: AxiosInstance;

public catalog: CatalogV3;
public carts: CartsV3;
public customers: CustomersV3;
public themes: ThemesV3;

constructor(client: AxiosInstance) {
this.client = client;
this.catalog = new CatalogV3(this.client);
this.carts = new CartsV3(this.client);
this.customers = new CustomersV3(this.client);
this.themes = new ThemesV3(this.client);
}
Expand Down