-
Notifications
You must be signed in to change notification settings - Fork 3
/
find_user_events_handler.go
71 lines (65 loc) · 1.9 KB
/
find_user_events_handler.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
package handlers
import (
"context"
"pixur.org/pixur/api"
"pixur.org/pixur/be/schema"
"pixur.org/pixur/be/status"
"pixur.org/pixur/be/tasks"
)
// TODO: test
func (s *serv) handleFindUserEvents(ctx context.Context, req *api.FindUserEventsRequest) (
*api.FindUserEventsResponse, status.S) {
var userId schema.Varint
if req.UserId != "" {
if err := userId.DecodeAll(req.UserId); err != nil {
return nil, status.InvalidArgument(err, "bad user id")
}
}
var keyUserId, keyCreatedTs, keyIndex schema.Varint
if req.StartUserEventId != "" {
var i int
if n, err := keyUserId.Decode(req.StartUserEventId[i:]); err != nil {
return nil, status.InvalidArgument(err, "bad user event id")
} else {
i += int(n)
}
if n, err := keyCreatedTs.Decode(req.StartUserEventId[i:]); err != nil {
return nil, status.InvalidArgument(err, "bad user event id")
} else {
i += int(n)
}
if req.StartUserEventId[i:] != "" {
if n, err := keyIndex.Decode(req.StartUserEventId[i:]); err != nil {
return nil, status.InvalidArgument(err, "bad user event id")
} else {
i += int(n)
}
}
if req.StartUserEventId[i:] != "" {
// too much input
return nil, status.InvalidArgument(nil, "bad user event id")
}
}
var task = &tasks.FindUserEventsTask{
Beg: s.db,
Now: s.now,
Ascending: req.Ascending,
ObjectUserId: int64(userId),
StartUserId: int64(keyUserId),
StartCreatedTs: int64(keyCreatedTs),
StartIndex: int64(keyIndex),
}
if sts := s.runner.Run(ctx, task); sts != nil {
return nil, sts
}
resp := &api.FindUserEventsResponse{
UserEvent: apiUserEvents(nil, task.UserEvents, nil),
}
if task.NextUserId != 0 {
resp.NextUserEventId = apiUserEventId(task.NextUserId, task.NextCreatedTs, task.NextIndex)
}
if task.PrevUserId != 0 {
resp.PrevUserEventId = apiUserEventId(task.PrevUserId, task.PrevCreatedTs, task.PrevIndex)
}
return resp, nil
}