import { publicProcedure, router } from "~/server/trpc"; import { db } from "~/server/db"; import { music } from "~/server/dbschema/schema"; import { eq } from "drizzle-orm"; import { isAdmin } from "~/app/actions"; import { TRPCError } from "@trpc/server"; import { z } from "zod"; import { createMusicInputSchema, updateMusicInputSchema } from "~/lib/trpc/music/schemas"; import { utapi } from "../uploadthing"; export const musicRouter = router({ list: publicProcedure.query(async () => { let res = await db.select().from(music).orderBy(music.createdAt); console.log(res); return res; }), create: publicProcedure .input( createMusicInputSchema ) .mutation(async ({ input }) => { const admin = await isAdmin(); if (!admin) throw new TRPCError({ code: "FORBIDDEN", message: "Access denied" }); let res = await db.insert(music).values(input).returning(); return res.at(0); }), update: publicProcedure .input( updateMusicInputSchema ) .mutation(async ({ input }) => { const admin = await isAdmin(); if (!admin) throw new TRPCError({ code: "FORBIDDEN", message: "Access denied" }); const { id, ...data } = input; return db.update(music).set(data).where(eq(music.id, id)).returning(); }), delete: publicProcedure .input(z.object({id:z.string().uuid()})) .mutation(async ({ input }) => { const admin = await isAdmin(); if (!admin) throw new TRPCError({ code: "FORBIDDEN", message: "Access denied" }); let res = await db.delete(music).where(eq(music.id, input.id)).returning(); let ret = res.at(0) if (ret) { utapi.deleteFiles(ret.fileKey) } return ret; }), });