"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = require("express"); const asyncHandler_1 = require("../utils/asyncHandler"); const db_1 = require("../db"); const schema_1 = require("../db/schema"); const drizzle_orm_1 = require("drizzle-orm"); const auth_1 = require("../utils/auth"); const errorHandler_1 = require("../middleware/errorHandler"); const validation_1 = require("../utils/validation"); const router = (0, express_1.Router)(); router.use(auth_1.authMiddleware); router.get('/me', (0, asyncHandler_1.asyncHandler)(async (req, res) => { const userId = req.user.userId; const user = await db_1.db.select().from(schema_1.users).where((0, drizzle_orm_1.eq)(schema_1.users.id, userId)).limit(1); if (user.length === 0) { throw new errorHandler_1.AppError('NOT_FOUND', 'User not found', 404); } const settings = await db_1.db .select() .from(schema_1.userSettings) .where((0, drizzle_orm_1.eq)(schema_1.userSettings.userId, userId)) .limit(1); let defaultCategory = settings[0]?.defaultCategory; if (defaultCategory) { const cat = await db_1.db .select() .from(schema_1.categories) .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.categories.id, defaultCategory), (0, drizzle_orm_1.eq)(schema_1.categories.userId, userId))) .limit(1); if (cat.length === 0) { defaultCategory = null; } } res.json({ id: user[0].id, username: user[0].username, settings: { darkMode: settings[0]?.darkMode ?? false, notifications: settings[0]?.notifications ?? true, reminderTime: settings[0]?.reminderTime ?? '09:00', defaultCategory, sortBy: settings[0]?.sortBy ?? 'dueDate', sortOrder: settings[0]?.sortOrder ?? 'asc', }, createdAt: user[0].createdAt, }); })); router.patch('/me/settings', (0, asyncHandler_1.asyncHandler)(async (req, res) => { const data = validation_1.userSettingsSchema.parse(req.body); const userId = req.user.userId; // Validate defaultCategory if provided if (data.defaultCategory) { const cat = await db_1.db .select() .from(schema_1.categories) .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.categories.id, data.defaultCategory), (0, drizzle_orm_1.eq)(schema_1.categories.userId, userId))) .limit(1); if (cat.length === 0) { throw new errorHandler_1.AppError('NOT_FOUND', 'Default category not found', 404); } } const now = Date.now(); const existing = await db_1.db .select() .from(schema_1.userSettings) .where((0, drizzle_orm_1.eq)(schema_1.userSettings.userId, userId)) .limit(1); if (existing.length === 0) { await db_1.db.insert(schema_1.userSettings).values({ userId, ...data, updatedAt: now, }); } else { await db_1.db .update(schema_1.userSettings) .set({ ...data, updatedAt: now }) .where((0, drizzle_orm_1.eq)(schema_1.userSettings.userId, userId)); } res.status(200).json({ success: true }); })); router.get('/search', (0, asyncHandler_1.asyncHandler)(async (req, res) => { const { q } = req.query; const userId = req.user.userId; if (!q || typeof q !== 'string' || q.length < 2) { return res.json([]); } const results = await db_1.db .select({ id: schema_1.users.id, username: schema_1.users.username }) .from(schema_1.users) .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.ilike)(schema_1.users.username, `%${q}%`), (0, drizzle_orm_1.eq)(schema_1.users.id, userId))) .limit(10); res.json(results); })); exports.default = router; //# sourceMappingURL=users.js.map