From ba85b4bc5fc14ab1e3f8fb250e245dff9f98899d Mon Sep 17 00:00:00 2001 From: Mark Vadeika Date: Mon, 5 Apr 2021 21:39:00 -0400 Subject: [PATCH 1/3] added returning of total (unpaginated) result length --- internal/controller/datalake_service.go | 12 +++- internal/repository/interface.go | 6 +- internal/repository/mongo.go | 28 +++------ pkg/proto/datalake.pb.go | 78 +++++++++++++++++-------- 4 files changed, 75 insertions(+), 49 deletions(-) diff --git a/internal/controller/datalake_service.go b/internal/controller/datalake_service.go index ead89a1..a743623 100644 --- a/internal/controller/datalake_service.go +++ b/internal/controller/datalake_service.go @@ -66,6 +66,7 @@ func (s *DatalakeServiceServer) GetAllSongs(ctx context.Context, req *proto.GetA var songs []*repository.File var nextToken int64 + var totalSize int64 var err error // TODO refactor this @@ -76,7 +77,7 @@ func (s *DatalakeServiceServer) GetAllSongs(ctx context.Context, req *proto.GetA req.PageSize = new(int64) } - songs, nextToken, err = s.repo.GetAllSongs(ctx, *req.PageToken, *req.PageSize) + songs, nextToken, totalSize, err = s.repo.GetAllSongs(ctx, *req.PageToken, *req.PageSize) if err != nil { s.logger.Errorf("Failed to get songs: %v", err) @@ -86,6 +87,7 @@ func (s *DatalakeServiceServer) GetAllSongs(ctx context.Context, req *proto.GetA res := &proto.GetAllSongsResponse{ Songs: s.RepoFilesToProtoFiles(songs), NextPageToken: nextToken, + TotalSize: totalSize, } return res, nil } @@ -93,6 +95,7 @@ func (s *DatalakeServiceServer) GetAllSongs(ctx context.Context, req *proto.GetA func (s *DatalakeServiceServer) GetSongsByIDs(ctx context.Context, req *proto.GetSongsByIDsRequest) (*proto.GetSongsByIDsResponse, error) { var songs []*repository.File var nextToken int64 + var totalSize int64 var err error // TODO refactor this @@ -103,7 +106,7 @@ func (s *DatalakeServiceServer) GetSongsByIDs(ctx context.Context, req *proto.Ge req.PageSize = new(int64) } - songs, nextToken, err = s.repo.GetSongsByIDs(ctx, req.Ids, *req.PageToken, *req.PageSize) + songs, nextToken, totalSize, err = s.repo.GetSongsByIDs(ctx, req.Ids, *req.PageToken, *req.PageSize) if err != nil { s.logger.Errorf("Failed to get songs: %v", err) @@ -113,6 +116,7 @@ func (s *DatalakeServiceServer) GetSongsByIDs(ctx context.Context, req *proto.Ge res := &proto.GetSongsByIDsResponse{ Songs: s.RepoFilesToProtoFiles(songs), NextPageToken: nextToken, + TotalSize: totalSize, } return res, nil } @@ -121,6 +125,7 @@ func (s *DatalakeServiceServer) GetSongsByTags(ctx context.Context, req *proto.G var songs []*repository.File var nextToken int64 + var totalSize int64 var err error // TODO refactor this @@ -131,7 +136,7 @@ func (s *DatalakeServiceServer) GetSongsByTags(ctx context.Context, req *proto.G req.PageSize = new(int64) } - songs, nextToken, err = s.repo.GetSongsByTags(ctx, req.Tags, req.Filter, *req.PageToken, *req.PageSize) + songs, nextToken, totalSize, err = s.repo.GetSongsByTags(ctx, req.Tags, req.Filter, *req.PageToken, *req.PageSize) if err != nil { s.logger.Errorf("Failed to get songs: %v", err) @@ -141,6 +146,7 @@ func (s *DatalakeServiceServer) GetSongsByTags(ctx context.Context, req *proto.G res := &proto.GetSongsByTagsResponse{ Songs: s.RepoFilesToProtoFiles(songs), NextPageToken: nextToken, + TotalSize: totalSize, } return res, nil } diff --git a/internal/repository/interface.go b/internal/repository/interface.go index 9169def..7f382a6 100644 --- a/internal/repository/interface.go +++ b/internal/repository/interface.go @@ -20,9 +20,9 @@ type Repository interface { type SongRepository interface { AddSongs(ctx context.Context, songs []*File) error - GetSongsByTags(ctx context.Context, tags map[string]string, filter proto.Filter, pageToken int64, pageSize int64) ([]*File, int64, error) - GetSongsByIDs(ctx context.Context, ids []string, pageToken int64, pageSize int64) ([]*File, int64, error) - GetAllSongs(ctx context.Context, pageToken int64, pageSize int64) ([]*File, int64, error) + GetSongsByTags(ctx context.Context, tags map[string]string, filter proto.Filter, pageToken int64, pageSize int64) ([]*File, int64, int64, error) + GetSongsByIDs(ctx context.Context, ids []string, pageToken int64, pageSize int64) ([]*File, int64, int64, error) + GetAllSongs(ctx context.Context, pageToken int64, pageSize int64) ([]*File, int64, int64, error) AddTags(ctx context.Context, id string, tags map[string]string) error RemoveTags(ctx context.Context, id string, tags map[string]string) error } diff --git a/internal/repository/mongo.go b/internal/repository/mongo.go index fbae546..f281727 100644 --- a/internal/repository/mongo.go +++ b/internal/repository/mongo.go @@ -3,8 +3,6 @@ package repository import ( "context" - "go.mongodb.org/mongo-driver/mongo/options" - "github.com/TensorBeat/Datalake/pkg/proto" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" @@ -67,7 +65,7 @@ func (r *MongoRepository) AddSongs(ctx context.Context, songs []*File) error { } -func (r *MongoRepository) GetSongsByTags(ctx context.Context, tags map[string]string, operator proto.Filter, pageToken int64, pageSize int64) ([]*File, int64, error) { +func (r *MongoRepository) GetSongsByTags(ctx context.Context, tags map[string]string, operator proto.Filter, pageToken int64, pageSize int64) ([]*File, int64, int64, error) { tagsEntries := make([]bson.M, 0) for tagName, val := range tags { @@ -108,14 +106,14 @@ func (r *MongoRepository) GetSongsByTags(ctx context.Context, tags map[string]st return r.getSongs(ctx, query, pageToken, pageSize) } -func (r *MongoRepository) GetSongsByIDs(ctx context.Context, ids []string, pageToken int64, pageSize int64) ([]*File, int64, error) { +func (r *MongoRepository) GetSongsByIDs(ctx context.Context, ids []string, pageToken int64, pageSize int64) ([]*File, int64, int64, error) { mongoIDs := make([]primitive.ObjectID, len(ids)) for i := range mongoIDs { id, err := primitive.ObjectIDFromHex(ids[i]) if err != nil { r.logger.Errorf("bad ID: %v", err) - return nil, pageToken, err + return nil, pageToken, 0, err } mongoIDs[i] = id } @@ -125,28 +123,20 @@ func (r *MongoRepository) GetSongsByIDs(ctx context.Context, ids []string, pageT return r.getSongs(ctx, query, pageToken, pageSize) } -func (r *MongoRepository) GetAllSongs(ctx context.Context, pageToken int64, pageSize int64) ([]*File, int64, error) { +func (r *MongoRepository) GetAllSongs(ctx context.Context, pageToken int64, pageSize int64) ([]*File, int64, int64, error) { return r.getSongs(ctx, bson.M{}, pageToken, pageSize) } -func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken int64, pageSize int64) ([]*File, int64, error) { +func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken int64, pageSize int64) ([]*File, int64, int64, error) { r.logger.Debugf("query: %v", query) - findOptions := options.Find() - if pageSize > 0 { - findOptions.SetLimit(pageSize) - } - if pageToken > 0 { - findOptions.SetSkip(pageToken) - } - - cur, err := r.songCollection.Find(ctx, query, findOptions) + cur, err := r.songCollection.Find(ctx, query) if err != nil { r.logger.Errorf("Failed to find songs in mongo: %v", err) - return nil, pageToken, err + return nil, pageToken, 0, err } songs := make([]*MongoFile, 0) @@ -154,14 +144,14 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken cur.All(ctx, &songs) if err != nil { r.logger.Errorf("Failed to get songs in mongo: %v", err) - return nil, pageToken, err + return nil, pageToken, 0, err } r.logger.Debugf("Songs: %v", songs) files := r.MongoFilesToFiles(songs) - return files, pageToken + pageSize, nil + return files[pageToken : pageToken+pageSize], pageToken + pageSize, int64(len(files)), nil } func (r *MongoRepository) AddTags(ctx context.Context, id string, tags map[string]string) error { diff --git a/pkg/proto/datalake.pb.go b/pkg/proto/datalake.pb.go index 7d94108..ef79e9c 100644 --- a/pkg/proto/datalake.pb.go +++ b/pkg/proto/datalake.pb.go @@ -162,6 +162,7 @@ type GetSongsByTagsResponse struct { Songs []*File `protobuf:"bytes,1,rep,name=songs,proto3" json:"songs,omitempty"` NextPageToken int64 `protobuf:"varint,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + TotalSize int64 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` } func (x *GetSongsByTagsResponse) Reset() { @@ -210,6 +211,13 @@ func (x *GetSongsByTagsResponse) GetNextPageToken() int64 { return 0 } +func (x *GetSongsByTagsResponse) GetTotalSize() int64 { + if x != nil { + return x.TotalSize + } + return 0 +} + type AddSongsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -570,6 +578,7 @@ type GetAllSongsResponse struct { Songs []*File `protobuf:"bytes,1,rep,name=songs,proto3" json:"songs,omitempty"` NextPageToken int64 `protobuf:"varint,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + TotalSize int64 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` } func (x *GetAllSongsResponse) Reset() { @@ -618,6 +627,13 @@ func (x *GetAllSongsResponse) GetNextPageToken() int64 { return 0 } +func (x *GetAllSongsResponse) GetTotalSize() int64 { + if x != nil { + return x.TotalSize + } + return 0 +} + type GetSongsByIDsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -688,6 +704,7 @@ type GetSongsByIDsResponse struct { Songs []*File `protobuf:"bytes,1,rep,name=songs,proto3" json:"songs,omitempty"` NextPageToken int64 `protobuf:"varint,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + TotalSize int64 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` } func (x *GetSongsByIDsResponse) Reset() { @@ -736,6 +753,13 @@ func (x *GetSongsByIDsResponse) GetNextPageToken() int64 { return 0 } +func (x *GetSongsByIDsResponse) GetTotalSize() int64 { + if x != nil { + return x.TotalSize + } + return 0 +} + var File_tensorbeat_datalake_proto protoreflect.FileDescriptor var file_tensorbeat_datalake_proto_rawDesc = []byte{ @@ -762,14 +786,16 @@ var file_tensorbeat_datalake_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x6f, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x62, 0x65, 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x52, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8e, + 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x62, 0x65, 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x43, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x65, 0x61, 0x74, 0x2e, 0x63, @@ -811,14 +837,16 @@ var file_tensorbeat_datalake_proto_rawDesc = []byte{ 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x6c, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x65, 0x61, - 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x73, - 0x6f, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, - 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8b, 0x01, 0x0a, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8b, + 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x65, + 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, + 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, @@ -827,14 +855,16 @@ var file_tensorbeat_datalake_proto_rawDesc = []byte{ 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, - 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x6e, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x65, 0x61, 0x74, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x73, 0x6f, 0x6e, - 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x78, - 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x24, 0x0a, 0x06, 0x46, 0x69, + 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x53, 0x6f, 0x6e, 0x67, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x6f, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x65, 0x61, 0x74, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x73, 0x6f, + 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, + 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0x24, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xd4, 0x04, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x6b, 0x65, 0x53, 0x65, 0x72, From ee4a29427de9b5252bb550a4de00ea227d18c0fa Mon Sep 17 00:00:00 2001 From: Mark Vadeika Date: Mon, 5 Apr 2021 22:24:10 -0400 Subject: [PATCH 2/3] added support for invalid/empty values of pagination parameters --- go.sum | 19 ------------------- internal/repository/mongo.go | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/go.sum b/go.sum index fe4da3e..7459ed6 100644 --- a/go.sum +++ b/go.sum @@ -44,7 +44,6 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -54,7 +53,6 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= @@ -64,7 +62,6 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -93,10 +90,8 @@ github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsI github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/nats-io/gnatsd v1.4.1/go.mod h1:nqco77VO78hLCJpIcVfygDP2rPGfsEHkGTUk94uh5DQ= -github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -112,15 +107,12 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/spf13/afero v1.2.1 h1:qgMbHoJbPbw579P+1zVY+6n4nIFuIchaIjzZ/I/Yq8M= github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -128,7 +120,6 @@ github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc h1:n+nNi93yXLkJvKwXNP9d55HC7lGK4H/SRcwB5IaUZLo= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= @@ -168,9 +159,7 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -180,7 +169,6 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -188,17 +176,14 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -213,14 +198,12 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -233,7 +216,6 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -251,7 +233,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/repository/mongo.go b/internal/repository/mongo.go index f281727..076801a 100644 --- a/internal/repository/mongo.go +++ b/internal/repository/mongo.go @@ -2,6 +2,7 @@ package repository import ( "context" + "fmt" "github.com/TensorBeat/Datalake/pkg/proto" "go.mongodb.org/mongo-driver/bson" @@ -133,6 +134,18 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken r.logger.Debugf("query: %v", query) + if pageToken < 0 { + err := fmt.Errorf("pageToken must be non-negative: %v", pageToken) + r.logger.Error(err) + return nil, 0, 0, err + } + + if pageSize < 0 { + err := fmt.Errorf("pageSize must be non-negative: %v", pageSize) + r.logger.Error(err) + return nil, pageToken, 0, err + } + cur, err := r.songCollection.Find(ctx, query) if err != nil { r.logger.Errorf("Failed to find songs in mongo: %v", err) @@ -150,8 +163,13 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken r.logger.Debugf("Songs: %v", songs) files := r.MongoFilesToFiles(songs) + if pageSize == 0 { + files = files[pageToken:] + } else { + files = files[pageToken : pageToken+pageSize] + } - return files[pageToken : pageToken+pageSize], pageToken + pageSize, int64(len(files)), nil + return files, pageToken + pageSize, int64(len(files)), nil } func (r *MongoRepository) AddTags(ctx context.Context, id string, tags map[string]string) error { From cd5ca8757b7eb78ecd96440c7ad82623382a84c1 Mon Sep 17 00:00:00 2001 From: Mark Vadeika Date: Fri, 9 Apr 2021 14:47:41 -0400 Subject: [PATCH 3/3] changed query-size implementation to db.collection.CountDocuments --- internal/repository/mongo.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/repository/mongo.go b/internal/repository/mongo.go index 076801a..5507c96 100644 --- a/internal/repository/mongo.go +++ b/internal/repository/mongo.go @@ -3,6 +3,7 @@ package repository import ( "context" "fmt" + "go.mongodb.org/mongo-driver/mongo/options" "github.com/TensorBeat/Datalake/pkg/proto" "go.mongodb.org/mongo-driver/bson" @@ -134,16 +135,21 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken r.logger.Debugf("query: %v", query) + findOptions := options.Find() if pageToken < 0 { err := fmt.Errorf("pageToken must be non-negative: %v", pageToken) r.logger.Error(err) return nil, 0, 0, err + } else if pageSize > 0 { + findOptions.SetLimit(pageSize) } if pageSize < 0 { err := fmt.Errorf("pageSize must be non-negative: %v", pageSize) r.logger.Error(err) return nil, pageToken, 0, err + } else if pageToken > 0 { + findOptions.SetSkip(pageToken) } cur, err := r.songCollection.Find(ctx, query) @@ -152,6 +158,11 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken return nil, pageToken, 0, err } + count, countErr := r.songCollection.CountDocuments(ctx, query) + if countErr != nil { + r.logger.Errorf("Failed to count songs in mongo: %v", countErr) + } + songs := make([]*MongoFile, 0) cur.All(ctx, &songs) @@ -169,7 +180,7 @@ func (r *MongoRepository) getSongs(ctx context.Context, query bson.M, pageToken files = files[pageToken : pageToken+pageSize] } - return files, pageToken + pageSize, int64(len(files)), nil + return files, pageToken + pageSize, count, nil } func (r *MongoRepository) AddTags(ctx context.Context, id string, tags map[string]string) error {