-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
75 lines (64 loc) · 1.75 KB
/
service.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
package service
import (
"context"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
"github.com/jdxj/sign/internal/pkg/db"
"github.com/jdxj/sign/internal/pkg/logger"
"github.com/jdxj/sign/internal/proto/trigger"
"github.com/jdxj/sign/internal/trigger/dao"
)
func (s *Service) CreateTrigger(ctx context.Context, req *trigger.CreateTriggerRequest, _ *emptypb.Empty) error {
spec := req.GetTrigger().GetSpec()
_, err := s.parse(spec)
if err != nil {
return status.Errorf(codes.InvalidArgument, "Parse: %s", err)
}
// 存在直接返回
if s.hasAndAdd(spec) {
logger.Debugf("spec: %s exists", spec)
return nil
}
// 不存在则添加
err = db.WithCtx(ctx).Create(&dao.Specification{
Spec: spec,
}).Error
if err != nil {
return status.Errorf(codes.Internal, "Create spec: %s", err)
}
err = s.addJob(spec, newJob(spec))
if err != nil {
return status.Errorf(codes.Internal, "AddJob: %s", err)
}
return nil
}
func (s *Service) GetTriggers(ctx context.Context, req *trigger.GetTriggersRequest, rsp *trigger.GetTriggersResponse) error {
if req.GetOffset() < 0 || req.GetLimit() < 1 {
return status.Errorf(codes.InvalidArgument, "invalid params")
}
err := db.WithCtx(ctx).
Table(dao.TableName).
Count(&rsp.Count).
Error
if err != nil {
return status.Errorf(codes.Internal, err.Error())
}
var rows []dao.Specification
err = db.WithCtx(ctx).
Order("spec_id").
Offset(int(req.GetOffset())).
Limit(int(req.GetLimit())).
Find(&rows).Error
if err != nil {
return status.Errorf(codes.Internal, err.Error())
}
for _, row := range rows {
t := &trigger.Trigger{
TriggerId: row.SpecID,
Spec: row.Spec,
}
rsp.Triggers = append(rsp.Triggers, t)
}
return nil
}