RocketChat/Rocket.Chat

View on GitHub
apps/meteor/server/models/raw/UserDataFiles.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { IUserDataFile, RocketChatRecordDeleted } from '@rocket.chat/core-typings';
import type { IUserDataFilesModel } from '@rocket.chat/model-typings';
import type { Collection, Db, FindOptions, IndexDescription, InsertOneResult, WithId } from 'mongodb';

import { BaseUploadModelRaw } from './BaseUploadModel';

export class UserDataFilesRaw extends BaseUploadModelRaw implements IUserDataFilesModel {
    constructor(db: Db, trash?: Collection<RocketChatRecordDeleted<IUserDataFile>>) {
        super(db, 'user_data_files', trash);
    }

    protected modelIndexes(): IndexDescription[] {
        return [...super.modelIndexes(), { key: { userId: 1 } }];
    }

    findLastFileByUser(userId: string, options: FindOptions<IUserDataFile> = {}): Promise<IUserDataFile | null> {
        const query = {
            userId,
        };

        options.sort = { _updatedAt: -1 };
        return this.findOne(query, options);
    }

    // INSERT
    create(data: IUserDataFile): Promise<InsertOneResult<WithId<IUserDataFile>>> {
        const userDataFile = {
            createdAt: new Date(),
            ...data,
        };

        return this.insertOne(userDataFile);
    }
}