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
);