heritage-api/service/org-service.go

137 lines
3.0 KiB
Go

package service
import (
"errors"
"strings"
"github.com/sirupsen/logrus"
"myschools.me/heritage/heritage-api/model"
"myschools.me/heritage/heritage-api/mysql"
)
var ErrNotFound = errors.New("not found")
func OrgCreateOrg(parentID, name string, enabled bool, sort int, remark string) (*model.Org, error) {
name = strings.TrimSpace(name)
if name == "" {
return nil, errors.New("name required")
}
o := &model.Org{
ID: newID(),
ParentID: strings.TrimSpace(parentID),
Name: name,
Enabled: enabled,
Sort: sort,
Remark: strings.TrimSpace(remark),
}
if err := mysql.OrgCreate(o); err != nil {
logrus.WithFields(logrus.Fields{
"func": "OrgCreateOrg",
}).Warnf("mysql.OrgCreate: %v", err)
return nil, err
}
return o, nil
}
func OrgUpdateOrg(idv string, parentID, name *string, enabled *bool, sort *int, remark *string) (*model.Org, error) {
oid := strings.TrimSpace(idv)
if oid == "" {
return nil, ErrNotFound
}
existing, found, err := mysql.OrgByID(&oid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "OrgUpdateOrg",
}).Warnf("mysql.OrgByID: %v", err)
return nil, err
}
if !found || existing == nil {
logrus.WithFields(logrus.Fields{
"func": "OrgUpdateOrg",
}).Warnf("mysql.OrgByID: not found")
return nil, ErrNotFound
}
if parentID != nil {
existing.ParentID = strings.TrimSpace(*parentID)
}
if name != nil {
n := strings.TrimSpace(*name)
if n == "" {
return nil, errors.New("name required")
}
existing.Name = n
}
if enabled != nil {
existing.Enabled = *enabled
}
if sort != nil {
existing.Sort = *sort
}
if remark != nil {
existing.Remark = strings.TrimSpace(*remark)
}
if err := mysql.OrgUpdate(existing); err != nil {
logrus.WithFields(logrus.Fields{
"func": "OrgUpdateOrg",
}).Warnf("mysql.OrgUpdate: %v", err)
return nil, err
}
return existing, nil
}
func OrgDeleteOrg(idv string) error {
oid := strings.TrimSpace(idv)
if oid == "" {
return ErrNotFound
}
ok, err := mysql.OrgDelete(&oid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "OrgDeleteOrg",
}).Warnf("mysql.OrgDelete: %v", err)
return err
}
if !ok {
logrus.WithFields(logrus.Fields{
"func": "OrgDeleteOrg",
}).Warnf("mysql.OrgDelete: not found")
return ErrNotFound
}
return nil
}
func OrgGetOrg(idv string) (*model.Org, error) {
oid := strings.TrimSpace(idv)
if oid == "" {
return nil, ErrNotFound
}
o, found, err := mysql.OrgByID(&oid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "OrgGetOrg",
}).Warnf("mysql.OrgByID: %v", err)
return nil, err
}
if !found || o == nil {
logrus.WithFields(logrus.Fields{
"func": "OrgGetOrg",
}).Warnf("mysql.OrgByID: not found")
return nil, ErrNotFound
}
return o, nil
}
func OrgListOrgs(parentID *string, page, size int) ([]model.Org, int64, error) {
if page < 1 {
page = 1
}
if size < 1 {
size = 20
}
if size > 200 {
size = 200
}
offset := (page - 1) * size
return mysql.OrgList(parentID, &offset, &size)
}