dashboard.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package handler
  2. import (
  3. "spider/internal/model"
  4. "github.com/gin-gonic/gin"
  5. "gorm.io/gorm"
  6. )
  7. // DashboardHandler handles the dashboard summary endpoint.
  8. type DashboardHandler struct {
  9. db *gorm.DB
  10. }
  11. // Get returns aggregated dashboard statistics.
  12. // GET /dashboard
  13. func (h *DashboardHandler) Get(c *gin.Context) {
  14. var channelsTotal int64
  15. h.db.Model(&model.Channel{}).Count(&channelsTotal)
  16. var merchantsRawTotal int64
  17. h.db.Model(&model.MerchantRaw{}).Count(&merchantsRawTotal)
  18. var merchantsCleanTotal int64
  19. h.db.Model(&model.MerchantClean{}).Count(&merchantsCleanTotal)
  20. var merchantsValid int64
  21. h.db.Model(&model.MerchantClean{}).Where("status = ?", "valid").Count(&merchantsValid)
  22. var navSitesTotal int64
  23. h.db.Model(&model.NavSite{}).Count(&navSitesTotal)
  24. var seedsTotal int64
  25. h.db.Model(&model.ManagedSeed{}).Count(&seedsTotal)
  26. var keywordsTotal int64
  27. h.db.Model(&model.ManagedKeyword{}).Count(&keywordsTotal)
  28. // Recent 5 tasks.
  29. var recentTasks []model.Task
  30. h.db.Order("created_at DESC").Limit(5).Find(&recentTasks)
  31. // Currently running task (first one).
  32. var runningTask *model.Task
  33. var rt model.Task
  34. if err := h.db.Where("status = ?", "running").First(&rt).Error; err == nil {
  35. runningTask = &rt
  36. }
  37. OK(c, gin.H{
  38. "channels_total": channelsTotal,
  39. "merchants_raw_total": merchantsRawTotal,
  40. "merchants_clean_total": merchantsCleanTotal,
  41. "merchants_valid": merchantsValid,
  42. "nav_sites_total": navSitesTotal,
  43. "seeds_total": seedsTotal,
  44. "keywords_total": keywordsTotal,
  45. "recent_tasks": recentTasks,
  46. "running_task": runningTask,
  47. })
  48. }