Manual Reference Source Test

src/services/RelatedUserService.js

import JsonApiService from './JsonApiService';
import {
  hasAttribute,
  hasToken,
  isRequired,
  validate,
} from '../utilities/ValidationUtility';

/**
 * Service handling RelatedUser calls with specific endpoints.
 */

class RelatedUserService extends JsonApiService {
  /**
   * Update type to be related_users
   */
  constructor() {
    super('related_users');
  }

  /**
   * @override
   * Call a DELETE request on the main obj.type expecting JSON API information.
   *
   * @param  {RelatedUser} relatedUser  - RelatedUser in which to delete
   * @param  {String}      [cacheMode]  - Override the caching method for this call
   * @return {Promise}                  - Message
   */
  delete(relatedUser, cacheMode = undefined) {
    validate('RelatedUserService.delete',
      hasToken(),
      hasAttribute({ relatedUser }, 'id'),
      hasAttribute({ relatedUser }, 'type'));
    return super.delete(relatedUser, { cacheMode });
  }

  /**
   * @override
   * Call a GET request expecting JSON API information.
   *
   * @throws {Clinical6Error}     - If missing token or missing required parameters
   * @param  {Object} [params]    - Parameters used to get information from server (such as id)
   * @param  {String} [cacheMode] - Override the caching method for this call
   * @return {Promise<RelatedUser[] | RelatedUser>}
   *                              - Promise object that returns one relatedUser or a key:relatedUser hashtable
   *
   * @example
   * import { relatedUserService } from 'clinical6';
   *
   * // You will be able to access these relatedUsers using the `getByUser` method.
   * relatedUserService.getByUser().then(relatedUsers => console.log(relatedUsers));
   *
   * // Additionally, you can retrieve a specific relatedUser with the `get`
   * // method, using the ID, user type and relationship ('follower' || 'followed') of the desired relatedUser as a parameter.
   * relatedUser.getByUser({id: 23, type: 'mobile_users', relationship: 'follower'}).then(relatedUser => console.log(relatedUser));
   */
  getByUser(params = {}, cacheMode = undefined) {
    validate('RelatedUserService.get',
      hasToken(),
      hasAttribute({ params }, 'id'),
      hasAttribute({ params }, 'type'),
      hasAttribute({ params }, 'relationship'));
    const url = `/v3/${params.type}/${params.id}/related_users?filter=${params.relationship}`;
    return super.get(params, { url, cacheMode });
  }

  /**
   * @override
   * Call a POST request on the main obj.type expecting JSON API information.
   *
   * @param  {RelatedUser} relatedUser          - RelatedUser object in which to insert
   * @param  {String} [cacheMode]               - Override the caching method for this call
   * @return {Promise<RelatedUser>}             - Inserted relatedUser
   *
   * @example
   * import { RelatedUser, relatedUserService } from 'clinical6';
   * const relatedUser = new RelatedUser({...});
   *
   * // you can insert a relatedUser using the `insert` method.
   * relatedUserService.insert(relatedUser).then(relatedUser => console.log(relatedUser));
   *
   * // you could also just call `save` on the relatedUser if it doesn't have an id, which will also
   * // invoke the `insert` method
   * relatedUser.save();
   */
  insert(relatedUser, cacheMode = undefined) {
    validate('RelatedUserService.insert',
      hasToken(),
      isRequired({ relatedUser }),
      hasAttribute({ relatedUser }, 'type'));
    return super.insert(relatedUser, cacheMode);
  }

  /**
   * @override
   * Call a PATCH request on the main obj.type expecting JSON API information.
   *
   * @param  {RelatedUser} relatedUser  - RelatedUser object in which to update
   * @param  {String} [cacheMode]       - Override the caching method for this call
   * @return {Promise<RelatedUser>}     - Updated relatedUser
   *
   * @example
   * import { RelatedUser, relatedUserService } from 'clinical6';
   * const relatedUser = new RelatedUser({...});
   *
   * // you can update a relatedUser using the `update` method.
   * relatedUserService.update(relatedUser).then(relatedUser => console.log(relatedUser));
   *
   * // you could also just call `save` on the relatedUser if it has an id, which will also
   * // invoke the `update` method
   * relatedUser.save();
   */
  update(relatedUser, cacheMode = undefined) {
    validate('RelatedUserService.update',
      hasToken(),
      isRequired({ relatedUser }),
      hasAttribute({ relatedUser }, 'id'),
      hasAttribute({ relatedUser }, 'type'));
    return super.update(relatedUser, { cacheMode });
  }
}

export default RelatedUserService;