The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/ee/server/models/raw/CannedResponse.ts

109 lines
2.7 KiB

import type { IOmnichannelCannedResponse } from '@rocket.chat/core-typings';
import type { ICannedResponseModel } from '@rocket.chat/model-typings';
import type { Db, DeleteResult, FindCursor, FindOptions, IndexDescription } from 'mongodb';
import { BaseRaw } from '../../../../server/models/raw/BaseRaw';
// TODO need to define type for CannedResponse object
export class CannedResponseRaw extends BaseRaw<IOmnichannelCannedResponse> implements ICannedResponseModel {
constructor(db: Db) {
super(db, 'canned_response');
}
protected modelIndexes(): IndexDescription[] {
return [
{
key: {
shortcut: 1,
},
unique: true,
},
];
}
async updateCannedResponse(
_id: string,
{ shortcut, text, tags, scope, userId, departmentId, createdBy }: Omit<IOmnichannelCannedResponse, '_id' | '_updatedAt' | '_createdAt'>,
): Promise<Omit<IOmnichannelCannedResponse, '_updatedAt' | '_createdAt'>> {
const record = {
shortcut,
text,
scope,
tags,
userId,
departmentId,
createdBy,
};
await this.updateOne({ _id }, { $set: record });
return Object.assign(record, { _id });
}
async createCannedResponse({
shortcut,
text,
tags,
scope,
userId,
departmentId,
createdBy,
_createdAt,
}: Omit<IOmnichannelCannedResponse, '_id' | '_updatedAt'>): Promise<Omit<IOmnichannelCannedResponse, '_updatedAt'>> {
const record = {
shortcut,
text,
scope,
tags,
userId,
departmentId,
createdBy,
_createdAt,
};
const _id = (await this.insertOne(record)).insertedId;
return Object.assign(record, { _id });
}
findOneById(_id: string, options?: FindOptions<IOmnichannelCannedResponse>): Promise<IOmnichannelCannedResponse | null> {
const query = { _id };
return this.findOne(query, options);
}
findOneByShortcut(shortcut: string, options?: FindOptions<IOmnichannelCannedResponse>): Promise<IOmnichannelCannedResponse | null> {
const query = {
shortcut,
};
return this.findOne(query, options);
}
findByCannedResponseId(_id: string, options?: FindOptions<IOmnichannelCannedResponse>): FindCursor<IOmnichannelCannedResponse> {
const query = { _id };
return this.find(query, options);
}
findByDepartmentId(departmentId: string, options?: FindOptions<IOmnichannelCannedResponse>): FindCursor<IOmnichannelCannedResponse> {
const query = {
scope: 'department',
departmentId,
};
return this.find(query, options);
}
findByShortcut(shortcut: string, options?: FindOptions<IOmnichannelCannedResponse>): FindCursor<IOmnichannelCannedResponse> {
const query = { shortcut };
return this.find(query, options);
}
// REMOVE
removeById(_id: string): Promise<DeleteResult> {
const query = { _id };
return this.deleteOne(query);
}
}