import { OfficeFolders } from ".prisma/client"; import OfficeFoldersRepository from "@Repositories/OfficeFoldersRepository"; import BaseService from "@Services/BaseService"; import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; import { Service } from "typedi"; import DeedTypesService from "../DeedTypesService/DeedTypesService"; import DeedsRepository from "@Repositories/DeedsRepository"; @Service() export default class OfficeFoldersService extends BaseService { constructor( private officeFoldersRepository: OfficeFoldersRepository, private deedTypeService: DeedTypesService, private deedRepository: DeedsRepository ) { super(); } /** * @description : Get all folders * @throws {Error} If folders cannot be get */ public async get(query: any): Promise { return this.officeFoldersRepository.findMany(query); } /** * @description : Create a new folder * @throws {Error} If folder cannot be created */ public async create(officeFolderEntity: OfficeFolder): Promise { const deedType = await this.deedTypeService.getByUid(officeFolderEntity.deed!.deed_type!.uid!); if(!deedType) throw new Error('deed type not found'); if(deedType.archived_at) throw new Error('deed type is archived'); const deed = await this.deedRepository.create(officeFolderEntity.deed!); officeFolderEntity.deed!.uid = deed.uid; return this.officeFoldersRepository.create(officeFolderEntity); } /** * @description : Modify a folder * @throws {Error} If folder cannot be modified */ public async update(officeFolderuid: string, officeFolderEntity: OfficeFolder): Promise { return this.officeFoldersRepository.update(officeFolderuid, officeFolderEntity); } /** * @description : Get a folder by uid * @throws {Error} If folder cannot be get by uid */ public async getByUid(uid: string, query?: any): Promise { return this.officeFoldersRepository.findOneByUid(uid, query); } /** * @description : Delete a folder * @throws {Error} If document cannot be deleted */ public async delete(uid: string): Promise { const officeFolderEntity = await this.officeFoldersRepository.findOneByUid(uid, { customers: true }); if(!officeFolderEntity) throw new Error('office folder not found'); const officeFolder = OfficeFolder.hydrate(officeFolderEntity, { strategy: "excludeAll" }); if (officeFolder.customers?.length) { throw new Error("This folder is used by customers"); } return this.officeFoldersRepository.delete(uid); } }