import { UserId } from "@/server/user/domain/models";
import {
DeleteMaterial,
DeleteProjectMaterial,
Material,
MaterialId,
ProjectMaterial,
UpdateProjectMaterial,
} from "../domain/models";
import { MaterialRepository } from "../domain/repositories";
import { MaterialService } from "./material-service-definition";
import { defaultMaterialRepository } from "../infrastructure/repositories-impl";
import { ProjectId } from "@/server/project/domain/models";
class MaterialServiceImpl implements MaterialService {
constructor(private materialRepository: MaterialRepository) {}
getAllMaterials(): Promise<Material[]> {
return this.materialRepository.getAll();
}
createMaterial(data: Material, userId: UserId): Promise<Material> {
return this.materialRepository.create(data, userId);
}
createProjectMaterial(
data: ProjectMaterial,
userId: UserId
): Promise<ProjectMaterial> {
return this.materialRepository.createProjectMaterial(data, userId);
}
updateProjectMaterial(
data: ProjectMaterial,
userId: UserId
): Promise<Partial<ProjectMaterial>> {
return this.materialRepository.updateProjectMaterial(data, userId);
}
deleteMaterials(
deleteMaterials: DeleteMaterial,
userId: UserId
): Promise<Material[]> {
return this.materialRepository.delete(deleteMaterials, userId);
}
deleteProjectMaterials(
data: DeleteProjectMaterial,
userId: UserId
): Promise<DeleteProjectMaterial> {
return this.materialRepository.deleteProjectMaterials(data, userId);
}
getMaterialById(materialId: MaterialId): Promise<Material> {
return this.materialRepository.getById(materialId);
}
getProjectMaterialByProject(
materialId: MaterialId,
projectId: ProjectId
): Promise<ProjectMaterial> {
return this.materialRepository.getProjectMaterialByProject(
materialId,
projectId
);
}
}
export const defaultMaterialService = new MaterialServiceImpl(
defaultMaterialRepository
);