...
1 package examplelibrary
2
3 import (
4 "context"
5
6 "go.einride.tech/aip/pagination"
7 "google.golang.org/genproto/googleapis/example/library/v1"
8 "google.golang.org/grpc/codes"
9 "google.golang.org/grpc/status"
10 )
11
12 func (s *Server) ListShelves(
13 ctx context.Context,
14 request *library.ListShelvesRequest,
15 ) (*library.ListShelvesResponse, error) {
16
17 const (
18 maxPageSize = 1000
19 defaultPageSize = 100
20 )
21 switch {
22 case request.PageSize < 0:
23 return nil, status.Errorf(codes.InvalidArgument, "page size is negative")
24 case request.PageSize == 0:
25 request.PageSize = defaultPageSize
26 case request.PageSize > maxPageSize:
27 request.PageSize = maxPageSize
28 }
29
30 pageToken, err := pagination.ParsePageToken(request)
31 if err != nil {
32 return nil, status.Errorf(codes.InvalidArgument, "invalid page token")
33 }
34
35 result, err := s.Storage.ListShelves(ctx, &ListShelvesQuery{
36 Offset: pageToken.Offset,
37 PageSize: request.GetPageSize(),
38 })
39 if err != nil {
40 return nil, err
41 }
42
43 response := &library.ListShelvesResponse{
44 Shelves: result.Shelves,
45 }
46
47 if result.HasNextPage {
48 response.NextPageToken = pageToken.Next(request).String()
49 }
50
51 return response, nil
52 }
53
View as plain text