From 93426bfc0263b3a19e6d47e19cc498fea441fb30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Thu, 3 Mar 2022 03:52:40 +0100 Subject: [PATCH] feat: customer groups client endpoints (#1147) * feat: WIP add customer group endpoints, fix generated type exports from api * fix: export api types, add `list`method * fix: export customer groups types from the `medusa-js` package * fix: cleanup type exports from customer groups api * feat: add customer group batch methods * fix: refactor comments * fix: address PR comments Co-authored-by: fPolic --- .../src/resources/admin/customer-groups.ts | 127 ++++++++++++++++++ .../src/resources/admin/customers.ts | 10 +- .../medusa-js/src/resources/admin/index.ts | 2 + packages/medusa/src/api/index.js | 1 + .../api/routes/admin/customer-groups/index.ts | 9 ++ 5 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 packages/medusa-js/src/resources/admin/customer-groups.ts 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"