src/services/ConsultationService.js
import JsonApiService from './JsonApiService';
import Consultation from '../helpers/consult/Consultation';
import ConsultationParticipant from '../helpers/consult/ConsultationParticipant';
import { toJsonApiStub } from '../utilities/ClassUtility';
import {
hasAttribute,
hasToken,
isRequired,
isValid,
validate,
} from '../utilities/ValidationUtility';
/**
* Service handling Consultation calls with specific endpoints.
*/
class ConsultationService extends JsonApiService {
/**
* Call a POST request on the main obj.type expecting JSON API information.
*
* @param {Consultation} consultation - Consultation to join
* @param {ConsultationParticipant} participant - Participant joining
* @param {String} [options] - Modify the nature of the call and response
* @param {String} [options.url] - Override the url for this call
* @param {String} [options.cacheMode] - Override the caching method for this call
* @param {Object} [options.meta] - Pass and retrieve through reference meta data
* @return {Promise} - Promise with object
*
* @example
* import { consultationService, Consultation, ConsultationParticipant } from 'clinical6';
* const consultation = new Consultation({ ... });
* const participant = new ConsultationParticipant({ ... });
*
* // You can update an awarded badge using the `updateAwardedBadge` method
* const meta = {};
* consultationService.join(consultation, participant, { meta });
*
* // You should use instead `consultation.join()`
* consultation.join(); // join using the logged in user
* // or
* consultation.join(participant);
*/
async join(consultation, participant, options = {}) {
validate('ConsultationService.join',
hasToken(),
isRequired({ consultation, participant }),
hasAttribute({ consultation, participant }, 'id'),
isValid((!consultation || consultation instanceof Consultation), 'consultation is not a type of Consultation'),
isValid((!participant || participant instanceof ConsultationParticipant), 'participant is not a type of ConsultationParticipant'));
options.url = '/v3/video_consultation_join';
const data = {
type: 'video_consultation_join',
attributes: {},
relationships: {
video_consultation: { data: toJsonApiStub(consultation) },
video_consultation_participant: { data: toJsonApiStub(participant) }
}
};
return super.insert(data, options);
}
}
export default ConsultationService;