From c62280beaafb31261b4e35a341c4207d71161be3 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Fri, 10 Apr 2026 19:35:35 -0400 Subject: [PATCH] feat(api): migrate reading progress to universal progress tracking Refactor UpdateMediaReadingProgress handler to use UpdateUniversalProgress database function, providing comprehensive progress tracking capabilities including device sync information, viewport data, reading mode, and scroll position for enhanced cross-platform reading synchronization. --- internal/handlers/media.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/internal/handlers/media.go b/internal/handlers/media.go index 536ce30..653c062 100644 --- a/internal/handlers/media.go +++ b/internal/handlers/media.go @@ -933,13 +933,25 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error { return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()}) } - progress, err := mh.db.UpdateReadingProgress(c.Request().Context(), database.UpdateReadingProgressParams{ - MediaItemID: pgtype.UUID{Bytes: mediaUUID, Valid: true}, - UserID: pgtype.UUID{Bytes: userUUID, Valid: true}, - CurrentPage: pgtype.Int4{Int32: req.CurrentPage, Valid: true}, - TotalPages: pgtype.Int4{Int32: req.TotalPages, Valid: req.TotalPages > 0}, - Epubcfi: req.Epubcfi, - Percentage: req.Percentage, + progress, err := mh.db.UpdateUniversalProgress(c.Request().Context(), database.UpdateUniversalProgressParams{ + MediaItemID: pgtype.UUID{Bytes: mediaUUID, Valid: true}, + UserID: pgtype.UUID{Bytes: userUUID, Valid: true}, + Percentage: pgtype.Float8{Float64: req.Percentage, Valid: true}, + CharacterOffset: pgtype.Int8{Valid: false}, + Epubcfi: pgtype.Text{String: req.Epubcfi, Valid: req.Epubcfi != ""}, + Chapter: pgtype.Int4{Valid: false}, + ChapterProgress: pgtype.Float8{Valid: false}, + ViewportX: pgtype.Float8{Valid: false}, + ViewportY: pgtype.Float8{Valid: false}, + ZoomLevel: pgtype.Float8{Valid: false}, + ScrollPositionX: pgtype.Float8{Valid: false}, + ScrollPositionY: pgtype.Float8{Valid: false}, + PanelNumber: pgtype.Int4{Valid: false}, + ReadingMode: pgtype.Text{Valid: false}, + LastSyncDevice: pgtype.Text{String: "web", Valid: true}, + LastSyncSource: pgtype.Text{String: "web", Valid: true}, + CurrentPage: pgtype.Int4{Int32: req.CurrentPage, Valid: true}, + TotalPages: pgtype.Int4{Int32: req.TotalPages, Valid: req.TotalPages > 0}, }) if err != nil { return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})