task-managment / src / server / task / application / facade.ts
facade.ts
Raw
import { UserId } from "@/server/user/domain/models";
import {
  FilterTasks,
  MonthlyActivity,
  ProjectTaskQueryResult,
  Task,
  TaskId,
  TasksByDate,
  User,
  WeeklyActivity,
} from "../domain/models";
import { TaskService } from "./task-service-definition";
import { defaultTaskService } from "./task-service-impl";
import { UserService } from "@/server/user/application/service-definition";
import { defaultUserService } from "@/server/user/application/user-service-impl";

class TaskFacadeImpl {
  constructor(
    private taskService: TaskService,
    private userService: UserService
  ) {}

  async getAllTasks(filter: FilterTasks, userId?: UserId): Promise<TasksByDate[]> {
    try {
      return await this.taskService.getAllTasks(filter, userId);

    } catch (error) {
      console.log('error geting all tasks',error)  
      throw new Error("Error getting all task");
    }
  }

  async getUserCompleatedTasks(filter: FilterTasks): Promise<any[]>{
    return await this.taskService.getUserCompleatedTasks(filter)
  }
  
  getRecentModifiedTasks(): Promise<Task[]> {
    return this.taskService.getRecentModifiedTasks();
  }
  getProjectTasks(filter: FilterTasks): Promise<ProjectTaskQueryResult[]> {
    return this.taskService.getProjectTasks(filter);
  }
  async createTask(input: Task, userId: UserId): Promise<Task> {
    try {
      return await this.taskService.createTask(input, userId);
    } catch (error) {
      throw error
    }
  }
  async updateTask(
    input: Partial<Task>,
    userId: UserId
  ): Promise<Partial<Task>> {
    let userAssigned: User | undefined = undefined;
    if (input?.userId) {
      userAssigned = await this.userService.getUserById(userId);
    }
    return this.taskService.updateTask(
      { ...input, user: userAssigned },
      userId
    );
  }
  deleteTask(taskId: TaskId, userId: UserId): Promise<Task> {
    return this.taskService.deleteTask(taskId, userId);
  }

  getUserWeeklyActivity(userId: UserId): Promise<WeeklyActivity[]> {
    return this.taskService.getUserWeeklyActivity(userId);
  }

  async getUserMonthActivity(userId: UserId): Promise<MonthlyActivity> {
    try {
         return await this.taskService.getUserMonthActivity(userId);

    } catch (error) {
      console.log('err getting month act',error)
      throw new Error('Error getting monthly activity')
    }
  }
}

export const taskServiceFacade = new TaskFacadeImpl(
  defaultTaskService,
  defaultUserService
);