feat: hr save.
This commit is contained in:
@ -2,11 +2,80 @@ package controllers
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"hr_receiver/config"
|
||||
"hr_receiver/models"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type TrainingController struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewTrainingController() *TrainingController {
|
||||
return &TrainingController{DB: config.DB}
|
||||
}
|
||||
|
||||
// 接收训练记录
|
||||
func (tc *TrainingController) CreateTrainingRecord(c *gin.Context) {
|
||||
var record models.TrainRecord
|
||||
|
||||
// 绑定并验证JSON数据
|
||||
if err := c.ShouldBindJSON(&record); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 使用事务保存数据[4](@ref)
|
||||
err := tc.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// 保存主记录
|
||||
if err := tx.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "train_id"}}, // 指定冲突的列
|
||||
DoUpdates: clause.Assignments(map[string]interface{}{
|
||||
"max_heart_rate": record.MaxHeartRate,
|
||||
"start_time": record.StartTime,
|
||||
"end_time": record.EndTime,
|
||||
"duration": record.Duration,
|
||||
"people_num": record.PeopleNum,
|
||||
"name": record.Name,
|
||||
"evaluation": record.Evaluation,
|
||||
}),
|
||||
}).Omit("HeartRates", "belts").Create(&record).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 保存关联的心率数据
|
||||
for i := range record.HeartRates {
|
||||
if err := tx.Clauses(
|
||||
clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "identifier"}}, // 指定冲突的列
|
||||
DoUpdates: clause.Assignments(map[string]interface{}{"value": record.HeartRates[i].Value, "time": record.HeartRates[i].Time}),
|
||||
},
|
||||
).Create(&record.HeartRates[i]).Error; err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
//// 保存腰带关联关系
|
||||
//if len(record.Belts) > 0 {
|
||||
// if err := tx.Model(&record).Association("Belts").Replace(record.Belts); err != nil {
|
||||
// return err
|
||||
// }
|
||||
//}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, record)
|
||||
}
|
||||
|
||||
func ReceiveTrainingData(c *gin.Context) {
|
||||
var data models.TrainingData
|
||||
|
||||
|
||||
Reference in New Issue
Block a user