Files
sexy/lib/db/queries/session-events.ts
valknarandClaude Sonnet 5 401b9b5033
CI / Build and push image (push) Successful in 1m41s
CI / Static checks (push) Successful in 2m12s
Remove recordings feature, replay sessions directly, bump to 0.6.0
Recordings were just a thin named pointer over an already-captured
session's events, so the whole separate feature (recordings table, API
routes, pages, UI) is gone: any completed session can now be named and
replayed directly. Replaying no longer creates a session or duplicates
events of its own - it just bumps the source session's playCount/lastPlayedAt.

Also renames play_sessions/playSession(s) to sessions/session(s) throughout
the schema, queries, API routes, and UI for consistency, and updates the
README to match the new flow.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 21:38:51 +02:00

43 lines
1.1 KiB
TypeScript

import { asc, eq } from "drizzle-orm";
import { db, sqlite } from "@/lib/db/client";
import { sessionEvents } from "@/lib/db/schema";
export interface IncomingEvent {
sessionDeviceId: number;
tsMs: number;
commandType: "vibrate" | "rotate" | "linear" | "stop";
featureIndex: number;
value: number;
durationMs?: number;
}
export async function insertEvents(sessionId: number, events: IncomingEvent[]): Promise<void> {
if (events.length === 0) return;
const insertMany = sqlite.transaction((rows: IncomingEvent[]) => {
for (const row of rows) {
db.insert(sessionEvents)
.values({
sessionId,
sessionDeviceId: row.sessionDeviceId,
tsMs: row.tsMs,
commandType: row.commandType,
featureIndex: row.featureIndex,
value: row.value,
durationMs: row.durationMs,
})
.run();
}
});
insertMany(events);
}
export async function getEventsForSession(sessionId: number) {
return db
.select()
.from(sessionEvents)
.where(eq(sessionEvents.sessionId, sessionId))
.orderBy(asc(sessionEvents.tsMs));
}