user preferences
All checks were successful
Deploy / deploy (push) Successful in 36s

This commit is contained in:
2025-12-25 21:08:14 +06:00
parent 0ab3e15784
commit b47643552f
4 changed files with 96 additions and 9 deletions

View File

@@ -0,0 +1,10 @@
-- CreateTable
CREATE TABLE "UserPreferences" (
"userId" TEXT NOT NULL PRIMARY KEY,
"toggleInputHotkey" TEXT NOT NULL,
"toggleOutputHotkey" TEXT NOT NULL,
CONSTRAINT "UserPreferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateIndex
CREATE INDEX "Session_userId_idx" ON "Session"("userId");

View File

@@ -0,0 +1,21 @@
/*
Warnings:
- Added the required column `volumes` to the `UserPreferences` table without a default value. This is not possible if the table is not empty.
*/
-- RedefineTables
PRAGMA defer_foreign_keys=ON;
PRAGMA foreign_keys=OFF;
CREATE TABLE "new_UserPreferences" (
"userId" TEXT NOT NULL PRIMARY KEY,
"toggleInputHotkey" TEXT NOT NULL,
"toggleOutputHotkey" TEXT NOT NULL,
"volumes" JSONB NOT NULL,
CONSTRAINT "UserPreferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "new_UserPreferences" ("toggleInputHotkey", "toggleOutputHotkey", "userId") SELECT "toggleInputHotkey", "toggleOutputHotkey", "userId" FROM "UserPreferences";
DROP TABLE "UserPreferences";
ALTER TABLE "new_UserPreferences" RENAME TO "UserPreferences";
PRAGMA foreign_keys=ON;
PRAGMA defer_foreign_keys=OFF;

View File

@@ -17,6 +17,7 @@ model User {
updatedAt DateTime @updatedAt
Session Session[]
UserPreferences UserPreferences?
}
model Session {
@@ -28,3 +29,12 @@ model Session {
@@index([userId])
}
model UserPreferences {
userId String @id
toggleInputHotkey String
toggleOutputHotkey String
volumes Json
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}

46
server/routes/user.ts Normal file
View File

@@ -0,0 +1,46 @@
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(),
toggleOutputHotkey: z.string(),
volumes: z.record(z.string(), z.number()),
})
const input = schema.parse(req.body)
return prisma.userPreferences.update({
where: { userId: req.user.id },
data: 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 })
}
}
})
}