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) }