import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; import { DocumentsNotary, Prisma } from "@prisma/client"; import { DocumentNotary } from "le-coffre-resources/dist/Notary"; @Service() export default class DocumentsNotaryRepository extends BaseRepository { constructor(private database: Database) { super(); } protected get model() { return this.database.getClient().documentsNotary; } protected get instanceDb() { return this.database.getClient(); } /** * @description : Find many documents */ public async findMany(query: Prisma.DocumentsNotaryFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } /** * @description : Create a document */ public async create(document: DocumentNotary): Promise { const createArgs: Prisma.DocumentsNotaryCreateArgs = { data: { folder: { connect: { uid: document.folder!.uid, }, }, depositor: { connect: { uid: document.depositor!.uid, }, }, customer: { connect: { uid: document.customer!.uid, }, }, }, }; const documentCreated = await this.model.create({ ...createArgs }); return documentCreated; } /** * @description : Delete a document */ public async delete(uid: string): Promise { return this.model.delete({ where: { uid: uid, }, }); } /** * @description : Find unique document */ public async findOneByUid(uid: string, query?: Prisma.DocumentsNotaryInclude): Promise { return this.model.findUnique({ where: { uid: uid, }, include: query, }); } /** * @description : Find unique document with relations */ public async findOneByUidWithOffice(uid: string) { return this.model.findUnique({ where: { uid: uid, }, include: { folder: { include: { office: true } } }, }); } /** * @description : Find unique document with relations */ public async findOneByUidWithFiles(uid: string) { return this.model.findUnique({ where: { uid: uid, }, include: { files: true }, }); } }