You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
import { Router, Response } from "express"; |
|
import prisma from "../lib/prisma"; |
|
import type { AuthRequest } from "../middleware/auth"; |
|
|
|
const router = Router(); |
|
|
|
router.get("/", async (_req: AuthRequest, res: Response) => { |
|
const settings = await prisma.setting.findMany(); |
|
const result: Record<string, string> = {}; |
|
for (const s of settings) { |
|
result[s.key] = s.key === "deepseek_api_key" ? "••••••" + s.value.slice(-4) : s.value; |
|
} |
|
res.json(result); |
|
}); |
|
|
|
router.get("/raw", async (req: AuthRequest, res: Response) => { |
|
if (req.user!.role !== "TUTOR") { |
|
res.status(403).json({ error: "Только наставник может просматривать полные настройки" }); |
|
return; |
|
} |
|
const settings = await prisma.setting.findMany(); |
|
const result: Record<string, string> = {}; |
|
for (const s of settings) { |
|
result[s.key] = s.value; |
|
} |
|
res.json(result); |
|
}); |
|
|
|
router.put("/", async (req: AuthRequest, res: Response) => { |
|
if (req.user!.role !== "TUTOR") { |
|
res.status(403).json({ error: "Только наставник может менять настройки" }); |
|
return; |
|
} |
|
|
|
const entries: Record<string, string> = req.body; |
|
|
|
for (const [key, value] of Object.entries(entries)) { |
|
await prisma.setting.upsert({ |
|
where: { key }, |
|
update: { value }, |
|
create: { key, value }, |
|
}); |
|
} |
|
|
|
res.json({ success: true }); |
|
}); |
|
|
|
export default router;
|
|
|