refactor(views): ON CONFLICT DO UPDATE statt INSERT OR REPLACE
Code-Review-Finding zu commit6c8de6f: INSERT OR REPLACE ist intern DELETE+INSERT, das wuerde eventuelle FK-Children kuenftig stillschweigend mitloeschen. ON CONFLICT DO UPDATE bumpt nur das Timestamp-Feld und matcht den Stil der anderen Repos (shopping/repository.ts:43). Migration-Dateiname zu recipe_view (singular) angeglichen, matcht jetzt den Tabellennamen aus543008b. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,12 +5,14 @@ export function recordView(
|
||||
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.
|
||||
// ON CONFLICT DO UPDATE bumps only the timestamp field — avoids the
|
||||
// DELETE+INSERT that INSERT OR REPLACE performs under the hood, which would
|
||||
// silently cascade-delete any future FK-referencing children.
|
||||
db.prepare(
|
||||
`INSERT OR REPLACE INTO recipe_view (profile_id, recipe_id)
|
||||
VALUES (?, ?)`
|
||||
`INSERT INTO recipe_view (profile_id, recipe_id)
|
||||
VALUES (?, ?)
|
||||
ON CONFLICT(profile_id, recipe_id) DO UPDATE
|
||||
SET last_viewed_at = CURRENT_TIMESTAMP`
|
||||
).run(profileId, recipeId);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user