task-managment / src / server / project / application / facade.ts
facade.ts
Raw
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
);