/
api_app_build_service.go
107 lines (95 loc) · 3.27 KB
/
api_app_build_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
package grpc
import (
"context"
"io"
"connectrpc.com/connect"
"github.com/friendsofgo/errors"
"google.golang.org/protobuf/types/known/emptypb"
"github.com/traPtitech/neoshowcase/pkg/infrastructure/grpc/pb"
"github.com/traPtitech/neoshowcase/pkg/infrastructure/grpc/pbconvert"
"github.com/traPtitech/neoshowcase/pkg/util/ds"
)
func (s *APIService) GetAllBuilds(ctx context.Context, c *connect.Request[pb.GetAllBuildsRequest]) (*connect.Response[pb.GetBuildsResponse], error) {
builds, err := s.svc.GetAllBuilds(ctx, int(c.Msg.Page), int(c.Msg.Limit))
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(&pb.GetBuildsResponse{
Builds: ds.Map(builds, pbconvert.ToPBBuild),
})
return res, nil
}
func (s *APIService) GetBuilds(ctx context.Context, req *connect.Request[pb.ApplicationIdRequest]) (*connect.Response[pb.GetBuildsResponse], error) {
builds, err := s.svc.GetBuilds(ctx, req.Msg.Id)
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(&pb.GetBuildsResponse{
Builds: ds.Map(builds, pbconvert.ToPBBuild),
})
return res, nil
}
func (s *APIService) GetBuild(ctx context.Context, req *connect.Request[pb.BuildIdRequest]) (*connect.Response[pb.Build], error) {
build, err := s.svc.GetBuild(ctx, req.Msg.BuildId)
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(pbconvert.ToPBBuild(build))
return res, nil
}
func (s *APIService) RetryCommitBuild(ctx context.Context, req *connect.Request[pb.RetryCommitBuildRequest]) (*connect.Response[emptypb.Empty], error) {
msg := req.Msg
err := s.svc.RetryCommitBuild(ctx, msg.ApplicationId, msg.Commit)
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(&emptypb.Empty{})
return res, nil
}
func (s *APIService) CancelBuild(ctx context.Context, req *connect.Request[pb.BuildIdRequest]) (*connect.Response[emptypb.Empty], error) {
err := s.svc.CancelBuild(ctx, req.Msg.BuildId)
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(&emptypb.Empty{})
return res, nil
}
func (s *APIService) GetBuildLog(ctx context.Context, req *connect.Request[pb.BuildIdRequest]) (*connect.Response[pb.BuildLog], error) {
log, err := s.svc.GetBuildLog(ctx, req.Msg.BuildId)
if err != nil {
return nil, handleUseCaseError(err)
}
res := connect.NewResponse(&pb.BuildLog{Log: log})
return res, nil
}
func (s *APIService) GetBuildLogStream(ctx context.Context, req *connect.Request[pb.BuildIdRequest], st *connect.ServerStream[pb.BuildLog]) error {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
ch, err := s.svc.GetBuildLogStream(ctx, req.Msg.BuildId)
if err != nil {
return handleUseCaseError(err)
}
for l := range ch {
err = st.Send(l)
if err != nil {
return errors.New("failed to send event")
}
}
return nil
}
func (s *APIService) GetBuildArtifact(ctx context.Context, req *connect.Request[pb.ArtifactIdRequest]) (*connect.Response[pb.ArtifactContent], error) {
filename, r, err := s.svc.GetArtifact(ctx, req.Msg.ArtifactId)
if err != nil {
return nil, handleUseCaseError(err)
}
defer r.Close()
content, err := io.ReadAll(r)
if err != nil {
return nil, err
}
res := connect.NewResponse(&pb.ArtifactContent{
Filename: filename,
Content: content,
})
return res, nil
}