feat: 排行榜改为单表(延迟/下载/上传同列),点击列头动态排序,测速后自动高亮我的成绩(含真实名次)
This commit is contained in:
4 files changed
+176
-75
No files matched your search
@@ -21,25 +21,50 @@ func (s *ResultStore) Create(r *db.SpeedTestResult) error {
|
||||
return s.db.Create(r).Error
|
||||
}
|
||||
|
||||
// TopBy 按指定列排序取前 n 条(col 为白名单列名,asc 控制方向)
|
||||
func (s *ResultStore) TopBy(col string, asc bool, n int) ([]db.SpeedTestResult, error) {
|
||||
var results []db.SpeedTestResult
|
||||
order := col + " DESC"
|
||||
if asc {
|
||||
order = col + " ASC"
|
||||
}
|
||||
err := s.db.Order(order).Limit(n).Find(&results).Error
|
||||
return results, err
|
||||
}
|
||||
|
||||
// GetByID 按 ID 查询单条记录
|
||||
func (s *ResultStore) GetByID(id uint) (*db.SpeedTestResult, error) {
|
||||
var r db.SpeedTestResult
|
||||
if err := s.db.First(&r, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &r, nil
|
||||
}
|
||||
|
||||
// CountBetter 统计比指定值更优的记录数(用于计算记录的真实排名)
|
||||
func (s *ResultStore) CountBetter(col string, asc bool, value float64) (int64, error) {
|
||||
op := ">"
|
||||
if asc {
|
||||
op = "<"
|
||||
}
|
||||
var n int64
|
||||
err := s.db.Model(&db.SpeedTestResult{}).Where(col+" "+op+" ?", value).Count(&n).Error
|
||||
return n, err
|
||||
}
|
||||
|
||||
// TopDownload 返回下载速度最快的 n 条记录
|
||||
func (s *ResultStore) TopDownload(n int) ([]db.SpeedTestResult, error) {
|
||||
var results []db.SpeedTestResult
|
||||
err := s.db.Order("download_mbps DESC").Limit(n).Find(&results).Error
|
||||
return results, err
|
||||
return s.TopBy("download_mbps", false, n)
|
||||
}
|
||||
|
||||
// TopUpload 返回上传速度最快的 n 条记录
|
||||
func (s *ResultStore) TopUpload(n int) ([]db.SpeedTestResult, error) {
|
||||
var results []db.SpeedTestResult
|
||||
err := s.db.Order("upload_mbps DESC").Limit(n).Find(&results).Error
|
||||
return results, err
|
||||
return s.TopBy("upload_mbps", false, n)
|
||||
}
|
||||
|
||||
// TopLatency 返回延迟最低的 n 条记录
|
||||
func (s *ResultStore) TopLatency(n int) ([]db.SpeedTestResult, error) {
|
||||
var results []db.SpeedTestResult
|
||||
err := s.db.Order("latency_ms ASC").Limit(n).Find(&results).Error
|
||||
return results, err
|
||||
return s.TopBy("latency_ms", true, n)
|
||||
}
|
||||
|
||||
// Count 返回测速总次数
|
||||
|
||||
Reference in New Issue
Block a user