import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Subscriptions } from '../../../models'; import { API } from '../api'; API.v1.addRoute( 'subscriptions.get', { authRequired: true }, { get() { const { updatedSince } = this.queryParams; let updatedSinceDate; if (updatedSince) { if (isNaN(Date.parse(updatedSince))) { throw new Meteor.Error('error-roomId-param-invalid', 'The "lastUpdate" query parameter must be a valid date.'); } else { updatedSinceDate = new Date(updatedSince); } } let result; Meteor.runAsUser(this.userId, () => { result = Meteor.call('subscriptions/get', updatedSinceDate); }); if (Array.isArray(result)) { result = { update: result, remove: [], }; } return API.v1.success(result); }, }, ); API.v1.addRoute( 'subscriptions.getOne', { authRequired: true }, { get() { const { roomId } = this.requestParams(); if (!roomId) { return API.v1.failure("The 'roomId' param is required"); } const subscription = Subscriptions.findOneByRoomIdAndUserId(roomId, this.userId); return API.v1.success({ subscription, }); }, }, ); /** This API is suppose to mark any room as read. Method: POST Route: api/v1/subscriptions.read Params: - rid: The rid of the room to be marked as read. */ API.v1.addRoute( 'subscriptions.read', { authRequired: true }, { post() { check(this.bodyParams, { rid: String, }); Meteor.runAsUser(this.userId, () => Meteor.call('readMessages', this.bodyParams.rid)); return API.v1.success(); }, }, ); API.v1.addRoute( 'subscriptions.unread', { authRequired: true }, { post() { const { roomId, firstUnreadMessage } = this.bodyParams; if (!roomId && firstUnreadMessage && !firstUnreadMessage._id) { return API.v1.failure('At least one of "roomId" or "firstUnreadMessage._id" params is required'); } Meteor.runAsUser(this.userId, () => Meteor.call('unreadMessages', firstUnreadMessage, roomId)); return API.v1.success(); }, }, );