feat(db): recordView/listViews fuer recipe_view

INSERT OR REPLACE fuer idempotenten Bump des last_viewed_at Timestamps.
listViews-Helper nur fuer Tests; Sort-Query laeuft direkt in
listAllRecipesPaginated via LEFT JOIN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-22 14:10:52 +02:00
parent 866a222265
commit 6c8de6fa3a
2 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
import type Database from 'better-sqlite3';
export function recordView(
db: Database.Database,
profileId: number,
recipeId: number
): void {
// INSERT OR REPLACE re-fires the DEFAULT (CURRENT_TIMESTAMP) on conflict,
// so subsequent views of the same recipe by the same profile bump the
// timestamp without breaking the composite PK.
db.prepare(
`INSERT OR REPLACE INTO recipe_view (profile_id, recipe_id)
VALUES (?, ?)`
).run(profileId, recipeId);
}
export type ViewRow = {
profile_id: number;
recipe_id: number;
last_viewed_at: string;
};
export function listViews(
db: Database.Database,
profileId: number
): ViewRow[] {
return db
.prepare(
`SELECT profile_id, recipe_id, last_viewed_at
FROM recipe_view
WHERE profile_id = ?
ORDER BY last_viewed_at DESC`
)
.all(profileId) as ViewRow[];
}