From ed336c6c41494f0a320505c9c4da6317fd5dd9de Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sat, 31 Jan 2026 00:29:37 -0500 Subject: [PATCH] feat: add Kobo entitlements and shelves models --- internal/database/models.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/internal/database/models.go b/internal/database/models.go index 1437f95..ffb0837 100644 --- a/internal/database/models.go +++ b/internal/database/models.go @@ -140,6 +140,36 @@ type Ebooks struct { HasFixedLayout pgtype.Bool `db:"has_fixed_layout" json:"has_fixed_layout"` TotalCharacters pgtype.Int8 `db:"total_characters" json:"total_characters"` ChapterCount pgtype.Int4 `db:"chapter_count" json:"chapter_count"` + EntitlementID pgtype.Text `db:"entitlement_id" json:"entitlement_id"` + RevisionNumber pgtype.Int4 `db:"revision_number" json:"revision_number"` + KoboContentID pgtype.Text `db:"kobo_content_id" json:"kobo_content_id"` + KoboMetadata []byte `db:"kobo_metadata" json:"kobo_metadata"` +} + +type KoboEntitlements struct { + ID pgtype.UUID `db:"id" json:"id"` + DeviceID pgtype.UUID `db:"device_id" json:"device_id"` + MediaItemID pgtype.UUID `db:"media_item_id" json:"media_item_id"` + EntitlementID string `db:"entitlement_id" json:"entitlement_id"` + ContentID string `db:"content_id" json:"content_id"` + RevisionNumber pgtype.Int4 `db:"revision_number" json:"revision_number"` + PurchaseDate pgtype.Timestamptz `db:"purchase_date" json:"purchase_date"` + AccessionDate pgtype.Timestamptz `db:"accession_date" json:"accession_date"` + BookStatus pgtype.Text `db:"book_status" json:"book_status"` + SyncStatus pgtype.Text `db:"sync_status" json:"sync_status"` + KoboMetadata []byte `db:"kobo_metadata" json:"kobo_metadata"` + CreatedAt pgtype.Timestamptz `db:"created_at" json:"created_at"` + UpdatedAt pgtype.Timestamptz `db:"updated_at" json:"updated_at"` +} + +type KoboShelves struct { + ID pgtype.UUID `db:"id" json:"id"` + DeviceID pgtype.UUID `db:"device_id" json:"device_id"` + MediaItemID pgtype.UUID `db:"media_item_id" json:"media_item_id"` + ShelfName pgtype.Text `db:"shelf_name" json:"shelf_name"` + ShelfPosition pgtype.Int4 `db:"shelf_position" json:"shelf_position"` + AddedAt pgtype.Timestamptz `db:"added_at" json:"added_at"` + LastSyncedAt pgtype.Timestamptz `db:"last_synced_at" json:"last_synced_at"` } type Libraries struct { @@ -243,6 +273,10 @@ type MediaItems struct { HasFixedLayout pgtype.Bool `db:"has_fixed_layout" json:"has_fixed_layout"` TotalCharacters pgtype.Int8 `db:"total_characters" json:"total_characters"` ChapterCount pgtype.Int4 `db:"chapter_count" json:"chapter_count"` + EntitlementID pgtype.Text `db:"entitlement_id" json:"entitlement_id"` + RevisionNumber pgtype.Int4 `db:"revision_number" json:"revision_number"` + KoboContentID pgtype.Text `db:"kobo_content_id" json:"kobo_content_id"` + KoboMetadata []byte `db:"kobo_metadata" json:"kobo_metadata"` } type MediaNotes struct {