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<ProjectQueryResuls> {
try {
return await this.projectService.getProjects(filter);
} catch (error) {
console.log('err getting projects',error)
throw new Error('error getting projects' + error)
}
}
getAllProjectMaterials(): Promise<ProjectMaterials[]> {
return this.projectService.getAllProjectMaterials();
}
getProjectById(projectId: ProjectId): Promise<ProjectDetail> {
return this.projectService.getProjectById(projectId);
}
getProjectEarnings(filter: ProjectFilter): Promise<ProjectEarningsResults> {
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<ProjectSummary[]> {
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<Project> {
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<Project>, userId: UserId): Promise<Project> {
return this.projectService.updateProject(data, userId);
}
searchProjects(filter: ProjectFilter): Promise<Partial<Project[]>> {
return this.projectService.searchProjects(filter);
}
createProjectArea(data: Area, userId: UserId): Promise<Area> {
return this.projectService.createProjectArea(data, userId);
}
updateProjectArea(
data: Partial<Area>,
userId: UserId
): Promise<Partial<Area>> {
return this.projectService.updateProjectArea(data, userId);
}
deleteProjectArea(areaId: AreaId, userId: UserId): Promise<Area> {
return this.projectService.deleteProjectArea(areaId, userId);
}
createProjectFloor(data: Floor, userId: UserId): Promise<Floor> {
return this.projectService.createProjectFloor(data, userId);
}
updateProjectFloor(
data: Partial<Floor>,
userId: UserId
): Promise<Partial<Floor>> {
return this.projectService.updateProjectFloor(data, userId);
}
deleteProjectFloor(
floorId: FloorId,
userId: UserId
): Promise<Partial<Floor>> {
return this.projectService.deleteProjectFloor(floorId, userId);
}
}
export const projectServiceFacade = new ProjectServiceFacade(
defaultProjectService
);