lecoffre-back/src/common/repositories/DocumentsNotaryRepository.ts
2024-09-09 05:45:17 +02:00

103 lines
2.2 KiB
TypeScript

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<DocumentsNotary> {
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<DocumentsNotary> {
return this.model.delete({
where: {
uid: uid,
},
});
}
/**
* @description : Find unique document
*/
public async findOneByUid(uid: string, query?: Prisma.DocumentsNotaryInclude): Promise<DocumentsNotary | null> {
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 },
});
}
}