-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
112 lines (91 loc) · 3.54 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* @Time : 2019-07-29 09:59
* @Author : ygqbasic@gmail.com
* @File : service
* @Software: VS Code
*/
package market
import (
"context"
"errors"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
"github.com/fuhsicloud/fuhsicloud/src/middleware"
"github.com/fuhsicloud/fuhsicloud/src/repository"
"github.com/fuhsicloud/fuhsicloud/src/repository/types"
"github.com/fuhsicloud/fuhsicloud/src/util/encode"
"gopkg.in/guregu/null.v3"
)
type Service interface {
// 创建dockerfile
Post(ctx context.Context, name, language, version, detail, desc, dockerfile, fullPath string, status int64) (err error)
// dockerfile详情
Detail(ctx context.Context, id int64) (res *types.Dockerfile, err error) // download 可以调用这个方法
// dockerfile列表
List(ctx context.Context, page, limit int, language []string, status int, name string) (res []*types.Dockerfile, count int64, err error)
// 更新dockerfile
Put(ctx context.Context, id int64, name, language, version, detail, desc, dockerfile, fullPath string, status int64) (err error)
// 删除dockerfile
Delete(ctx context.Context, id int64) (err error)
}
var (
ErrDockerfileCreate = errors.New("创建dockerfile错误")
ErrDockerfileGet = errors.New("获取dockerfile错误")
ErrDockerfileUpdate = errors.New("dockerfile更新错误")
//ErrDockerfileListKeyValue = errors.New("获取获取错误,查询的key value不正确")
)
type service struct {
logger log.Logger
repository repository.Repository
}
func NewService(logger log.Logger, store repository.Repository) Service {
return &service{logger, store}
}
func (c *service) Post(ctx context.Context, name, language, version, detail, desc, dockerfile, fullPath string, status int64) (err error) {
userId := ctx.Value(middleware.UserIdContext).(int64)
if err = c.repository.Dockerfile().Create(&types.Dockerfile{
Name: name,
Language: language,
Version: version,
Detail: detail,
Desc: null.StringFrom(desc),
Dockerfile: dockerfile,
FullPath: fullPath,
Status: null.IntFrom(status),
AuthorID: userId,
Sha256: null.StringFrom(encode.HashString([]byte(dockerfile))),
}); err != nil {
_ = level.Error(c.logger).Log("repository.Dockerfile().", "Create", "err", err.Error())
return ErrDockerfileCreate
}
return
}
func (c *service) Detail(ctx context.Context, id int64) (res *types.Dockerfile, err error) {
return c.repository.Dockerfile().FindById(id)
}
func (c *service) List(ctx context.Context, page, limit int, language []string, status int, name string) (res []*types.Dockerfile, count int64, err error) {
return c.repository.Dockerfile().FindBy(language, status, name, (page-1)*limit, limit)
}
func (c *service) Put(ctx context.Context, id int64, name, language, version, detail, desc, dockerfile, fullPath string, status int64) (err error) {
data, err := c.repository.Dockerfile().FindById(id)
if err != nil {
_ = level.Error(c.logger).Log("dockerfileRepository", "FindById", "err", err.Error())
return ErrDockerfileGet
}
data.Name = name
data.Language = language
data.Version = version
data.Desc = null.StringFrom(desc)
data.Dockerfile = dockerfile
data.FullPath = fullPath
data.Detail = detail
data.Sha256 = null.StringFrom(encode.HashString([]byte(dockerfile)))
if err = c.repository.Dockerfile().Update(data); err != nil {
_ = level.Error(c.logger).Log("dockerfileRepository", "Update", "err", err.Error())
return ErrDockerfileUpdate
}
return
}
func (c *service) Delete(ctx context.Context, id int64) (err error) {
return c.repository.Dockerfile().Delete(id)
}