/
task.go
82 lines (67 loc) · 1.76 KB
/
task.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package services
import (
"github.com/crawlab-team/crawlab-core/controllers"
mongo2 "github.com/crawlab-team/crawlab-db/mongo"
"github.com/crawlab-team/plugin-dependency/models"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"strconv"
)
type TaskService struct {
parent *Service
api *gin.Engine
}
func (svc *TaskService) Init() {
svc.api.GET("/tasks", svc.getList)
svc.api.GET("/tasks/:id/logs", svc.getLogs)
}
func (svc *TaskService) getList(c *gin.Context) {
// filter
query, _ := controllers.GetFilterQuery(c)
// all
all, _ := strconv.ParseBool(c.Query("all"))
// pagination
pagination := controllers.MustGetPagination(c)
// options
opts := &mongo2.FindOptions{
Sort: bson.D{{"_id", -1}},
}
if !all {
opts.Skip = (pagination.Page - 1) * pagination.Size
opts.Limit = pagination.Size
}
// tasks
var tasks []models.Task
if err := svc.parent.colT.Find(query, opts).All(&tasks); err != nil {
controllers.HandleErrorInternalServerError(c, err)
return
}
// total
total, err := svc.parent.colT.Count(query)
if err != nil {
controllers.HandleErrorInternalServerError(c, err)
return
}
controllers.HandleSuccessWithListData(c, tasks, total)
}
func (svc *TaskService) getLogs(c *gin.Context) {
id, err := primitive.ObjectIDFromHex(c.Param("id"))
if err != nil {
controllers.HandleErrorBadRequest(c, err)
return
}
var logList []models.Log
if err := svc.parent.colL.Find(bson.M{"task_id": id}, nil).All(&logList); err != nil {
controllers.HandleErrorInternalServerError(c, err)
return
}
controllers.HandleSuccessWithData(c, logList)
}
func NewTaskService(parent *Service) (svc *TaskService) {
svc = &TaskService{
parent: parent,
api: parent.GetApi(),
}
return svc
}