...

Source file src/go.einride.tech/aip/examples/examplelibrary/listshelves.go

Documentation: go.einride.tech/aip/examples/examplelibrary

     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  	// Handle request constraints.
    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  	// Use pagination.PageToken for offset-based page tokens.
    30  	pageToken, err := pagination.ParsePageToken(request)
    31  	if err != nil {
    32  		return nil, status.Errorf(codes.InvalidArgument, "invalid page token")
    33  	}
    34  	// Query the storage.
    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  	// Build the response.
    43  	response := &library.ListShelvesResponse{
    44  		Shelves: result.Shelves,
    45  	}
    46  	// Set the next page token.
    47  	if result.HasNextPage {
    48  		response.NextPageToken = pageToken.Next(request).String()
    49  	}
    50  	// Respond.
    51  	return response, nil
    52  }
    53  

View as plain text