44 "context"
55 "errors"
66 "fmt"
7+ "math"
78
89 "github.com/hollow-cube/hc-services/libraries/common/pkg/util"
910 "github.com/hollow-cube/hc-services/services/player-service/internal/db"
@@ -12,8 +13,21 @@ import (
1213)
1314
1415func (s * server ) GetBlockedPlayers (ctx context.Context , request GetBlockedPlayersRequestObject ) (GetBlockedPlayersResponseObject , error ) {
16+ page := request .Params .Page
1517 pageSize := request .Params .PageSize
16- offset := (request .Params .Page - 1 ) * pageSize
18+
19+ totalItems , err := s .store .CountBlockedPlayers (ctx , request .PlayerId )
20+ if err != nil {
21+ return nil , fmt .Errorf ("failed to count blocked players: %w" , err )
22+ }
23+
24+ if totalItems == 0 {
25+ return GetBlockedPlayers200JSONResponse {Page : 1 , TotalItems : 0 , Items : make ([]BlockedPlayer , 0 )}, nil
26+ }
27+
28+ maxPage := int32 (math .Ceil (float64 (totalItems ) / float64 (pageSize )))
29+ page = int32 (math .Min (float64 (page ), float64 (maxPage )))
30+ offset := (page - 1 ) * pageSize
1731
1832 rows , err := s .store .GetBlockedPlayers (ctx , request .PlayerId , pageSize , offset )
1933 if err != nil {
@@ -53,8 +67,8 @@ func (s *server) GetBlockedPlayers(ctx context.Context, request GetBlockedPlayer
5367
5468 return GetBlockedPlayers200JSONResponse {
5569 Items : blocks ,
56- Page : request . Params . Page ,
57- TotalItems : rows [ 0 ]. Total ,
70+ Page : page ,
71+ TotalItems : totalItems ,
5872 }, nil
5973}
6074
@@ -141,17 +155,29 @@ func (s *server) GetBlocksBetweenPlayers(ctx context.Context, request GetBlocksB
141155}
142156
143157func (s * server ) GetPlayerFriends (ctx context.Context , request GetPlayerFriendsRequestObject ) (GetPlayerFriendsResponseObject , error ) {
158+ page := request .Params .Page
144159 pageSize := request .Params .PageSize
145- offset := (request .Params .Page - 1 ) * pageSize
160+
161+ totalItems , err := s .store .CountPlayerFriends (ctx , request .PlayerId )
162+ if err != nil {
163+ return nil , fmt .Errorf ("failed to count friends: %w" , err )
164+ }
165+
166+ if totalItems == 0 {
167+ return GetPlayerFriends200JSONResponse {Page : 1 , TotalItems : 0 , Items : make ([]PlayerFriend , 0 )}, nil
168+ }
169+
170+ maxPage := int32 (math .Ceil (float64 (totalItems ) / float64 (pageSize )))
171+ page = int32 (math .Min (float64 (page ), float64 (maxPage )))
172+ offset := (page - 1 ) * pageSize
146173
147174 rows , err := s .store .GetPlayerFriends (ctx , request .PlayerId , pageSize , offset )
148175 if err != nil {
149176 return nil , fmt .Errorf ("failed to get friends: %w" , err )
150177 }
151178
152- totalItems := int64 (0 )
153- if len (rows ) > 0 {
154- totalItems = rows [0 ].TotalCount
179+ if len (rows ) == 0 {
180+ return GetPlayerFriends200JSONResponse {Page : 1 , TotalItems : 0 , Items : make ([]PlayerFriend , 0 )}, nil
155181 }
156182
157183 friends := make ([]PlayerFriend , len (rows ))
@@ -166,27 +192,44 @@ func (s *server) GetPlayerFriends(ctx context.Context, request GetPlayerFriendsR
166192 }
167193
168194 return GetPlayerFriends200JSONResponse {
169- Page : request . Params . Page ,
195+ Page : page ,
170196 TotalItems : totalItems ,
171197 Items : friends ,
172198 }, nil
173199}
174200
175201func (s * server ) GetFriendRequests (ctx context.Context , request GetFriendRequestsRequestObject ) (GetFriendRequestsResponseObject , error ) {
176202 outgoing := request .Params .Direction == Outgoing
203+ page := request .Params .Page
177204 pageSize := request .Params .PageSize
178- offset := (request .Params .Page - 1 ) * pageSize
179205
180- totalItems := int64 (0 )
206+ var totalItems int64
207+ var err error
208+ if outgoing {
209+ totalItems , err = s .store .CountFriendRequests (ctx , & request .PlayerId , nil )
210+ } else {
211+ totalItems , err = s .store .CountFriendRequests (ctx , nil , & request .PlayerId )
212+ }
213+ if err != nil {
214+ return nil , fmt .Errorf ("failed to count friend requests: %w" , err )
215+ }
216+
217+ if totalItems == 0 {
218+ return GetFriendRequests200JSONResponse {Page : 1 , TotalItems : 0 , Items : make ([]FriendRequest , 0 )}, nil
219+ }
220+
221+ maxPage := int32 (math .Ceil (float64 (totalItems ) / float64 (pageSize )))
222+ if page > maxPage && maxPage > 0 {
223+ page = maxPage
224+ }
225+ offset := (page - 1 ) * pageSize
226+
181227 var friendRequests []FriendRequest
182228 if outgoing {
183229 rows , err := s .store .GetOutgoingFriendRequests (ctx , request .PlayerId , pageSize , offset )
184230 if err != nil {
185231 return nil , fmt .Errorf ("failed to get friend requests: %w" , err )
186232 }
187- if len (rows ) > 0 {
188- totalItems = rows [0 ].TotalCount
189- }
190233
191234 friendRequests = make ([]FriendRequest , len (rows ))
192235 for i , row := range rows {
@@ -201,9 +244,6 @@ func (s *server) GetFriendRequests(ctx context.Context, request GetFriendRequest
201244 if err != nil {
202245 return nil , fmt .Errorf ("failed to get friend requests: %w" , err )
203246 }
204- if len (rows ) > 0 {
205- totalItems = rows [0 ].TotalCount
206- }
207247
208248 friendRequests = make ([]FriendRequest , len (rows ))
209249 for i , row := range rows {
@@ -216,7 +256,7 @@ func (s *server) GetFriendRequests(ctx context.Context, request GetFriendRequest
216256 }
217257
218258 return GetFriendRequests200JSONResponse {
219- Page : request . Params . Page ,
259+ Page : page ,
220260 TotalItems : totalItems ,
221261 Items : friendRequests ,
222262 }, nil
0 commit comments