task-managment / src / server / material / application / material-service-impl.ts
material-service-impl.ts
Raw
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
);