-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog-grpc.go
77 lines (67 loc) · 1.9 KB
/
log-grpc.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
package goautowp
import (
"context"
"github.com/autowp/goautowp/log"
"github.com/casbin/casbin"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/timestamppb"
)
type LogGRPCServer struct {
UnimplementedLogServer
repository *log.Repository
auth *Auth
enforcer *casbin.Enforcer
}
func NewLogGRPCServer(repository *log.Repository, auth *Auth, enforcer *casbin.Enforcer) *LogGRPCServer {
return &LogGRPCServer{
repository: repository,
auth: auth,
enforcer: enforcer,
}
}
func (s *LogGRPCServer) GetEvents(ctx context.Context, in *LogEventsRequest) (*LogEvents, error) {
_, role, err := s.auth.ValidateGRPC(ctx)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
if !s.enforcer.Enforce(role, "global", "moderate") {
return nil, status.Error(codes.PermissionDenied, "PermissionDenied")
}
res, pages, err := s.repository.Events(ctx, log.ListOptions{
ArticleID: in.GetArticleId(),
ItemID: in.GetItemId(),
PictureID: in.GetPictureId(),
UserID: in.GetUserId(),
Page: in.GetPage(),
})
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
is := make([]*LogEvent, 0, len(res))
for _, item := range res {
is = append(is, &LogEvent{
CreatedAt: timestamppb.New(item.CreatedAt),
Description: item.Description,
UserId: item.UserID,
Items: item.Items,
Pictures: item.Pictures,
})
}
paginator := &Pages{
PageCount: pages.PageCount,
First: pages.First,
Last: pages.Last,
Current: pages.Current,
FirstPageInRange: pages.FirstPageInRange,
LastPageInRange: pages.LastPageInRange,
PagesInRange: pages.PagesInRange,
TotalItemCount: pages.TotalItemCount,
Next: pages.Next,
Previous: pages.Previous,
}
return &LogEvents{
Items: is,
Paginator: paginator,
}, nil
}