refactor: 删除 CreateSSData 函数并更新 GetScore 函数以处理数据插入和更新逻辑,同时修改 PlayerDataLite 的表名为 blRecordData
This commit is contained in:
parent
527766ebd6
commit
95b319ad15
@ -1,7 +1,6 @@
|
||||
package beatleader
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -114,23 +113,30 @@ func (bl *blQuery) GetScore(qqId string) (currentData *PlayerDataLite, lastData
|
||||
// 构建 PlayerDataLite 结构体
|
||||
dataLite := data.ToDataLite()
|
||||
|
||||
// 查询最近的玩家数据
|
||||
var lastDataLite PlayerDataLite
|
||||
err = tx.Select("*").Where("id = ?", dataLite.ID).Order("generated_time DESC").Limit(1).Find(&lastDataLite).Error
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
newBLData := service.BLData{
|
||||
ID: dataLite.ID,
|
||||
Name: dataLite.Name,
|
||||
Country: dataLite.Country,
|
||||
PP: dataLite.PP,
|
||||
Rank: dataLite.Rank,
|
||||
CountryRank: dataLite.CountryRank,
|
||||
TotalScore: dataLite.TotalScore,
|
||||
TotalRankedScore: dataLite.TotalRankedScore,
|
||||
AverageRankedAccuracy: dataLite.AverageRankedAccuracy,
|
||||
TotalPlayCount: dataLite.TotalPlayCount,
|
||||
RankedPlayCount: dataLite.RankedPlayCount,
|
||||
ReplaysWatched: dataLite.ReplaysWatched,
|
||||
GeneratedTime: time.Now(),
|
||||
}
|
||||
|
||||
// 如果有新的数据,则插入
|
||||
if lastDataLite.IsDiffFrom(dataLite) {
|
||||
//删掉旧数据
|
||||
err = tx.Delete(&PlayerDataLite{ID: dataLite.ID}).Error
|
||||
// 查询最近的玩家数据
|
||||
lastBLData, err := service.GetLatestBLData(dataLite.ID)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
err = tx.Create(&PlayerDataLite{
|
||||
|
||||
currentDataLite := PlayerDataLite{
|
||||
ID: dataLite.ID,
|
||||
Name: dataLite.Name,
|
||||
Country: dataLite.Country,
|
||||
@ -144,32 +150,60 @@ func (bl *blQuery) GetScore(qqId string) (currentData *PlayerDataLite, lastData
|
||||
RankedPlayCount: dataLite.RankedPlayCount,
|
||||
ReplaysWatched: dataLite.ReplaysWatched,
|
||||
GeneratedTime: time.Now().Format("2006-01-02 15:04:05.999999999-07:00"),
|
||||
}).Error
|
||||
}
|
||||
|
||||
if lastBLData == nil || hasDataChanged(lastBLData, &newBLData) {
|
||||
err = tx.Create(&newBLData).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// 提交事务
|
||||
err = tx.Commit().Error
|
||||
err = tx.Delete(&service.BLData{ID: dataLite.ID}).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有新的数据,则插入
|
||||
if lastBLData == nil || hasDataChanged(lastBLData, &newBLData) {
|
||||
//删掉旧数据
|
||||
err = tx.Delete(&PlayerDataLite{ID: dataLite.ID}).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
err = tx.Create(&newBLData).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
if lastBLData != nil {
|
||||
lastDataLite := PlayerDataLite{
|
||||
ID: lastBLData.ID,
|
||||
Name: lastBLData.Name,
|
||||
Country: lastBLData.Country,
|
||||
PP: lastBLData.PP,
|
||||
Rank: lastBLData.Rank,
|
||||
CountryRank: lastBLData.CountryRank,
|
||||
TotalScore: lastBLData.TotalScore,
|
||||
TotalRankedScore: lastBLData.TotalRankedScore,
|
||||
AverageRankedAccuracy: lastBLData.AverageRankedAccuracy,
|
||||
TotalPlayCount: lastBLData.TotalPlayCount,
|
||||
RankedPlayCount: lastBLData.RankedPlayCount,
|
||||
ReplaysWatched: lastBLData.ReplaysWatched,
|
||||
GeneratedTime: lastBLData.GeneratedTime.Format("2006-01-02 15:04:05.999999999-07:00"),
|
||||
}
|
||||
// 返回差异信息
|
||||
return &dataLite, &lastDataLite, nil
|
||||
return ¤tDataLite, &lastDataLite, tx.Commit().Error
|
||||
}
|
||||
|
||||
// 如果没有新数据,直接提交事务
|
||||
err = tx.Commit().Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
return &dataLite, nil, tx.Commit().Error
|
||||
}
|
||||
|
||||
// 返回当前数据的字符串表示
|
||||
return &dataLite, nil, nil
|
||||
func hasDataChanged(old *service.BLData, new *service.BLData) bool {
|
||||
return old.PP != new.PP || old.Rank != new.Rank || old.CountryRank != new.CountryRank ||
|
||||
old.TotalScore != new.TotalScore || old.TotalRankedScore != new.TotalRankedScore
|
||||
}
|
||||
|
||||
func (bl *blQuery) GetScoreWithoutUpdate(qqId string) (currentData *PlayerDataLite, err error) {
|
||||
|
@ -425,7 +425,7 @@ type PlayerDataLite struct {
|
||||
}
|
||||
|
||||
func (p PlayerDataLite) TableName() string {
|
||||
return "blData"
|
||||
return "blRecordData"
|
||||
}
|
||||
|
||||
func (p PlayerDataLite) IsDiffFrom(p2 PlayerDataLite) bool {
|
||||
|
@ -57,11 +57,6 @@ func GetLatestSSData(id string) (*SSData, error) {
|
||||
return &data, err
|
||||
}
|
||||
|
||||
func CreateSSData(data SSData) error {
|
||||
db := sqlite3.GetGormDB()
|
||||
return db.Create(&data).Error
|
||||
}
|
||||
|
||||
// BLData相关的GORM辅助函数
|
||||
|
||||
func GetLatestBLData(id string) (*BLData, error) {
|
||||
|
@ -96,6 +96,9 @@ func (ss *ssQuery) UnbindSS(qqId string) (reply string) {
|
||||
}
|
||||
|
||||
func (ss *ssQuery) GetScore(qqId string) (currentData *PlayerDataLite, lastData *PlayerDataLite, err error) {
|
||||
tx := sqlite3.GetGormDB().Begin()
|
||||
defer tx.Rollback()
|
||||
|
||||
ssId, err := GetSSID(qqId)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@ -155,7 +158,12 @@ func (ss *ssQuery) GetScore(qqId string) (currentData *PlayerDataLite, lastData
|
||||
|
||||
// 如果有新的数据且与上次不同,则插入
|
||||
if lastSSData == nil || hasDataChanged(lastSSData, &newSSData) {
|
||||
err = service.CreateSSData(newSSData)
|
||||
err = tx.Delete(&service.SSData{ID: data.ID}).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
}
|
||||
err = tx.Create(&newSSData).Error
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil, nil, err
|
||||
@ -178,12 +186,10 @@ func (ss *ssQuery) GetScore(qqId string) (currentData *PlayerDataLite, lastData
|
||||
ReplaysWatched: lastSSData.ReplaysWatched,
|
||||
GeneratedTime: lastSSData.GeneratedTime.Format("2006-01-02 15:04:05.999999999-07:00"),
|
||||
}
|
||||
return ¤tDataLite, &lastDataLite, nil
|
||||
return ¤tDataLite, &lastDataLite, tx.Commit().Error
|
||||
}
|
||||
return ¤tDataLite, nil, nil
|
||||
}
|
||||
|
||||
return ¤tDataLite, nil, nil
|
||||
return ¤tDataLite, nil, tx.Commit().Error
|
||||
}
|
||||
|
||||
// 辅助函数:检查数据是否有变化
|
||||
|
Loading…
x
Reference in New Issue
Block a user