172 lines
4.3 KiB
Go
172 lines
4.3 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"myschools.me/heritage/heritage-api/model"
|
|
"myschools.me/heritage/heritage-api/mysql"
|
|
)
|
|
|
|
func DeviceCreateDevice(d *model.Device) (*model.Device, error) {
|
|
if d == nil {
|
|
return nil, errors.New("invalid device")
|
|
}
|
|
d.ID = strings.TrimSpace(d.ID)
|
|
if d.ID == "" {
|
|
d.ID = newID()
|
|
}
|
|
d.Name = strings.TrimSpace(d.Name)
|
|
d.ModelID = strings.TrimSpace(d.ModelID)
|
|
d.SerialNo = strings.TrimSpace(d.SerialNo)
|
|
d.StatusCode = strings.TrimSpace(d.StatusCode)
|
|
d.PointID = strings.TrimSpace(d.PointID)
|
|
d.InstalledImage = strings.TrimSpace(d.InstalledImage)
|
|
d.Channel1ParamID = strings.TrimSpace(d.Channel1ParamID)
|
|
d.Channel2ParamID = strings.TrimSpace(d.Channel2ParamID)
|
|
d.Channel3ParamID = strings.TrimSpace(d.Channel3ParamID)
|
|
d.CreatorUserID = strings.TrimSpace(d.CreatorUserID)
|
|
d.Remark = strings.TrimSpace(d.Remark)
|
|
if d.Name == "" || d.StatusCode == "" || d.CreatorUserID == "" {
|
|
return nil, errors.New("missing required fields")
|
|
}
|
|
if err := mysql.DeviceCreate(d); err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceCreateDevice",
|
|
}).Warnf("mysql.DeviceCreate: %v", err)
|
|
return nil, err
|
|
}
|
|
return d, nil
|
|
}
|
|
|
|
func DeviceUpdateDevice(idv string, patch *model.Device) (*model.Device, error) {
|
|
did := strings.TrimSpace(idv)
|
|
if did == "" {
|
|
return nil, ErrNotFound
|
|
}
|
|
existing, found, err := mysql.DeviceByID(&did)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceUpdateDevice",
|
|
}).Warnf("mysql.DeviceByID: %v", err)
|
|
return nil, err
|
|
}
|
|
if !found || existing == nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceUpdateDevice",
|
|
}).Warnf("mysql.DeviceByID: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
if patch == nil {
|
|
return existing, nil
|
|
}
|
|
if s := strings.TrimSpace(patch.Name); s != "" {
|
|
existing.Name = s
|
|
}
|
|
if s := strings.TrimSpace(patch.ModelID); s != "" {
|
|
existing.ModelID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.SerialNo); s != "" {
|
|
existing.SerialNo = s
|
|
}
|
|
if s := strings.TrimSpace(patch.StatusCode); s != "" {
|
|
existing.StatusCode = s
|
|
}
|
|
if s := strings.TrimSpace(patch.PointID); s != "" {
|
|
existing.PointID = s
|
|
}
|
|
if patch.InstalledAt != nil {
|
|
t := *patch.InstalledAt
|
|
existing.InstalledAt = &t
|
|
}
|
|
if s := strings.TrimSpace(patch.InstalledImage); s != "" {
|
|
existing.InstalledImage = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Channel1ParamID); s != "" {
|
|
existing.Channel1ParamID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Channel2ParamID); s != "" {
|
|
existing.Channel2ParamID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Channel3ParamID); s != "" {
|
|
existing.Channel3ParamID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.CreatorUserID); s != "" {
|
|
existing.CreatorUserID = s
|
|
}
|
|
if s := strings.TrimSpace(patch.Remark); s != "" {
|
|
existing.Remark = s
|
|
}
|
|
ok, err := mysql.DeviceUpdate(existing)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceUpdateDevice",
|
|
}).Warnf("mysql.DeviceUpdate: %v", err)
|
|
return nil, err
|
|
}
|
|
if !ok {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceUpdateDevice",
|
|
}).Warnf("mysql.DeviceUpdate: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
return existing, nil
|
|
}
|
|
|
|
func DeviceDeleteDevice(idv string) error {
|
|
did := strings.TrimSpace(idv)
|
|
if did == "" {
|
|
return ErrNotFound
|
|
}
|
|
ok, err := mysql.DeviceDelete(&did)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceDeleteDevice",
|
|
}).Warnf("mysql.DeviceDelete: %v", err)
|
|
return err
|
|
}
|
|
if !ok {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceDeleteDevice",
|
|
}).Warnf("mysql.DeviceDelete: not found")
|
|
return ErrNotFound
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func DeviceGetDevice(idv string) (*model.Device, error) {
|
|
did := strings.TrimSpace(idv)
|
|
if did == "" {
|
|
return nil, ErrNotFound
|
|
}
|
|
d, found, err := mysql.DeviceByID(&did)
|
|
if err != nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceGetDevice",
|
|
}).Warnf("mysql.DeviceByID: %v", err)
|
|
return nil, err
|
|
}
|
|
if !found || d == nil {
|
|
logrus.WithFields(logrus.Fields{
|
|
"func": "DeviceGetDevice",
|
|
}).Warnf("mysql.DeviceByID: not found")
|
|
return nil, ErrNotFound
|
|
}
|
|
return d, nil
|
|
}
|
|
|
|
func DeviceListDevices(keyword *string, page, size int) ([]model.Device, int64, error) {
|
|
if page < 1 {
|
|
page = 1
|
|
}
|
|
if size < 1 {
|
|
size = 20
|
|
}
|
|
if size > 200 {
|
|
size = 200
|
|
}
|
|
offset := (page - 1) * size
|
|
return mysql.DeviceList(keyword, &offset, &size)
|
|
}
|