refactor pagination

This commit is contained in:
Maxim Dolgushin 2023-11-08 12:52:47 +07:00
parent ccbc975957
commit 38bb4fb43c
2 changed files with 8 additions and 33 deletions

2
go.mod

@ -1,6 +1,6 @@
module penahub.gitlab.yandexcloud.net/pena-services/customer module penahub.gitlab.yandexcloud.net/pena-services/customer
go 1.20 go 1.21
require ( require (
github.com/deepmap/oapi-codegen v1.12.4 github.com/deepmap/oapi-codegen v1.12.4

@ -171,11 +171,6 @@ func (api *API2) AddAccount(ctx echo.Context) error {
account, err = api.account.Insert(ctx.Request().Context(), &models.Account{UserID: user.ID, Wallet: models.Wallet{Currency: defaultCurrency}}) account, err = api.account.Insert(ctx.Request().Context(), &models.Account{UserID: user.ID, Wallet: models.Wallet{Currency: defaultCurrency}})
if err != nil { if err != nil {
api.logger.Error("failed to create account on <CreateAccountByUserID> of <AccountService>",
zap.Error(err),
zap.String("userID", userID),
)
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }
@ -185,10 +180,6 @@ func (api *API2) AddAccount(ctx echo.Context) error {
func (api *API2) DeleteDirectAccount(ctx echo.Context, userID string) error { func (api *API2) DeleteDirectAccount(ctx echo.Context, userID string) error {
account, err := api.account.Remove(ctx.Request().Context(), userID) account, err := api.account.Remove(ctx.Request().Context(), userID)
if err != nil { if err != nil {
api.logger.Error("failed to remove account on <RemoveAccount> of <AccountService>",
zap.Error(err),
zap.String("userID", userID),
)
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }
@ -198,11 +189,6 @@ func (api *API2) DeleteDirectAccount(ctx echo.Context, userID string) error {
func (api *API2) GetDirectAccount(ctx echo.Context, userID string) error { func (api *API2) GetDirectAccount(ctx echo.Context, userID string) error {
account, err := api.account.FindByUserID(ctx.Request().Context(), userID) account, err := api.account.FindByUserID(ctx.Request().Context(), userID)
if err != nil { if err != nil {
api.logger.Error("failed to get account by id on <GetAccountByUserID> of <AccountService>",
zap.Error(err),
zap.String("userID", userID),
)
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }
@ -210,21 +196,15 @@ func (api *API2) GetDirectAccount(ctx echo.Context, userID string) error {
} }
func (api *API2) PaginationAccounts(ctx echo.Context, params PaginationAccountsParams) error { func (api *API2) PaginationAccounts(ctx echo.Context, params PaginationAccountsParams) error {
// TODO refactor utils if params.Page == nil || params.Limit == nil {
pagination := utils.DeterminePagination(params.Page, params.Limit) return api.error(ctx, http.StatusInternalServerError, "default values missing for PaginationAccounts")
if pagination == nil {
return errors.HTTP(ctx, errors.New(
fmt.Errorf("pagination is nil on <GetAccountsList> of <AccountService>: %w", errors.ErrInternalError),
errors.ErrInternalError,
))
} }
page := int64(max(*params.Page, 1))
limit := min(int64(max(*params.Limit, 1)), models.DefaultLimit)
count, err := api.account.CountAll(ctx.Request().Context()) count, err := api.account.CountAll(ctx.Request().Context())
if err != nil { if err != nil {
api.logger.Error("failed to count accounts on <GetAccountsList> of <AccountService>",
zap.Error(err),
)
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }
@ -233,15 +213,10 @@ func (api *API2) PaginationAccounts(ctx echo.Context, params PaginationAccountsP
return ctx.JSON(http.StatusOK, response) return ctx.JSON(http.StatusOK, response)
} }
totalPages := int64(math.Ceil(float64(count) / float64(pagination.Limit))) totalPages := int64(math.Ceil(float64(count) / float64(limit)))
accounts, err := api.account.FindMany(ctx.Request().Context(), pagination.Page, pagination.Limit) accounts, err := api.account.FindMany(ctx.Request().Context(), page, limit)
if err != nil { if err != nil {
api.logger.Error("failed to get accounts list on <GetAccountsList> of <AccountService>",
zap.Error(err),
zap.Int64("page", pagination.Page),
zap.Int64("limit", pagination.Limit),
)
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }