feat: add database models and queries for annotations

- Add MediaNotes and MediaHighlights model structs with pgx v5 types
- Add EbookNotes and EbookHighlights for backward compatibility
- Add complete CRUD SQL queries for notes and highlights
- Add database connection pool function using pgx v5
- Generate sqlc code for new annotation functionality
This commit is contained in:
2026-01-28 15:42:34 -05:00
parent 168c6b2302
commit 29669e2fa3
4 changed files with 735 additions and 1 deletions
+99 -1
View File
@@ -279,4 +279,102 @@ DELETE FROM media_ratings WHERE media_item_id = $1 AND user_id = $2;
-- Legacy folder management is now handled through libraries
-- name: GetEbookByFilePath :one
SELECT * FROM ebooks WHERE file_path = $1;
SELECT * FROM ebooks WHERE file_path = $1;
-- Media Notes queries
-- name: CreateMediaNote :one
INSERT INTO media_notes (media_item_id, user_id, content, position)
VALUES ($1, $2, $3, $4)
RETURNING *;
-- name: GetMediaNote :one
SELECT * FROM media_notes WHERE id = $1;
-- name: GetMediaNotes :many
SELECT * FROM media_notes WHERE media_item_id = $1 AND user_id = $2 ORDER BY created_at DESC;
-- name: UpdateMediaNote :one
UPDATE media_notes SET
content = $2,
position = $3,
updated_at = NOW()
WHERE id = $1
RETURNING *;
-- name: DeleteMediaNote :exec
DELETE FROM media_notes WHERE id = $1;
-- Media Highlights queries
-- name: CreateMediaHighlight :one
INSERT INTO media_highlights (media_item_id, user_id, selection_text, start_position, end_position, color, note_id)
VALUES ($1, $2, $3, $4, $5, $6, $7)
RETURNING *;
-- name: GetMediaHighlight :one
SELECT * FROM media_highlights WHERE id = $1;
-- name: GetMediaHighlights :many
SELECT * FROM media_highlights WHERE media_item_id = $1 AND user_id = $2 ORDER BY created_at DESC;
-- name: UpdateMediaHighlight :one
UPDATE media_highlights SET
selection_text = $2,
start_position = $3,
end_position = $4,
color = $5,
note_id = $6,
updated_at = NOW()
WHERE id = $1
RETURNING *;
-- name: DeleteMediaHighlight :exec
DELETE FROM media_highlights WHERE id = $1;
-- Backward compatibility - Ebook Notes queries (using views)
-- name: CreateEbookNote :one
INSERT INTO media_notes (media_item_id, user_id, content, position)
VALUES ($1, $2, $3, $4)
RETURNING *;
-- name: GetEbookNote :one
SELECT * FROM ebook_notes WHERE id = $1;
-- name: GetEbookNotes :many
SELECT * FROM ebook_notes WHERE ebook_id = $1 AND user_id = $2 ORDER BY created_at DESC;
-- name: UpdateEbookNote :one
UPDATE media_notes SET
content = $2,
position = $3,
updated_at = NOW()
WHERE id = $1
RETURNING *;
-- name: DeleteEbookNote :exec
DELETE FROM media_notes WHERE id = $1;
-- Backward compatibility - Ebook Highlights queries (using views)
-- name: CreateEbookHighlight :one
INSERT INTO media_highlights (media_item_id, user_id, selection_text, start_position, end_position, color, note_id)
VALUES ($1, $2, $3, $4, $5, $6, $7)
RETURNING *;
-- name: GetEbookHighlight :one
SELECT * FROM ebook_highlights WHERE id = $1;
-- name: GetEbookHighlights :many
SELECT * FROM ebook_highlights WHERE ebook_id = $1 AND user_id = $2 ORDER BY created_at DESC;
-- name: UpdateEbookHighlight :one
UPDATE media_highlights SET
selection_text = $2,
start_position = $3,
end_position = $4,
color = $5,
note_id = $6,
updated_at = NOW()
WHERE id = $1
RETURNING *;
-- name: DeleteEbookHighlight :exec
DELETE FROM media_highlights WHERE id = $1;