seen.ts 963 B

123456789101112131415161718192021222324252627282930313233343536
  1. import type { IUserHasId } from '@growi/core/dist/interfaces';
  2. import type { HydratedDocument } from 'mongoose';
  3. import mongoose from 'mongoose';
  4. import type { PageDocument, PageModel } from '~/server/models/page';
  5. import loggerFactory from '~/utils/logger';
  6. const logger = loggerFactory('growi:events:page:seen');
  7. export const onSeen = async (
  8. pageId: string,
  9. user: IUserHasId,
  10. ): Promise<void> => {
  11. if (pageId == null || user == null) {
  12. logger.warn('onSeen: pageId or user is null');
  13. return;
  14. }
  15. try {
  16. const Page = mongoose.model<HydratedDocument<PageDocument>, PageModel>(
  17. 'Page',
  18. );
  19. const page = await Page.findById(pageId);
  20. if (page == null) {
  21. logger.warn({ pageId }, 'onSeen: page not found');
  22. return;
  23. }
  24. await page.seen(user);
  25. logger.debug({ pageId }, 'onSeen: successfully marked page as seen');
  26. } catch (err) {
  27. logger.error({ err }, 'onSeen: failed to mark page as seen');
  28. }
  29. };