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)