forked from ebhomengo/niki
feat(repo): add pagination to getallkindboxreq (#32)
Co-authored-by: mohammad mahdi rezaei <rezaei_21@yahoo.com> Reviewed-on: ebhomengo/niki#32 Co-authored-by: mehdi <lmehdirezl@gmail.com> Co-committed-by: mehdi <lmehdirezl@gmail.com>
This commit is contained in:
parent
93b0f51911
commit
0d9f98a2e0
|
@ -7,16 +7,16 @@ auth:
|
||||||
http_server:
|
http_server:
|
||||||
port: 1313
|
port: 1313
|
||||||
|
|
||||||
mysql:
|
mariadb:
|
||||||
port: 3306
|
port: 3306
|
||||||
host: niki-mariadb
|
host: localhost
|
||||||
db_name: niki_db
|
db_name: niki_db
|
||||||
username: niki
|
username: niki
|
||||||
password: nikiappt0lk2o20
|
password: nikiappt0lk2o20
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
port: 6379
|
port: 6380
|
||||||
host: niki-redis
|
host: localhost
|
||||||
password: ""
|
password: ""
|
||||||
db: 0
|
db: 0
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ type HTTPServer struct {
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
HTTPServer HTTPServer `koanf:"http_server"`
|
HTTPServer HTTPServer `koanf:"http_server"`
|
||||||
Mysql mysql.Config `koanf:"mysql"`
|
Mysql mysql.Config `koanf:"mariadb"`
|
||||||
Auth authservice.Config `koanf:"auth"`
|
Auth authservice.Config `koanf:"auth"`
|
||||||
AdminAuth authservice.Config `koanf:"admin_auth"`
|
AdminAuth authservice.Config `koanf:"admin_auth"`
|
||||||
Redis redis.Config `koanf:"redis"`
|
Redis redis.Config `koanf:"redis"`
|
||||||
|
|
|
@ -2,7 +2,9 @@ package adminkindboxreqhandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
paginationparam "git.gocasts.ir/ebhomengo/niki/param"
|
||||||
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
|
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
|
||||||
httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
|
httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
|
||||||
echo "github.com/labstack/echo/v4"
|
echo "github.com/labstack/echo/v4"
|
||||||
|
@ -14,7 +16,16 @@ func (h Handler) GetAll(c echo.Context) error {
|
||||||
return echo.NewHTTPError(http.StatusBadRequest)
|
return echo.NewHTTPError(http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, sErr := h.adminKindBoxReqSvc.GetAll(c.Request().Context(), req)
|
var paginationReq paginationparam.PaginationRequest
|
||||||
|
// TODO : pkg convert string to uint
|
||||||
|
//nolint
|
||||||
|
pageNumber, _ := strconv.ParseUint(c.QueryParam("page_number"), 0, 64)
|
||||||
|
//nolint
|
||||||
|
pageSize, _ := strconv.ParseUint(c.QueryParam("page_size"), 0, 64)
|
||||||
|
paginationReq.PageSize = uint(pageSize)
|
||||||
|
paginationReq.PageNumber = uint(pageNumber)
|
||||||
|
|
||||||
|
resp, sErr := h.adminKindBoxReqSvc.GetAll(c.Request().Context(), req, paginationReq)
|
||||||
if sErr != nil {
|
if sErr != nil {
|
||||||
msg, code := httpmsg.Error(sErr)
|
msg, code := httpmsg.Error(sErr)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
package adminkindboxreqparam
|
package adminkindboxreqparam
|
||||||
|
|
||||||
import entity "git.gocasts.ir/ebhomengo/niki/entity"
|
import (
|
||||||
|
entity "git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
paginationparam "git.gocasts.ir/ebhomengo/niki/param"
|
||||||
|
)
|
||||||
|
|
||||||
type KindBoxReqGetAllRequest struct{}
|
type KindBoxReqGetAllRequest struct{}
|
||||||
|
|
||||||
type KindBoxReqGetAllResponse struct {
|
type KindBoxReqGetAllResponse struct {
|
||||||
AllKindBoxReq []entity.KindBoxReq
|
AllKindBoxReq []entity.KindBoxReq
|
||||||
|
Pagination paginationparam.PaginationResponse
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package param
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultPageNumber = 1
|
||||||
|
dafaultPageSize = 10
|
||||||
|
)
|
||||||
|
|
||||||
|
type PaginationRequest struct {
|
||||||
|
PageSize uint
|
||||||
|
PageNumber uint
|
||||||
|
}
|
||||||
|
|
||||||
|
type PaginationResponse struct {
|
||||||
|
PageSize uint
|
||||||
|
PageNumber uint
|
||||||
|
Total uint
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PaginationRequest) GetPageNumber() uint {
|
||||||
|
if p.PageNumber <= 0 {
|
||||||
|
p.PageNumber = defaultPageNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
return p.PageNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PaginationRequest) GetOffset() uint {
|
||||||
|
return (p.GetPageNumber() - 1) * p.GetPageSize()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PaginationRequest) GetPageSize() uint {
|
||||||
|
validPageSizes := []uint{10, 25, 50, 100}
|
||||||
|
for _, size := range validPageSizes {
|
||||||
|
if p.PageSize == size {
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dafaultPageSize
|
||||||
|
}
|
|
@ -4,17 +4,40 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"git.gocasts.ir/ebhomengo/niki/entity"
|
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
paginationparam "git.gocasts.ir/ebhomengo/niki/param"
|
||||||
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (d DB) GetAllKindBoxReq(ctx context.Context) ([]entity.KindBoxReq, error) {
|
func (d DB) GetAllKindBoxReq(ctx context.Context, pagination paginationparam.PaginationRequest) ([]entity.KindBoxReq, paginationparam.PaginationResponse, error) {
|
||||||
const op = "mysqlkindboxreq.GetAllKindBoxReq"
|
const op = "mysqlkindboxreq.GetAllKindBoxReq"
|
||||||
|
|
||||||
// TODO - add sort and filter
|
// TODO: create getCount function
|
||||||
rows, err := d.conn.Conn().QueryContext(ctx, "select * from kind_box_reqs")
|
var count uint
|
||||||
|
rows, err := d.conn.Conn().QueryContext(ctx, "SELECT COUNT(*) FROM kind_box_reqs")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil,
|
return nil, paginationparam.PaginationResponse{},
|
||||||
|
richerror.New(op).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithErr(err).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
// Iterate through the rows (should only be one) and extract the count:
|
||||||
|
for rows.Next() {
|
||||||
|
err := rows.Scan(&count)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rErr := rows.Err(); rErr != nil {
|
||||||
|
return nil, paginationparam.PaginationResponse{}, richerror.New(op).WithErr(rErr).
|
||||||
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO - add sort and filter
|
||||||
|
rows, err = d.conn.Conn().QueryContext(ctx, "select * from kind_box_reqs limit ? offset ?", pagination.GetPageSize(), pagination.GetOffset())
|
||||||
|
if err != nil {
|
||||||
|
return nil, paginationparam.PaginationResponse{},
|
||||||
richerror.New(op).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithErr(err).WithKind(richerror.KindUnexpected)
|
richerror.New(op).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithErr(err).WithKind(richerror.KindUnexpected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,16 +50,20 @@ func (d DB) GetAllKindBoxReq(ctx context.Context) ([]entity.KindBoxReq, error) {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
kindBoxReq, sErr := scanKindBoxReq(rows)
|
kindBoxReq, sErr := scanKindBoxReq(rows)
|
||||||
if sErr != nil {
|
if sErr != nil {
|
||||||
return nil, richerror.New(op).WithErr(sErr).
|
return nil, paginationparam.PaginationResponse{}, richerror.New(op).WithErr(sErr).
|
||||||
WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
|
WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
|
||||||
}
|
}
|
||||||
kindBoxReqs = append(kindBoxReqs, kindBoxReq)
|
kindBoxReqs = append(kindBoxReqs, kindBoxReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
if rErr := rows.Err(); rErr != nil {
|
if rErr := rows.Err(); rErr != nil {
|
||||||
return nil, richerror.New(op).WithErr(rErr).
|
return nil, paginationparam.PaginationResponse{}, richerror.New(op).WithErr(rErr).
|
||||||
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
}
|
}
|
||||||
|
|
||||||
return kindBoxReqs, nil
|
return kindBoxReqs, paginationparam.PaginationResponse{
|
||||||
|
PageSize: pagination.GetPageSize(),
|
||||||
|
PageNumber: pagination.GetPageNumber(),
|
||||||
|
Total: count,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,26 @@ package adminkindboxreqservice
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
paginationparam "git.gocasts.ir/ebhomengo/niki/param"
|
||||||
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
|
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
|
||||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Pagination, Filters, Sort.
|
// TODO: Pagination, Filters, Sort.
|
||||||
func (s Service) GetAll(ctx context.Context, _ param.KindBoxReqGetAllRequest) (param.KindBoxReqGetAllResponse, error) {
|
func (s Service) GetAll(ctx context.Context, _ param.KindBoxReqGetAllRequest, paginationreq paginationparam.PaginationRequest) (param.KindBoxReqGetAllResponse, error) {
|
||||||
const op = "adminkindboxreqservice.GetAll"
|
const op = "adminkindboxreqservice.GetAll"
|
||||||
|
|
||||||
allKindBoxReq, err := s.repo.GetAllKindBoxReq(ctx)
|
allKindBoxReq, pagination, err := s.repo.GetAllKindBoxReq(ctx, paginationreq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
|
return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
|
||||||
}
|
}
|
||||||
|
|
||||||
return param.KindBoxReqGetAllResponse{AllKindBoxReq: allKindBoxReq}, nil
|
return param.KindBoxReqGetAllResponse{
|
||||||
|
AllKindBoxReq: allKindBoxReq,
|
||||||
|
Pagination: paginationparam.PaginationResponse{
|
||||||
|
PageSize: pagination.PageSize,
|
||||||
|
PageNumber: pagination.PageNumber,
|
||||||
|
Total: pagination.Total,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"git.gocasts.ir/ebhomengo/niki/entity"
|
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
paginationparam "git.gocasts.ir/ebhomengo/niki/param"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Repository interface {
|
type Repository interface {
|
||||||
|
@ -11,7 +12,7 @@ type Repository interface {
|
||||||
GetByID(ctx context.Context, id uint) (entity.KindBoxReq, error)
|
GetByID(ctx context.Context, id uint) (entity.KindBoxReq, error)
|
||||||
RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error
|
RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error
|
||||||
RollbackKindBoxRequestStatus(ctx context.Context, id uint) error
|
RollbackKindBoxRequestStatus(ctx context.Context, id uint) error
|
||||||
GetAllKindBoxReq(ctx context.Context) ([]entity.KindBoxReq, error)
|
GetAllKindBoxReq(ctx context.Context, pagination paginationparam.PaginationRequest) ([]entity.KindBoxReq, paginationparam.PaginationResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
|
Loading…
Reference in New Issue