package handlers import ( "database/sql" "net/http" "github.com/gin-gonic/gin" "github.com/HoHD/PR-Helper/models" ) type PageHandler struct { db *sql.DB } func NewPageHandler(db *sql.DB) *PageHandler { return &PageHandler{db: db} } func (h *PageHandler) Index(c *gin.Context) { repos, _ := h.listRepos() c.HTML(http.StatusOK, "pages/index.html", gin.H{ "Repos": repos, }) } func (h *PageHandler) Repo(c *gin.Context) { c.HTML(http.StatusOK, "pages/repo.html", gin.H{ "ID": c.Param("id"), }) } func (h *PageHandler) Generate(c *gin.Context) { c.HTML(http.StatusOK, "pages/generate.html", gin.H{ "ID": c.Param("id"), }) } func (h *PageHandler) Review(c *gin.Context) { topN := "20" h.db.QueryRow(`SELECT value FROM settings WHERE key = 'review.top_n'`).Scan(&topN) c.HTML(http.StatusOK, "pages/review.html", gin.H{ "ID": c.Param("id"), "TopN": topN, }) } func (h *PageHandler) Settings(c *gin.Context) { settings := make(map[string]string) for key := range models.DefaultSettings { settings[key] = "" } rows, err := h.db.Query(`SELECT key, value FROM settings`) if err == nil { defer rows.Close() for rows.Next() { var k, v string if rows.Scan(&k, &v) == nil { settings[k] = v } } } c.HTML(http.StatusOK, "pages/settings.html", gin.H{ "Settings": settings, }) } func (h *PageHandler) listRepos() ([]models.Repository, error) { rows, err := h.db.Query(`SELECT id, url, local_path, size_bytes, cloned_at, last_used FROM repositories ORDER BY last_used DESC`) if err != nil { return nil, err } defer rows.Close() var repos []models.Repository for rows.Next() { var r models.Repository if err := rows.Scan(&r.ID, &r.URL, &r.LocalPath, &r.SizeBytes, &r.ClonedAt, &r.LastUsed); err != nil { continue } repos = append(repos, r) } return repos, nil }