task-managment / src / server / routers / task.ts
task.ts
Raw
import {
  router,
  publicProcedure,
  isSigninMiddleware,
  isAdminMiddleware,
} from "../trpc";
import { z } from "zod";
import { paramsSchema } from "./projects";
import { taskServiceFacade } from "../task/application/facade";
import {  createTaskSchema, updateTaskSchema } from "@/lib/schemas/taskSchema";

export const taskRouter = router({
  getProjectTasks: publicProcedure
    .input(paramsSchema)
    .query(async ({ input, ctx }) => {
      return await taskServiceFacade.getProjectTasks(input as any);
    }),
  getRecentModifiedTasks: publicProcedure
    .use(isSigninMiddleware)
    .query(async ({ ctx }) => {
      return await taskServiceFacade.getRecentModifiedTasks();
    }),
  getTasks: publicProcedure
    .use(isSigninMiddleware)
    .input(
      z.object({
        status: z
          .enum(["pendiente", "expirada", "completada"])
          .optional()
          .default("pendiente"),
        searchQuery: z.string().optional().default(""),
        limit: z.number().default(50).optional(),
        onlyUserTask: z.boolean().optional(),
        onlyRecentModifiedTask: z.boolean().optional(),
      })
    )
    .query(async ({ input, ctx }) => {
      const userId={value:ctx.user.userId}
     return await taskServiceFacade.getAllTasks(input,userId)
    }),
  createTask: publicProcedure
    .use(isAdminMiddleware)
    .input(createTaskSchema)
    .mutation(async ({ input, ctx }) => {
      const userId={value:ctx.user.userId}
     return await taskServiceFacade.createTask(input,userId)
    }),
  updateTask: publicProcedure
    .use(isSigninMiddleware)
    .input(updateTaskSchema)
    .mutation(async ({ input, ctx }) => {
      const userId={value:ctx.user.userId}
      return await taskServiceFacade.updateTask(input,userId)
    }),
  deleteTask: publicProcedure
    .use(isAdminMiddleware)
    .input(
      z.object({
        value: z.string().uuid(),
      })
    )
    .mutation(async ({ input, ctx }) => {
      const userId={value:ctx.user.userId}
      return await taskServiceFacade.deleteTask(input,userId)
    }),
});