activity.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { getModelSafely } from '@growi/core';
  2. import { IActivity } from '~/interfaces/activity';
  3. import { IPage } from '~/interfaces/page';
  4. import Activity from '~/server/models/activity';
  5. import loggerFactory from '../../utils/logger';
  6. import Crowi from '../crowi';
  7. const logger = loggerFactory('growi:service:ActivityService');
  8. type ParameterType = Omit<IActivity, 'createdAt'>
  9. class ActivityService {
  10. crowi!: Crowi;
  11. activityEvent: any;
  12. constructor(crowi: Crowi) {
  13. this.crowi = crowi;
  14. this.activityEvent = crowi.event('activity');
  15. this.updateByParameters = this.updateByParameters.bind(this);
  16. this.initActivityEventListeners();
  17. }
  18. initActivityEventListeners(): void {
  19. this.activityEvent.on('update', async(activityId: string, parameters: ParameterType, target?: IPage) => {
  20. // update activity
  21. let activity: IActivity;
  22. try {
  23. activity = await this.updateByParameters(activityId, parameters);
  24. }
  25. catch (err) {
  26. logger.error('Update activity failed', err);
  27. return;
  28. }
  29. this.activityEvent.emit('updated', activity, target);
  30. });
  31. }
  32. /**
  33. * @param {object} parameters
  34. * @return {Promise}
  35. */
  36. createByParameters = function(parameters) {
  37. const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
  38. return Activity.create(parameters);
  39. };
  40. updateByParameters = async function(activityId: string, parameters: ParameterType): Promise<IActivity> {
  41. const activity = await Activity.findOneAndUpdate({ _id: activityId }, parameters, { new: true }) as unknown as IActivity;
  42. return activity;
  43. };
  44. /**
  45. * @param {User} user
  46. * @return {Promise}
  47. */
  48. findByUser = function(user) {
  49. return this.find({ user }).sort({ createdAt: -1 }).exec();
  50. };
  51. }
  52. module.exports = ActivityService;