diff --git a/app/api/server/v1/custom-user-status.js b/app/api/server/v1/custom-user-status.js index 14764be6248fe..162ab1e0fc513 100644 --- a/app/api/server/v1/custom-user-status.js +++ b/app/api/server/v1/custom-user-status.js @@ -1,3 +1,7 @@ +import { Meteor } from 'meteor/meteor'; +import { Match, check } from 'meteor/check'; + +import { CustomUserStatus } from '../../../models'; import { API } from '../api'; import { findCustomUserStatus } from '../lib/custom-user-status'; @@ -16,3 +20,69 @@ API.v1.addRoute('custom-user-status.list', { authRequired: true }, { }))); }, }); + +API.v1.addRoute('custom-user-status.create', { authRequired: true }, { + post() { + check(this.bodyParams, { + name: String, + statusType: Match.Maybe(String), + }); + + const userStatusData = { + name: this.bodyParams.name, + statusType: this.bodyParams.statusType, + }; + + Meteor.runAsUser(this.userId, () => { + Meteor.call('insertOrUpdateUserStatus', userStatusData); + }); + + return API.v1.success({ + customUserStatus: CustomUserStatus.findOneByName(userStatusData.name), + }); + }, +}); + +API.v1.addRoute('custom-user-status.delete', { authRequired: true }, { + post() { + const { customUserStatusId } = this.bodyParams; + if (!customUserStatusId) { + return API.v1.failure('The "customUserStatusId" params is required!'); + } + + Meteor.runAsUser(this.userId, () => Meteor.call('deleteCustomUserStatus', customUserStatusId)); + + return API.v1.success(); + }, +}); + +API.v1.addRoute('custom-user-status.update', { authRequired: true }, { + post() { + check(this.bodyParams, { + _id: String, + name: String, + statusType: Match.Maybe(String), + }); + + const userStatusData = { + _id: this.bodyParams._id, + name: this.bodyParams.name, + statusType: this.bodyParams.statusType, + }; + + const customUserStatus = CustomUserStatus.findOneById(userStatusData._id); + + // Ensure the message exists + if (!customUserStatus) { + return API.v1.failure(`No custom user status found with the id of "${ userStatusData._id }".`); + } + + Meteor.runAsUser(this.userId, () => { + Meteor.call('insertOrUpdateUserStatus', userStatusData); + }); + + return API.v1.success({ + customUserStatus: CustomUserStatus.findOneById(userStatusData._id), + }); + }, +}); diff --git a/app/models/server/models/CustomUserStatus.js b/app/models/server/models/CustomUserStatus.js index 9e0818dc63542..eb3a586da6ba1 100644 --- a/app/models/server/models/CustomUserStatus.js +++ b/app/models/server/models/CustomUserStatus.js @@ -12,6 +12,11 @@ class CustomUserStatus extends Base { return this.findOne(_id, options); } + // find one by name + findOneByName(name, options) { + return this.findOne({ name }, options); + } + // find findByName(name, options) { const query = {