heritage-api/service/task-service.go

189 lines
4.6 KiB
Go
Raw Permalink Normal View History

2026-03-13 08:35:54 +00:00
package service
import (
"errors"
"strings"
"github.com/sirupsen/logrus"
"myschools.me/heritage/heritage-api/model"
"myschools.me/heritage/heritage-api/mysql"
)
func TaskCreateTask(t *model.Task) (*model.Task, error) {
if t == nil {
return nil, errors.New("invalid task")
}
t.ID = strings.TrimSpace(t.ID)
if t.ID == "" {
t.ID = newID()
}
t.Name = strings.TrimSpace(t.Name)
t.OrgID = strings.TrimSpace(t.OrgID)
t.ProjectID = strings.TrimSpace(t.ProjectID)
t.ObjectIDs = strings.TrimSpace(t.ObjectIDs)
t.TypeCode = strings.TrimSpace(t.TypeCode)
t.IndicatorIDs = strings.TrimSpace(t.IndicatorIDs)
t.PackageIDs = strings.TrimSpace(t.PackageIDs)
t.ExecutorPersonID = strings.TrimSpace(t.ExecutorPersonID)
t.ConfirmerPersonID = strings.TrimSpace(t.ConfirmerPersonID)
t.StatusCode = strings.TrimSpace(t.StatusCode)
t.Remark = strings.TrimSpace(t.Remark)
if t.ObjectIDs == "" || t.TypeCode == "" || t.ExecutorPersonID == "" || t.ConfirmerPersonID == "" || t.StatusCode == "" {
return nil, errors.New("missing required fields")
}
if err := mysql.TaskCreate(t); err != nil {
logrus.WithFields(logrus.Fields{
"func": "TaskCreateTask",
}).Warnf("mysql.TaskCreate: %v", err)
return nil, err
}
return t, nil
}
func TaskUpdateTask(idv string, patch *model.Task) (*model.Task, error) {
tid := strings.TrimSpace(idv)
if tid == "" {
return nil, ErrNotFound
}
existing, found, err := mysql.TaskByID(&tid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "TaskUpdateTask",
}).Warnf("mysql.TaskByID: %v", err)
return nil, err
}
if !found || existing == nil {
logrus.WithFields(logrus.Fields{
"func": "TaskUpdateTask",
}).Warnf("mysql.TaskByID: 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.OrgID); s != "" {
existing.OrgID = s
}
if s := strings.TrimSpace(patch.ProjectID); s != "" {
existing.ProjectID = s
}
if s := strings.TrimSpace(patch.ObjectIDs); s != "" {
existing.ObjectIDs = s
}
if s := strings.TrimSpace(patch.TypeCode); s != "" {
existing.TypeCode = s
}
if s := strings.TrimSpace(patch.IndicatorIDs); s != "" {
existing.IndicatorIDs = s
}
if s := strings.TrimSpace(patch.PackageIDs); s != "" {
existing.PackageIDs = s
}
if s := strings.TrimSpace(patch.ExecutorPersonID); s != "" {
existing.ExecutorPersonID = s
}
if s := strings.TrimSpace(patch.ConfirmerPersonID); s != "" {
existing.ConfirmerPersonID = s
}
if !patch.StartAt.IsZero() {
existing.StartAt = patch.StartAt
}
if !patch.EndAt.IsZero() {
existing.EndAt = patch.EndAt
}
if patch.ExecutedAt != nil {
t := *patch.ExecutedAt
existing.ExecutedAt = &t
}
existing.SinglePoint = patch.SinglePoint
if patch.PeriodicType != 0 {
existing.PeriodicType = patch.PeriodicType
}
if patch.PeriodDays != 0 {
existing.PeriodDays = patch.PeriodDays
}
if s := strings.TrimSpace(patch.StatusCode); s != "" {
existing.StatusCode = s
}
if s := strings.TrimSpace(patch.Remark); s != "" {
existing.Remark = s
}
ok, err := mysql.TaskUpdate(existing)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "TaskUpdateTask",
}).Warnf("mysql.TaskUpdate: %v", err)
return nil, err
}
if !ok {
logrus.WithFields(logrus.Fields{
"func": "TaskUpdateTask",
}).Warnf("mysql.TaskUpdate: not found")
return nil, ErrNotFound
}
return existing, nil
}
func TaskDeleteTask(idv string) error {
tid := strings.TrimSpace(idv)
if tid == "" {
return ErrNotFound
}
ok, err := mysql.TaskDelete(&tid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "TaskDeleteTask",
}).Warnf("mysql.TaskDelete: %v", err)
return err
}
if !ok {
logrus.WithFields(logrus.Fields{
"func": "TaskDeleteTask",
}).Warnf("mysql.TaskDelete: not found")
return ErrNotFound
}
return nil
}
func TaskGetTask(idv string) (*model.Task, error) {
tid := strings.TrimSpace(idv)
if tid == "" {
return nil, ErrNotFound
}
t, found, err := mysql.TaskByID(&tid)
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "TaskGetTask",
}).Warnf("mysql.TaskByID: %v", err)
return nil, err
}
if !found || t == nil {
logrus.WithFields(logrus.Fields{
"func": "TaskGetTask",
}).Warnf("mysql.TaskByID: not found")
return nil, ErrNotFound
}
return t, nil
}
func TaskListTasks(projectID, keyword *string, page, size int) ([]model.Task, int64, error) {
if page < 1 {
page = 1
}
if size < 1 {
size = 20
}
if size > 200 {
size = 200
}
offset := (page - 1) * size
return mysql.TaskList(projectID, keyword, &offset, &size)
}