import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; import { Emails, Prisma } from "prisma/prisma-client"; @Service() export default class EmailRepository extends BaseRepository { constructor(private database: Database) { super(); } protected get model() { return this.database.getClient().emails; } protected get instanceDb() { return this.database.getClient(); } /** * @description : Find many emails */ public async findMany(query: Prisma.EmailsFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } /** * @description : Create an email */ public async create(email: Emails): Promise { const createArgs: Prisma.EmailsCreateArgs = { data: { templateName: email.templateName, from: email.from, to: email.to, subject: email.subject, templateVariables: email.templateVariables!, cc: email.cc, cci: email.cci, }, }; return this.model.create(createArgs); } /** * @description : update given email */ public async update(uid: string, email: Emails): Promise { const updateArgs: Prisma.EmailsUpdateArgs = { where: { uid: uid, }, data: { sentAt: email.sentAt, nbTrySend: email.nbTrySend, lastTrySendDate: email.lastTrySendDate, }, }; return this.model.update(updateArgs); } /** * @description : find unique email */ public async findOneByUid(uid: string) { return this.model.findUnique({ where: { uid: uid, }, }); } }