import { and, desc, eq, or } from 'drizzle-orm'; import { Router } from 'express'; import { db } from '../../db/client'; import { streamSessions } from '../../db/schema'; import { requireDeviceAuth } from '../../middleware/device-auth'; import { listSchema } from './schemas'; import { ensureStreamDeviceAuth } from './shared'; const router = Router(); router.get('/me/list', requireDeviceAuth, async (req, res) => { const parsed = listSchema.safeParse(req.query); if (!parsed.success) { res.status(400).json({ message: 'Invalid query params', errors: parsed.error.flatten() }); return; } const deviceAuth = ensureStreamDeviceAuth(req, res); if (!deviceAuth) return; const sessions = await db.query.streamSessions.findMany({ where: and( eq(streamSessions.ownerUserId, deviceAuth.userId), or(eq(streamSessions.requesterDeviceId, deviceAuth.deviceId), eq(streamSessions.cameraDeviceId, deviceAuth.deviceId)), ), orderBy: [desc(streamSessions.createdAt)], limit: parsed.data.limit, }); const filtered = parsed.data.status ? sessions.filter((session) => session.status === parsed.data.status) : sessions; res.json({ count: filtered.length, streamSessions: filtered }); }); export default router;