import {
router,
publicProcedure,
isAdminMiddleware,
} from "../trpc";
import { z } from "zod";
import { materialServiceFacade } from "../material/application/facade";
import { v4 as uuidv4 } from 'uuid';
import { materialSchema, projectMaterialSchema } from "@/lib/schemas/materialSchema";
export const materialsRouter = router({
getMaterials: publicProcedure.query(async ({ctx}) => {
return await materialServiceFacade.getAllMaterials()
}),
updateProjectMaterial: publicProcedure
.use(isAdminMiddleware)
.input(
projectMaterialSchema.partial()
)
.mutation(async ({ input, ctx }) => {
const userId={value:ctx.user.userId}
return await materialServiceFacade.updateProjectMaterial({...input},userId)
}),
addMaterialToProject: publicProcedure
.use(isAdminMiddleware)
.input(
projectMaterialSchema.extend({
id:z.string().uuid().default(()=>uuidv4())
})
)
.mutation(async ({ input, ctx }) => {
const userId={value:ctx.user.userId}
const projectId={value:input.projectId}
const materialId={value:input.materialId}
return await materialServiceFacade.createProjectMaterial({...input,projectId,materialId},userId)
}),
createMaterial: publicProcedure
.use(isAdminMiddleware)
.input(
materialSchema
)
.mutation(async ({ input, ctx }) => {
const userId={value:ctx.user.userId}
return await materialServiceFacade.createMaterial(input,userId)
}),
deleteMaterials: publicProcedure
.use(isAdminMiddleware)
.input(
z.object({
materialIds:z.array(z.string())
})
)
.mutation(async ({ input, ctx }) => {
const userId={value:ctx.user.userId}
return await materialServiceFacade.deleteMaterials(input,userId)
}),
deleteProjectMaterial: publicProcedure
.use(isAdminMiddleware)
.input(
z.object({
materialId: z.string().uuid(),
name:z.string(),
projectName:z.string(),
projectId:z.string()
})
)
.mutation(async ({ input, ctx }) => {
const userId={value:ctx.user.userId}
return await materialServiceFacade.deleteProjectMaterials(input,userId)
}),
});