This commit is contained in:
@@ -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");
|
||||
@@ -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;
|
||||
@@ -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
46
server/routes/user.ts
Normal 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 })
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user