This repository has been archived by the owner on Aug 18, 2022. It is now read-only.
/
grpc_server.go
100 lines (87 loc) · 2.2 KB
/
grpc_server.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
package inventory
import (
"context"
pb "github.com/51st-state/api/pkg/apis/inventory/proto"
"github.com/golang/protobuf/ptypes/empty"
)
type grpcServer struct {
manager Manager
}
// NewGRPCServer creates a new grpc server instance
func NewGRPCServer(m Manager) pb.ManagerServer {
return &grpcServer{
m,
}
}
func (s *grpcServer) Get(ctx context.Context, id *pb.Identifier) (*pb.Complete, error) {
c, err := s.manager.Get(ctx, &identifier{id.GetGUID()})
if err != nil {
return nil, err
}
items := make([]*pb.Item, 0)
for _, v := range c.Data().Items {
items = append(items, &pb.Item{
ID: v.ID,
Amount: v.Amount,
Subset: v.Subset,
})
}
return &pb.Complete{
Identifier: &pb.Identifier{
GUID: c.GUID(),
},
Incomplete: &pb.Incomplete{
Items: items,
},
}, nil
}
func (s *grpcServer) Create(ctx context.Context, inc *pb.Incomplete) (*pb.Complete, error) {
items := make([]*Item, 0)
for _, v := range inc.GetItems() {
items = append(items, &Item{
ID: v.GetID(),
Amount: v.GetAmount(),
Subset: v.GetSubset(),
})
}
c, err := s.manager.Create(ctx, NewIncomplete(items))
if err != nil {
return nil, err
}
return &pb.Complete{
Identifier: &pb.Identifier{
GUID: c.GUID(),
},
Incomplete: &pb.Incomplete{
Items: inc.GetItems(),
},
}, nil
}
func (s *grpcServer) AddItem(ctx context.Context, req *pb.AddItemRequest) (*empty.Empty, error) {
return &empty.Empty{}, s.manager.AddItem(
ctx,
&identifier{req.GetIdentifier().GetGUID()},
&Item{
ID: req.GetItem().GetID(),
Amount: req.GetItem().GetAmount(),
Subset: req.GetItem().GetSubset(),
},
)
}
func (s *grpcServer) RemoveItem(ctx context.Context, req *pb.RemoveItemRequest) (*empty.Empty, error) {
return &empty.Empty{}, s.manager.RemoveItem(
ctx,
&identifier{req.GetIdentifier().GetGUID()},
&Item{
ID: req.GetItem().GetID(),
Amount: req.GetItem().GetAmount(),
Subset: req.GetItem().GetSubset(),
},
)
}
func (s *grpcServer) Delete(ctx context.Context, id *pb.Identifier) (*empty.Empty, error) {
return &empty.Empty{}, s.manager.Delete(
ctx,
&identifier{id.GetGUID()},
)
}