heritage-api/service/data-service.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)
}