import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; import { EOfficeStatus, Offices, Prisma } from "@prisma/client"; import { Office as OfficeRessource } from "le-coffre-resources/dist/SuperAdmin"; @Service() export default class OfficesRepository extends BaseRepository { constructor(private database: Database) { super(); } protected get model() { return this.database.getClient().offices; } protected get instanceDb() { return this.database.getClient(); } /** * @description : Find many users */ public async findMany(query: Prisma.OfficesFindManyArgs) { if(query){ query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); } return this.model.findMany(query); } /** * @description : Create an office */ public async create(office: OfficeRessource): Promise { const createArgs: Prisma.OfficesCreateArgs = { data: { idNot: office.idNot, name: office.name, crpcen: office.crpcen, address: { create: { address: office.address!.address, zip_code: office.address!.zip_code, city: office.address!.city, }, }, office_status: EOfficeStatus.DESACTIVATED, }, }; return this.model.create(createArgs); } /** * @description : Update data from an office */ public async update(uid: string, office: OfficeRessource): Promise { const updateArgs: Prisma.OfficesUpdateArgs = { where: { uid: uid, }, data: { name: office.name, address: { create: { address: office.address!.address, zip_code: office.address!.zip_code, city: office.address!.city, }, }, office_status: EOfficeStatus[office.office_status as keyof typeof EOfficeStatus], }, }; return this.model.update(updateArgs); } /** * @description : Find one office */ public async findOneByUid(uid: string, query?: Prisma.OfficesInclude) { return this.model.findUnique({ where: { uid: uid, }, include: query, }); } /** * @description : Find one office */ public async findOneByProvider(providerName: string, id: string, query?: Prisma.OfficesInclude) { return this.model.findUnique({ where: { [providerName]: id }, include: query, }); } }