diff --git a/internal/router/frontend.go b/internal/router/frontend.go index 840c5b9..b63dc8e 100644 --- a/internal/router/frontend.go +++ b/internal/router/frontend.go @@ -818,6 +818,62 @@ func registerFrontendRoutes(cfg *Config) { return c.HTML(http.StatusOK, buf.String()) })) + frontendProtected.GET("/admin/libraries/:id/issues", handlers.AdminMiddleware(func(c *echo.Context) error { + user, err := getTemplateUserWithTheme(c, cfg) + if err != nil { + return renderErrorPage(c, "Error loading user", "user_load_error") + } + libraryID := c.Param("id") + libUUID, err := uuid.Parse(libraryID) + if err != nil { + return renderErrorPage(c, "Invalid library ID", "invalid_id") + } + // Fetch stats + stats, err := cfg.Queries.GetProcessingIssueStats( + c.Request().Context(), + uuidToPGType(libUUID), + ) + if err != nil { + return renderErrorPage(c, "Error loading stats", "stats_load_error") + } + // Fetch issues + dbIssues, err := cfg.Queries.ListProcessingIssuesByLibrary( + c.Request().Context(), + uuidToPGType(libUUID), + ) + if err != nil { + return renderErrorPage(c, "Error loading issues", "issues_load_error") + } + // Convert to template data + issues := make([]templates.ProcessingIssueData, len(dbIssues)) + for i, issue := range dbIssues { + issueUUID, _ := uuid.FromBytes(issue.ID.Bytes[0:16]) + issues[i] = templates.ProcessingIssueData{ + ID: issueUUID.String(), + MediaItemID: uuid.UUID(issue.MediaItemID.Bytes).String(), + Title: issue.Title, + FilePath: issue.FilePath, + FormatGroup: issue.FormatGroup, + LibraryTypeName: issue.LibraryTypeName, + IssueType: issue.IssueType, + IssueDescription: issue.IssueDescription, + Severity: issue.Severity, + CreatedAt: issue.CreatedAt.Time, + } + } + statsData := templates.IssueStats{ + ErrorCount: stats.ErrorCount, + WarningCount: stats.WarningCount, + InfoCount: stats.InfoCount, + } + var buf bytes.Buffer + err = templates.AdminProcessingIssues(user, libraryID, issues, statsData).Render(c.Request().Context(), &buf) + if err != nil { + return err + } + return c.HTML(http.StatusOK, buf.String()) + })) + // Admin users page frontendProtected.GET("/admin/users", handlers.AdminMiddleware(func(c *echo.Context) error { user, err := getTemplateUserWithTheme(c, cfg)