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;