Files
Termix/src/backend/database/routes/user-preferences.ts
T

107 lines
3.1 KiB
TypeScript
Raw Normal View History

2026-05-28 22:05:25 -04:00
import type { AuthenticatedRequest } from "../../../types/index.js";
import express from "express";
import { db } from "../db/index.js";
import { userPreferences } from "../db/schema.js";
import { eq } from "drizzle-orm";
import type { Request, Response } from "express";
import { databaseLogger } from "../../utils/logger.js";
import { AuthManager } from "../../utils/auth-manager.js";
const router = express.Router();
const authManager = AuthManager.getInstance();
const authenticateJWT = authManager.createAuthMiddleware();
/**
* @openapi
* /user-preferences:
* get:
* summary: Get preferences for the current user
* tags:
* - User Preferences
* responses:
* 200:
* description: User preferences.
* content:
* application/json:
* schema:
* type: object
* properties:
* reopenTabsOnLogin:
* type: boolean
*/
router.get("/", authenticateJWT, (req: Request, res: Response) => {
const userId = (req as AuthenticatedRequest).userId;
try {
const rows = db
.select()
.from(userPreferences)
.where(eq(userPreferences.userId, userId))
.all();
if (rows.length === 0) {
return res.json({ reopenTabsOnLogin: false });
}
return res.json({ reopenTabsOnLogin: rows[0].reopenTabsOnLogin });
} catch (e) {
databaseLogger.error("Failed to get user preferences", e, { operation: "get_user_preferences", userId });
return res.status(500).json({ error: "Failed to get user preferences" });
}
});
/**
* @openapi
* /user-preferences:
* put:
* summary: Update preferences for the current user
* tags:
* - User Preferences
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* reopenTabsOnLogin:
* type: boolean
* responses:
* 200:
* description: Preferences updated successfully.
*/
router.put("/", authenticateJWT, (req: Request, res: Response) => {
const userId = (req as AuthenticatedRequest).userId;
const { reopenTabsOnLogin } = req.body as { reopenTabsOnLogin?: boolean };
if (typeof reopenTabsOnLogin !== "boolean") {
return res.status(400).json({ error: "reopenTabsOnLogin must be a boolean" });
}
try {
const existing = db
.select()
.from(userPreferences)
.where(eq(userPreferences.userId, userId))
.all();
if (existing.length === 0) {
db.insert(userPreferences).values({
userId,
reopenTabsOnLogin,
updatedAt: new Date().toISOString(),
}).run();
} else {
db.update(userPreferences)
.set({ reopenTabsOnLogin, updatedAt: new Date().toISOString() })
.where(eq(userPreferences.userId, userId))
.run();
}
return res.json({ success: true, reopenTabsOnLogin });
} catch (e) {
databaseLogger.error("Failed to update user preferences", e, { operation: "update_user_preferences", userId });
return res.status(500).json({ error: "Failed to update user preferences" });
}
});
export default router;