net_userMetadataUrlHelperMixin.js
import UrlHelper from "./urlHelper.js";
import UserUrlHelperMixin from "./userUrlHelperMixin.js";
/**
* Create a UserMetadataUrlHelperMixin class.
*
* @param {module:net~UrlHelper} superclass the UrlHelper class to mix onto
* @return {module:net~UserMetadataUrlHelperMixin} the mixin class
*/
const UserMetadataUrlHelperMixin = (superclass) =>
/**
* A mixin class that adds user metadata support to {@link module:net~UrlHelper}.
*
* @mixin
* @alias module:net~UserMetadataUrlHelperMixin
*/
class extends superclass {
/**
* Generate a URL for viewing the configured user's metadata via a <code>GET</code> request.
*
* @param {module:domain~UserMetadataFilter} filter the search criteria
* @returns {string} the URL
*/
findUserMetadataUrl(filter) {
let result = this.baseUrl() + "/users/meta";
if (filter) {
const params = filter.toUriEncoding();
if (params.length > 0) {
result += "?" + params;
}
}
return result;
}
userMetadataUrl(userId) {
let result = this.baseUrl() + "/users/meta";
let userParam = userId || this.userId;
if (Array.isArray(userParam)) {
if (userParam.length > 0) {
userParam = userParam[0];
} else {
userParam = null;
}
}
if (userParam && userId !== null) {
result += "/" + userParam;
}
return result;
}
/**
* Generate a URL for viewing a specific user's metadata via a <code>GET</code> request.
*
* @param {number|null} [userId] a specific user ID;
* if not provided the <code>userId</code> property of this class will be used;
* if <code>null</code> then view metadata of the requesting user
* @returns {string} the URL
*/
viewUserMetadataUrl(userId) {
return this.userMetadataUrl(userId);
}
/**
* Generate a URL for adding user metadata via a <code>POST</code> request.
*
* @param {number|null} [userId] a specific user ID;
* if not provided the <code>userId</code> property of this class will be used;
* if <code>null</code> then add metadata to the requesting user
* @returns {string} the URL
*/
addUserMetadataUrl(userId) {
return this.userMetadataUrl(userId);
}
/**
* Generate a URL for replacing user metadata via a <code>PUT</code> request.
*
* @param {number|null} [userId] a specific user ID;
* if not provided the <code>userId</code> property of this class will be used;
* if <code>null</code> then add metadata to the requesting user
* @returns {string} the URL
*/
replaceUserMetadataUrl(userId) {
return this.userMetadataUrl(userId);
}
/**
* Generate a URL for deleting user metadata via a <code>DELETE</code> request.
*
* @param {number|null} [userId] a specific user ID;
* if not provided the <code>userId</code> property of this class will be used;
* if <code>null</code> then add metadata to the requesting user
* @returns {string} the URL
*/
deleteUserMetadataUrl(userId) {
return this.userMetadataUrl(userId);
}
};
/**
* A concrete {@link module:net~UrlHelper} with the {@link module:net~UserMetadataUrlHelperMixin}
* and {@link module:net~UserUrlHelperMixin} mixins.
*
* @mixes module:net~UserMetadataUrlHelperMixin
* @mixes module:net~UserUrlHelperMixin
* @extends module:net~UrlHelper
* @alias module:net~UserMetadataUrlHelper
*/
class UserMetadataUrlHelper extends UserMetadataUrlHelperMixin(UserUrlHelperMixin(UrlHelper)) {}
export default UserMetadataUrlHelperMixin;
export { UserMetadataUrlHelper };