diff --git a/packages/medusa-js/src/resources/admin/customer-groups.ts b/packages/medusa-js/src/resources/admin/customer-groups.ts new file mode 100644 index 0000000000..b50562ef16 --- /dev/null +++ b/packages/medusa-js/src/resources/admin/customer-groups.ts @@ -0,0 +1,127 @@ +import { + AdminPostCustomerGroupsReq, + AdminCustomerGroupsRes, + AdminGetCustomerGroupsParams, + AdminCustomerGroupsListRes, + AdminPostCustomerGroupsGroupReq, + AdminCustomerGroupsDeleteRes, + AdminPostCustomerGroupsGroupCustomersBatchReq, + AdminDeleteCustomerGroupsGroupCustomerBatchReq, +} from "@medusajs/medusa" +import qs from "qs" + +import BaseResource from "../base" +import { ResponsePromise } from "../.." + +class AdminCustomerGroupsResource extends BaseResource { + /** + * Create a customer group. + * + * @param payload - Customer group info. + * @param customHeaders + */ + create( + payload: AdminPostCustomerGroupsReq, + customHeaders: Record = {} + ): ResponsePromise { + const path = `/admin/customer-groups` + return this.client.request("POST", path, payload, {}, customHeaders) + } + + /** + * Retrieves a customer group. + * + * @param id - customer group id + * @param customHeaders + */ + retrieve( + id: string, + customHeaders: Record = {} + ): ResponsePromise { + const path = `/admin/customer-groups/${id}` + return this.client.request("GET", path, {}, {}, customHeaders) + } + /** + * Updates a customer group + * + * @param id customer group id + * @param payload data to update customer group with + * @param customHeaders + */ + update( + id: string, + payload: AdminPostCustomerGroupsGroupReq, + customHeaders: Record = {} + ): ResponsePromise { + const path = `/admin/customer-groups/${id}` + return this.client.request("POST", path, payload, {}, customHeaders) + } + + /** + * Deletes a cusotmer group. + * + * @param id - id of the customer gorup + * @param customHeaders + */ + delete( + id: string, + customHeaders: Record = {} + ): ResponsePromise { + const path = `/admin/customer-groups/${id}` + return this.client.request("DELETE", path, {}, {}, customHeaders) + } + + /** + * Lists customer groups. + * + * @param query optional + * @param customHeaders + */ + list( + query?: AdminGetCustomerGroupsParams, + customHeaders: Record = {} + ): ResponsePromise { + let path = `/admin/customer-groups` + + if (query) { + const queryString = qs.stringify(query) + path = `/admin/customer-groups?${queryString}` + } + + return this.client.request("GET", path, {}, {}, customHeaders) + } + + /** + * Add multiple customers to a customer group. + * + * @param id - customer group id + * @param payload - an object which contains an array of customer ids which will be added to the group + * @param customHeaders + */ + addCustomers( + id: string, + payload: AdminPostCustomerGroupsGroupCustomersBatchReq, + customHeaders: Record = {} + ): Promise { + const path = `/admin/customer-groups/${id}/customers/batch` + return this.client.request("POST", path, payload, {}, customHeaders) + } + + /** + * Remove multiple customers from a customer group. + * + * @param id - customer group id + * @param payload - an object which contains an array of customers ids which will be removed from the group + * @param customHeaders + */ + removeCustomers( + id: string, + payload: AdminDeleteCustomerGroupsGroupCustomerBatchReq, + customHeaders: Record = {} + ): Promise { + const path = `/admin/customer-groups/${id}/customers/batch` + return this.client.request("DELETE", path, payload, {}, customHeaders) + } +} + +export default AdminCustomerGroupsResource diff --git a/packages/medusa-js/src/resources/admin/customers.ts b/packages/medusa-js/src/resources/admin/customers.ts index 6607d3f373..c2d60dd46b 100644 --- a/packages/medusa-js/src/resources/admin/customers.ts +++ b/packages/medusa-js/src/resources/admin/customers.ts @@ -15,7 +15,10 @@ class AdminCustomersResource extends BaseResource { * @param payload information of customer * @param customHeaders */ - create(payload: AdminPostCustomersReq, customHeaders: Record = {}): ResponsePromise { + create( + payload: AdminPostCustomersReq, + customHeaders: Record = {} + ): ResponsePromise { const path = `/admin/customers` return this.client.request("POST", path, payload, {}, customHeaders) } @@ -40,7 +43,10 @@ class AdminCustomersResource extends BaseResource { * @param id customer id * @param customHeaders */ - retrieve(id: string, customHeaders: Record = {}): ResponsePromise { + retrieve( + id: string, + customHeaders: Record = {} + ): ResponsePromise { const path = `/admin/customers/${id}` return this.client.request("GET", path, {}, {}, customHeaders) } diff --git a/packages/medusa-js/src/resources/admin/index.ts b/packages/medusa-js/src/resources/admin/index.ts index 8b1ed8ac0a..854f901f56 100644 --- a/packages/medusa-js/src/resources/admin/index.ts +++ b/packages/medusa-js/src/resources/admin/index.ts @@ -1,6 +1,7 @@ import BaseResource from "../base" import AdminAuthResource from "./auth" import AdminCustomersResource from "./customers" +import AdminCustomerGroupsResource from "./customer-groups" import AdminDiscountsResource from "./discounts" import CollectionsResource from "./collections" import AdminDraftOrdersResource from "./draft-orders" @@ -27,6 +28,7 @@ import AdminProductTagsResource from "./product-tags" class Admin extends BaseResource { public auth = new AdminAuthResource(this.client) public customers = new AdminCustomersResource(this.client) + public customerGroups = new AdminCustomerGroupsResource(this.client) public discounts = new AdminDiscountsResource(this.client) public collections = new CollectionsResource(this.client) public draftOrders = new AdminDraftOrdersResource(this.client) diff --git a/packages/medusa/src/api/index.js b/packages/medusa/src/api/index.js index 90235c6029..6f879f23d1 100644 --- a/packages/medusa/src/api/index.js +++ b/packages/medusa/src/api/index.js @@ -19,6 +19,7 @@ export default (container, config) => { export * from "./routes/admin/collections" export * from "./routes/admin/auth" export * from "./routes/admin/customers" +export * from "./routes/admin/customer-groups" export * from "./routes/admin/discounts" export * from "./routes/admin/draft-orders" export * from "./routes/admin/gift-cards" diff --git a/packages/medusa/src/api/routes/admin/customer-groups/index.ts b/packages/medusa/src/api/routes/admin/customer-groups/index.ts index 5d52632dca..2db730d993 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/index.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/index.ts @@ -32,6 +32,10 @@ export default (app) => { return app } +/* ************************************** */ +/* ******** EXPORT API CLIENT TYPES ***** */ +/* ************************************** */ + export type AdminCustomerGroupsRes = { customer_group: CustomerGroup } @@ -44,4 +48,9 @@ export type AdminCustomerGroupsListRes = PaginatedResponse & { export const defaultAdminCustomerGroupsRelations = [] +export * from "./add-customers-batch" export * from "./create-customer-group" +export * from "./delete-customers-batch" +export * from "./get-customer-group" +export * from "./list-customer-groups" +export * from "./update-customer-group"