task-managment / src / server / material / application / facade.ts
facade.ts
Raw
import { UserId } from "@/server/user/domain/models";
import { DeleteMaterial, DeleteProjectMaterial, Material, ProjectMaterial, UpdateProjectMaterial } from "../domain/models";
import { MaterialService } from "./material-service-definition";
import { defaultMaterialService } from "./material-service-impl";
import { ProjectMaterialDto } from "./dto";
import { v4 as uuidv4 } from 'uuid';

class MaterialServiceFacadeImpl  {
  constructor(private materialService: MaterialService) {}

  getAllMaterials(): Promise<Material[]> {
      return this.materialService.getAllMaterials()
  }
  async createMaterial(data: Material, userId: UserId): Promise<Material> {
    try {
      return await this.materialService.createMaterial(data,userId)

    } catch (error) {
      console.log('error', error)
      throw new Error('Error creating material')
    }
  }
  async createProjectMaterial(dto:ProjectMaterialDto , userId: UserId): Promise<ProjectMaterial> {
      const projectMaterial:ProjectMaterial={
        ...dto,
        id:uuidv4(),
        projectId:dto.projectId.value,
        materialId:dto.materialId.value,
      }
      return await this.materialService.createProjectMaterial(projectMaterial,userId)
  }
  async updateProjectMaterial(dto: Partial<ProjectMaterial>, userId: UserId): Promise<Partial<ProjectMaterial>> {
    return this.materialService.updateProjectMaterial(dto,userId)
  }
 async deleteMaterials(deleteMaterials: DeleteMaterial, userId: UserId): Promise<Material[]> {
     try {
      return await this.materialService.deleteMaterials(deleteMaterials,userId)
     } catch (error) {
      throw new Error('Error al eliminar material')
     }
  }
  async deleteProjectMaterials(data: DeleteProjectMaterial, userId: UserId): Promise<DeleteProjectMaterial> {
    try {
      
      return await this.materialService.deleteProjectMaterials(data,userId)

    } catch (error) {
      console.log('error deleting prohect material',error)
      throw new Error('Error deleting project material')
    }
  }
}

export const materialServiceFacade=new MaterialServiceFacadeImpl(defaultMaterialService)