import type { FastifyInstance } from 'fastify' import { z } from 'zod' import prisma from '../prisma/client.ts' export default function (fastify: FastifyInstance) { fastify.get('/preferences', async (req, reply) => { if (req.user) { return prisma.userPreferences.findFirst({ where: { userId: req.user.id } }) } reply.code(401).send(false) }) fastify.patch('/preferences', async (req, reply) => { if (!req.user) { reply.code(401).send(false) return } try { const schema = z.object({ toggleInputHotkey: z.string().optional(), toggleOutputHotkey: z.string().optional(), volumes: z.record(z.string(), z.number()).optional(), }) const input = schema.parse(req.body) return prisma.userPreferences.upsert({ where: { userId: req.user.id }, create: { userId: req.user.id, ...input, }, update: input, }) } catch (err) { fastify.log.error(err) reply.code(400) if (err instanceof z.ZodError) { reply.send({ error: z.prettifyError(err) }) } else { reply.send({ error: err.message }) } } }) }