| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package handler
- import (
- "spider/internal/model"
- "github.com/gin-gonic/gin"
- "gorm.io/gorm"
- )
- // DashboardHandler handles the dashboard summary endpoint.
- type DashboardHandler struct {
- db *gorm.DB
- }
- // Get returns aggregated dashboard statistics.
- // GET /dashboard
- func (h *DashboardHandler) Get(c *gin.Context) {
- var channelsTotal int64
- h.db.Model(&model.Channel{}).Count(&channelsTotal)
- var merchantsRawTotal int64
- h.db.Model(&model.MerchantRaw{}).Count(&merchantsRawTotal)
- var merchantsCleanTotal int64
- h.db.Model(&model.MerchantClean{}).Count(&merchantsCleanTotal)
- var merchantsValid int64
- h.db.Model(&model.MerchantClean{}).Where("status = ?", "valid").Count(&merchantsValid)
- var navSitesTotal int64
- h.db.Model(&model.NavSite{}).Count(&navSitesTotal)
- var seedsTotal int64
- h.db.Model(&model.ManagedSeed{}).Count(&seedsTotal)
- var keywordsTotal int64
- h.db.Model(&model.ManagedKeyword{}).Count(&keywordsTotal)
- // Recent 5 tasks.
- var recentTasks []model.Task
- h.db.Order("created_at DESC").Limit(5).Find(&recentTasks)
- // Currently running task (first one).
- var runningTask *model.Task
- var rt model.Task
- if err := h.db.Where("status = ?", "running").First(&rt).Error; err == nil {
- runningTask = &rt
- }
- OK(c, gin.H{
- "channels_total": channelsTotal,
- "merchants_raw_total": merchantsRawTotal,
- "merchants_clean_total": merchantsCleanTotal,
- "merchants_valid": merchantsValid,
- "nav_sites_total": navSitesTotal,
- "seeds_total": seedsTotal,
- "keywords_total": keywordsTotal,
- "recent_tasks": recentTasks,
- "running_task": runningTask,
- })
- }
|