import type { IMessage, ILivechatInquiryRecord, LivechatInquiryStatus, SelectedAgent } from '@rocket.chat/core-typings'; import type { FindOptions, Document, UpdateResult, DeleteResult, FindCursor, DeleteOptions, AggregateOptions } from 'mongodb'; import type { IBaseModel } from './IBaseModel'; import type { DocumentWithProjection, FindOptionsWithProjection } from '../types/DocumentWithProjection'; export interface ILivechatInquiryModel extends IBaseModel { findOneByRoomId = FindOptionsWithProjection>( rid: string, options?: O, ): Promise | null>; getDistinctQueuedDepartments(options: AggregateOptions): Promise<{ _id: string | null }[]>; setDepartmentByInquiryId(inquiryId: string, department: string): Promise; setLastMessageByRoomId(rid: ILivechatInquiryRecord['rid'], message: IMessage): Promise; setLastMessageById(inquiryId: string, lastMessage: IMessage): Promise; findNextAndLock( queueSortBy: FindOptions['sort'], department: string | null, ): Promise; unlock(inquiryId: string): Promise; unlockAll(): Promise; getCurrentSortedQueueAsync(props: { inquiryId?: string; department?: string; queueSortBy: FindOptions['sort']; }): Promise<(Pick & { position: number })[]>; removeByRoomId(rid: string, options?: DeleteOptions): Promise; getQueuedInquiries = FindOptionsWithProjection>( options?: O, ): FindCursor>; takeInquiry(inquiryId: string, lockedAt?: Date): Promise; queueInquiry(inquiryId: string, lastMessage?: IMessage, defaultAgent?: SelectedAgent | null): Promise; queueInquiryAndRemoveDefaultAgent(inquiryId: string): Promise; readyInquiry(inquiryId: string): Promise; changeDepartmentIdByRoomId(rid: string, department: string): Promise; getStatus(inquiryId: string): Promise; updateVisitorStatus(token: string, status: ILivechatInquiryRecord['v']['status']): Promise; setDefaultAgentById(inquiryId: string, defaultAgent: ILivechatInquiryRecord['defaultAgent']): Promise; setNameByRoomId(rid: string, name: string): Promise; findOneByToken(token: string): Promise; removeDefaultAgentById(inquiryId: string): Promise; markInquiryActiveForPeriod(rid: ILivechatInquiryRecord['rid'], period: string): Promise; setStatusById(inquiryId: string, status: LivechatInquiryStatus): Promise; updateNameByVisitorIds(visitorIds: string[], name: string): Promise; findByVisitorIds = FindOptionsWithProjection>( visitorIds: string[], options?: O, ): FindCursor>; }