RocketChat/Rocket.Chat

View on GitHub
packages/model-typings/src/models/ILivechatVisitorsModel.ts

Summary

Maintainability
A
55 mins
Test Coverage
import type { ILivechatVisitor } from '@rocket.chat/core-typings';
import type {
    AggregationCursor,
    FindCursor,
    Filter,
    FindOptions,
    UpdateResult,
    Document,
    UpdateFilter,
    FindOneAndUpdateOptions,
    ModifyResult,
} from 'mongodb';

import type { FindPaginated, IBaseModel } from './IBaseModel';

export interface ILivechatVisitorsModel extends IBaseModel<ILivechatVisitor> {
    findById(_id: string, options?: FindOptions<ILivechatVisitor>): FindCursor<ILivechatVisitor>;
    getVisitorByToken(token: string, options?: FindOptions<ILivechatVisitor>): Promise<ILivechatVisitor | null>;
    getVisitorsBetweenDate({ start, end, department }: { start: Date; end: Date; department?: string }): FindCursor<ILivechatVisitor>;
    findByNameRegexWithExceptionsAndConditions<P extends Document = ILivechatVisitor>(
        searchTerm: string,
        exceptions: string[],
        conditions: Filter<ILivechatVisitor>,
        options?: FindOptions<P extends ILivechatVisitor ? ILivechatVisitor : P>,
    ): AggregationCursor<
        P & {
            custom_name: string;
        }
    >;

    findPaginatedVisitorsByEmailOrPhoneOrNameOrUsernameOrCustomField(
        emailOrPhone?: string,
        nameOrUsername?: RegExp,
        allowedCustomFields?: string[],
        options?: FindOptions<ILivechatVisitor>,
    ): Promise<FindPaginated<FindCursor<ILivechatVisitor>>>;

    findOneByEmailAndPhoneAndCustomField(
        email: string | null | undefined,
        phone: string | null | undefined,
        customFields?: { [key: string]: RegExp },
    ): Promise<ILivechatVisitor | null>;

    removeContactManagerByUsername(manager: string): Promise<UpdateResult | Document>;

    updateLivechatDataByToken(token: string, key: string, value: unknown, overwrite: boolean): Promise<UpdateResult | Document | boolean>;

    findOneGuestByEmailAddress(emailAddress: string): Promise<ILivechatVisitor | null>;

    findOneVisitorByPhone(phone: string): Promise<ILivechatVisitor | null>;

    removeDepartmentById(_id: string): Promise<Document | UpdateResult>;

    getNextVisitorUsername(): Promise<string>;

    updateLastAgentByToken(token: string, lastAgent: ILivechatVisitor['lastAgent']): Promise<Document | UpdateResult>;

    updateById(_id: string, update: UpdateFilter<ILivechatVisitor>): Promise<Document | UpdateResult>;

    updateOneByIdOrToken(update: UpdateFilter<ILivechatVisitor>, options?: FindOneAndUpdateOptions): Promise<ModifyResult<ILivechatVisitor>>;

    saveGuestEmailPhoneById(_id: string, emails: string[], phones: string[]): Promise<UpdateResult | Document | void>;

    isVisitorActiveOnPeriod(visitorId: string, period: string): Promise<boolean>;

    markVisitorActiveForPeriod(visitorId: string, period: string): Promise<UpdateResult>;

    findOneEnabledById<T extends Document = ILivechatVisitor>(_id: string, options?: FindOptions<ILivechatVisitor>): Promise<T | null>;

    disableById(_id: string): Promise<UpdateResult>;

    findEnabled(query: Filter<ILivechatVisitor>, options?: FindOptions<ILivechatVisitor>): FindCursor<ILivechatVisitor>;

    countVisitorsOnPeriod(period: string): Promise<number>;
    saveGuestById(
        _id: string,
        data: { name?: string; username?: string; email?: string; phone?: string; livechatData: { [k: string]: any } },
    ): Promise<UpdateResult | Document | boolean>;
    setLastChatById(_id: string, lastChat: Required<ILivechatVisitor['lastChat']>): Promise<UpdateResult>;
}