package service import ( "errors" "strings" "time" "github.com/sirupsen/logrus" "myschools.me/heritage/heritage-api/model" "myschools.me/heritage/heritage-api/mysql" ) func DataRecordCreate(r *model.DataRecord) (*model.DataRecord, error) { if r == nil { return nil, errors.New("invalid data") } r.ID = strings.TrimSpace(r.ID) if r.ID == "" { r.ID = newID() } r.Value = strings.TrimSpace(r.Value) r.IndicatorParamID = strings.TrimSpace(r.IndicatorParamID) r.PointID = strings.TrimSpace(r.PointID) r.TaskID = strings.TrimSpace(r.TaskID) r.CreatorUserID = strings.TrimSpace(r.CreatorUserID) r.Remark = strings.TrimSpace(r.Remark) if r.CollectedAt.IsZero() { r.CollectedAt = time.Now() } if r.Value == "" || r.IndicatorParamID == "" || r.PointID == "" || r.TaskID == "" || r.CreatorUserID == "" { return nil, errors.New("missing required fields") } if err := mysql.DataRecordCreate(r); err != nil { logrus.WithFields(logrus.Fields{ "func": "DataRecordCreate", }).Warnf("mysql.DataRecordCreate: %v", err) return nil, err } return r, nil } func DataRecordUpdate(idv string, patch *model.DataRecord) (*model.DataRecord, error) { rid := strings.TrimSpace(idv) if rid == "" { return nil, ErrNotFound } existing, found, err := mysql.DataRecordByID(&rid) if err != nil { logrus.WithFields(logrus.Fields{ "func": "DataRecordUpdate", }).Warnf("mysql.DataRecordByID: %v", err) return nil, err } if !found || existing == nil { logrus.WithFields(logrus.Fields{ "func": "DataRecordUpdate", }).Warnf("mysql.DataRecordByID: not found") return nil, ErrNotFound } if patch == nil { return existing, nil } if s := strings.TrimSpace(patch.Value); s != "" { existing.Value = s } if s := strings.TrimSpace(patch.IndicatorParamID); s != "" { existing.IndicatorParamID = s } if s := strings.TrimSpace(patch.PointID); s != "" { existing.PointID = s } if s := strings.TrimSpace(patch.TaskID); s != "" { existing.TaskID = s } if !patch.CollectedAt.IsZero() { existing.CollectedAt = patch.CollectedAt } if s := strings.TrimSpace(patch.Remark); s != "" { existing.Remark = s } ok, err := mysql.DataRecordUpdate(existing) if err != nil { logrus.WithFields(logrus.Fields{ "func": "DataRecordUpdate", }).Warnf("mysql.DataRecordUpdate: %v", err) return nil, err } if !ok { logrus.WithFields(logrus.Fields{ "func": "DataRecordUpdate", }).Warnf("mysql.DataRecordUpdate: not found") return nil, ErrNotFound } return existing, nil } func DataRecordDelete(idv string) error { rid := strings.TrimSpace(idv) if rid == "" { return ErrNotFound } ok, err := mysql.DataRecordDelete(&rid) if err != nil { logrus.WithFields(logrus.Fields{ "func": "DataRecordDelete", }).Warnf("mysql.DataRecordDelete: %v", err) return err } if !ok { logrus.WithFields(logrus.Fields{ "func": "DataRecordDelete", }).Warnf("mysql.DataRecordDelete: not found") return ErrNotFound } return nil } func DataGetDataRecord(idv string) (*model.DataRecord, error) { rid := strings.TrimSpace(idv) if rid == "" { return nil, ErrNotFound } r, found, err := mysql.DataRecordByID(&rid) if err != nil { logrus.WithFields(logrus.Fields{ "func": "DataGetDataRecord", }).Warnf("mysql.DataRecordByID: %v", err) return nil, err } if !found || r == nil { logrus.WithFields(logrus.Fields{ "func": "DataGetDataRecord", }).Warnf("mysql.DataRecordByID: not found") return nil, ErrNotFound } return r, nil } func DataListDataRecords(pointID, taskID *string, startAt, endAt *time.Time, page, size int) ([]model.DataRecord, int64, error) { if page < 1 { page = 1 } if size < 1 { size = 20 } if size > 200 { size = 200 } offset := (page - 1) * size return mysql.DataRecordList(pointID, taskID, startAt, endAt, &offset, &size) }