fix(medusa): Implement listAndCount for UserService and update list endpoint (#6190)

This commit is contained in:
Kasper Fabricius Kristensen
2024-01-24 10:41:35 +01:00
committed by GitHub
parent eb498c500e
commit d68089b2aa
13 changed files with 633 additions and 198 deletions
+39 -14
View File
@@ -1,37 +1,38 @@
import {
AdminDeleteUserRes,
AdminGetUsersParams,
AdminResetPasswordRequest,
AdminResetPasswordTokenRequest,
AdminUserRes,
AdminUsersListRes,
} from "@medusajs/medusa"
import qs from "qs"
import {
ResponsePromise,
AdminCreateUserPayload,
AdminUpdateUserPayload,
ResponsePromise,
} from "../.."
import BaseResource from "../base"
/**
* This class is used to send requests to [Admin User API Routes](https://docs.medusajs.com/api/admin#users). All its method
* are available in the JS Client under the `medusa.admin.users` property.
*
*
* All methods in this class require {@link AdminAuthResource.createSession | user authentication}.
*
*
* A store can have more than one user, each having the same privileges. Admins can manage users, their passwords, and more.
*
*
* Related Guide: [How to manage users](https://docs.medusajs.com/modules/users/admin/manage-users).
*/
class AdminUsersResource extends BaseResource {
/**
* Generate a password token for an admin user with a given email. This also triggers the `user.password_reset` event. So, if you have a Notification Service installed
* that can handle this event, a notification, such as an email, will be sent to the user. The token is triggered as part of the `user.password_reset` event's payload.
* that can handle this event, a notification, such as an email, will be sent to the user. The token is triggered as part of the `user.password_reset` event's payload.
* That token must be used later to reset the password using the {@link resetPassword} method.
* @param {AdminResetPasswordTokenRequest} payload - The user's reset details.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<void>} Resolves when the token is generated successfully.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -60,7 +61,7 @@ class AdminUsersResource extends BaseResource {
* @param {AdminResetPasswordRequest} payload - The reset details.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminUserRes>} Resolves to the user's details.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -86,7 +87,7 @@ class AdminUsersResource extends BaseResource {
* @param {string} id - The user's ID.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminUserRes>} Resolves to the user's details.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -109,7 +110,7 @@ class AdminUsersResource extends BaseResource {
* @param {AdminCreateUserPayload} payload - The user to create.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminUserRes>} Resolves to the user's details.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -136,7 +137,7 @@ class AdminUsersResource extends BaseResource {
* @param {AdminUpdateUserPayload} payload - The attributes to update in the user.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminUserRes>} Resolves to the user's details.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -162,7 +163,7 @@ class AdminUsersResource extends BaseResource {
* @param {string} id - The user's ID.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminDeleteUserRes>} Resolves to the deletion operation's details.
*
*
* @example
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
@@ -184,8 +185,10 @@ class AdminUsersResource extends BaseResource {
* Retrieve all admin users.
* @param {Record<string, any>} customHeaders - Custom headers to attach to the request.
* @returns {ResponsePromise<AdminUsersListRes>} Resolves to the list of users.
*
*
* @example
* To list users:
*
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
* // must be previously logged in or use api token
@@ -193,11 +196,33 @@ class AdminUsersResource extends BaseResource {
* .then(({ users }) => {
* console.log(users.length);
* })
*
* By default, only the first `20` users are returned. You can control pagination by specifying the `limit` and `offset` properties:
*
* ```ts
* import Medusa from "@medusajs/medusa-js"
* const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
* // must be previously logged in or use api token
* medusa.admin.users.list({
* limit,
* offset
* })
* .then(({ users, limit, offset, count }) => {
* console.log(users.length);
* })
* ```
*/
list(
query?: AdminGetUsersParams,
customHeaders: Record<string, any> = {}
): ResponsePromise<AdminUsersListRes> {
const path = `/admin/users`
let path = `/admin/users`
if (query) {
const queryString = qs.stringify(query)
path += `?${queryString}`
}
return this.client.request("GET", path, undefined, {}, customHeaders)
}
}