173 lines
4.2 KiB
Go
173 lines
4.2 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"myschools.me/heritage/heritage-api/model"
|
|
"myschools.me/heritage/heritage-api/mysql"
|
|
)
|
|
|
|
func PointCreatePoint(p *model.Point) (*model.Point, error) {
|
|
if p == nil {
|
|
return nil, errors.New("invalid point")
|
|
}
|
|
p.ID = strings.TrimSpace(p.ID)
|
|
if p.ID == "" {
|
|
p.ID = newID()
|
|
}
|
|
p.Name = strings.TrimSpace(p.Name)
|
|
p.LocationObjectID = strings.TrimSpace(p.LocationObjectID)
|
|
p.StatusCode = strings.TrimSpace(p.StatusCode)
|
|
p.Image = strings.TrimSpace(p.Image)
|
|
p.ObjectID = strings.TrimSpace(p.ObjectID)
|
|
p.IndicatorID = strings.TrimSpace(p.IndicatorID)
|
|
p.CreatorPersonID = strings.TrimSpace(p.CreatorPersonID)
|
|
p.SensorID = strings.TrimSpace(p.SensorID)
|
|
p.CreatedTaskID = strings.TrimSpace(p.CreatedTaskID)
|
|
p.Remark = strings.TrimSpace(p.Remark)
|
|
|
|
if p.Name == "" || p.StatusCode == "" || p.ObjectID == "" || p.IndicatorID == "" || p.CreatorPersonID == "" {
|
|
return nil, errors.New("missing required fields")
|
|
}
|
|
if p.Image == "" {
|
|
p.Image = ""
|
|
}
|
|
|
|
if err := mysql.PointCreate(p); err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointCreatePoint",
|
|
}).Warnf("mysql.PointCreate: %v", err)
|
|
return nil, err
|
|
}
|
|
return p, nil
|
|
}
|
|
|
|
func PointUpdatePoint(idv string, patch *model.Point) (*model.Point, error) {
|
|
pid := strings.TrimSpace(idv)
|
|
if pid == "" {
|
|
return nil, ErrNotFound
|
|
}
|
|
existing, found, err := mysql.PointByID(&pid)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointUpdatePoint",
|
|
}).Warnf("mysql.PointByID: %v", err)
|
|
return nil, err
|
|
}
|
|
if !found || existing == nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointUpdatePoint",
|
|
}).Warnf("mysql.PointByID: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
if patch == nil {
|
|
return existing, nil
|
|
}
|
|
if s := strings.TrimSpace(patch.Name); s != "" {
|
|
existing.Name = s
|
|
}
|
|
existing.X = patch.X
|
|
existing.Y = patch.Y
|
|
existing.Z = patch.Z
|
|
if s := strings.TrimSpace(patch.LocationObjectID); s != "" {
|
|
existing.LocationObjectID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.StatusCode); s != "" {
|
|
existing.StatusCode = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Image); s != "" {
|
|
existing.Image = s
|
|
}
|
|
if s := strings.TrimSpace(patch.ObjectID); s != "" {
|
|
existing.ObjectID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.IndicatorID); s != "" {
|
|
existing.IndicatorID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.CreatorPersonID); s != "" {
|
|
existing.CreatorPersonID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.SensorID); s != "" {
|
|
existing.SensorID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.CreatedTaskID); s != "" {
|
|
existing.CreatedTaskID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Remark); s != "" {
|
|
existing.Remark = s
|
|
}
|
|
|
|
ok, err := mysql.PointUpdate(existing)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointUpdatePoint",
|
|
}).Warnf("mysql.PointUpdate: %v", err)
|
|
return nil, err
|
|
}
|
|
if !ok {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointUpdatePoint",
|
|
}).Warnf("mysql.PointUpdate: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
return existing, nil
|
|
}
|
|
|
|
func PointDeletePoint(idv string) error {
|
|
pid := strings.TrimSpace(idv)
|
|
if pid == "" {
|
|
return ErrNotFound
|
|
}
|
|
ok, err := mysql.PointDelete(&pid)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointDeletePoint",
|
|
}).Warnf("mysql.PointDelete: %v", err)
|
|
return err
|
|
}
|
|
if !ok {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointDeletePoint",
|
|
}).Warnf("mysql.PointDelete: not found")
|
|
return ErrNotFound
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func PointGetPoint(idv string) (*model.Point, error) {
|
|
pid := strings.TrimSpace(idv)
|
|
if pid == "" {
|
|
return nil, ErrNotFound
|
|
}
|
|
p, found, err := mysql.PointByID(&pid)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointGetPoint",
|
|
}).Warnf("mysql.PointByID: %v", err)
|
|
return nil, err
|
|
}
|
|
if !found || p == nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "PointGetPoint",
|
|
}).Warnf("mysql.PointByID: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
return p, nil
|
|
}
|
|
|
|
func PointListPoints(objectID, indicatorID, keyword *string, page, size int) ([]model.Point, int64, error) {
|
|
if page < 1 {
|
|
page = 1
|
|
}
|
|
if size < 1 {
|
|
size = 20
|
|
}
|
|
if size > 200 {
|
|
size = 200
|
|
}
|
|
offset := (page - 1) * size
|
|
return mysql.PointList(objectID, indicatorID, keyword, &offset, &size)
|
|
}
|