152 lines
3.7 KiB
Go
152 lines
3.7 KiB
Go
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)
|
|
}
|