import type { IInvite, RocketChatRecordDeleted } from '@rocket.chat/core-typings'; import type { IInvitesModel } from '@rocket.chat/model-typings'; import type { Collection, Db, UpdateResult } from 'mongodb'; import { BaseRaw } from './BaseRaw'; export class InvitesRaw extends BaseRaw implements IInvitesModel { constructor(db: Db, trash?: Collection>) { super(db, 'invites', trash); } findOneByUserRoomMaxUsesAndExpiration(userId: string, rid: string, maxUses: number, daysToExpire: number): Promise { return this.findOne({ rid, userId, days: daysToExpire, maxUses, ...(daysToExpire > 0 ? { expires: { $gt: new Date() } } : {}), ...(maxUses > 0 ? { uses: { $lt: maxUses } } : {}), }); } increaseUsageById(_id: string, uses = 1): Promise { return this.updateOne( { _id }, { $inc: { uses, }, }, ); } async countUses(): Promise { const [result] = await this.col.aggregate<{ totalUses: number }>([{ $group: { _id: null, totalUses: { $sum: '$uses' } } }]).toArray(); return result?.totalUses || 0; } }