import { UserId } from "@/server/user/domain/models"; import { Area, AreaId, Floor, FloorId, Project, ProjectDetail, ProjectEarningsResults, ProjectFilter, ProjectId, ProjectMaterials, ProjectQueryResuls, ProjectSummary, } from "../domain/models"; import { ProjectService } from "./project-service-definition"; import { defaultProjectService } from "./project-service-impl"; class ProjectServiceFacade { constructor(private projectService: ProjectService) {} async getProjects(filter: ProjectFilter): Promise { try { return await this.projectService.getProjects(filter); } catch (error) { console.log('err getting projects',error) throw new Error('error getting projects' + error) } } getAllProjectMaterials(): Promise { return this.projectService.getAllProjectMaterials(); } getProjectById(projectId: ProjectId): Promise { return this.projectService.getProjectById(projectId); } getProjectEarnings(filter: ProjectFilter): Promise { try { return this.projectService.getProjectEarnings(filter); } catch (error) { console.log("err project earning", error); throw new Error("err getting project earnings" + error); } } getProjectSummary(filter: ProjectFilter): Promise { try { return this.projectService.getProjectSummary(filter); } catch (error) { console.log("err project summary", error); throw new Error("err getting project summary" + error); } } async createProject(data: Project, userId: UserId): Promise { try { return await this.projectService.createProject(data, userId); } catch (error) { console.log('err creating project',error) throw new Error('Error creating project') } } updateProject(data: Partial, userId: UserId): Promise { return this.projectService.updateProject(data, userId); } searchProjects(filter: ProjectFilter): Promise> { return this.projectService.searchProjects(filter); } createProjectArea(data: Area, userId: UserId): Promise { return this.projectService.createProjectArea(data, userId); } updateProjectArea( data: Partial, userId: UserId ): Promise> { return this.projectService.updateProjectArea(data, userId); } deleteProjectArea(areaId: AreaId, userId: UserId): Promise { return this.projectService.deleteProjectArea(areaId, userId); } createProjectFloor(data: Floor, userId: UserId): Promise { return this.projectService.createProjectFloor(data, userId); } updateProjectFloor( data: Partial, userId: UserId ): Promise> { return this.projectService.updateProjectFloor(data, userId); } deleteProjectFloor( floorId: FloorId, userId: UserId ): Promise> { return this.projectService.deleteProjectFloor(floorId, userId); } } export const projectServiceFacade = new ProjectServiceFacade( defaultProjectService );