generated from PenaSide/GolangTemplate
100 lines
2.7 KiB
Go
100 lines
2.7 KiB
Go
package account_admin
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
"math"
|
|
"gitea.pena/PenaSide/customer/internal/interface/controller/http"
|
|
"gitea.pena/PenaSide/customer/internal/interface/repository"
|
|
"gitea.pena/PenaSide/customer/internal/models"
|
|
"strconv"
|
|
)
|
|
|
|
type Deps struct {
|
|
MiddleWare *http.MiddleWare
|
|
AccountRepo *repository.AccountRepository
|
|
Logger *zap.Logger
|
|
}
|
|
|
|
type AccountInternalController struct {
|
|
middleWare *http.MiddleWare
|
|
accountRepo *repository.AccountRepository
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewAccountInternalController(deps Deps) *AccountInternalController {
|
|
return &AccountInternalController{
|
|
middleWare: deps.MiddleWare,
|
|
accountRepo: deps.AccountRepo,
|
|
logger: deps.Logger,
|
|
}
|
|
}
|
|
|
|
func (receiver *AccountInternalController) DeleteCurrent(ctx *fiber.Ctx) error {
|
|
userID := ctx.Params("userId")
|
|
if userID == "" {
|
|
return receiver.middleWare.Error(ctx, fiber.StatusBadRequest, "invalid format for parameter userId")
|
|
}
|
|
|
|
account, err := receiver.accountRepo.Remove(ctx.Context(), userID)
|
|
if err != nil {
|
|
return receiver.middleWare.ErrorOld(ctx, err)
|
|
}
|
|
|
|
return ctx.Status(fiber.StatusOK).JSON(account)
|
|
}
|
|
|
|
func (receiver *AccountInternalController) GetCurrent(ctx *fiber.Ctx) error {
|
|
userID := ctx.Params("userId")
|
|
if userID == "" {
|
|
return receiver.middleWare.Error(ctx, fiber.StatusBadRequest, "invalid format for parameter userId")
|
|
}
|
|
|
|
account, err := receiver.accountRepo.FindByUserID(ctx.Context(), userID)
|
|
if err != nil {
|
|
return receiver.middleWare.ErrorOld(ctx, err)
|
|
}
|
|
|
|
return ctx.Status(fiber.StatusOK).JSON(account)
|
|
}
|
|
|
|
func (receiver *AccountInternalController) Pagination(ctx *fiber.Ctx) error {
|
|
pageStr := ctx.Query("page", "1")
|
|
limitStr := ctx.Query("limit", "100")
|
|
|
|
page, err := strconv.ParseInt(pageStr, 10, 64)
|
|
if err != nil || page < 1 {
|
|
page = 1
|
|
}
|
|
limit, err := strconv.ParseInt(limitStr, 10, 64)
|
|
if err != nil || limit < 1 {
|
|
limit = models.DefaultLimit
|
|
} else {
|
|
limit = int64(math.Min(float64(limit), float64(models.DefaultLimit)))
|
|
}
|
|
|
|
count, err := receiver.accountRepo.CountAll(ctx.Context())
|
|
if err != nil {
|
|
return receiver.middleWare.ErrorOld(ctx, err)
|
|
}
|
|
|
|
if count == 0 {
|
|
response := models.PaginationResponse[models.Account]{TotalPages: 0, Records: []models.Account{}}
|
|
return ctx.Status(fiber.StatusOK).JSON(response)
|
|
}
|
|
|
|
totalPages := int64(math.Ceil(float64(count) / float64(limit)))
|
|
|
|
accounts, err := receiver.accountRepo.FindMany(ctx.Context(), page, limit)
|
|
if err != nil {
|
|
return receiver.middleWare.ErrorOld(ctx, err)
|
|
}
|
|
|
|
response := models.PaginationResponse[models.Account]{
|
|
TotalPages: totalPages,
|
|
Records: accounts,
|
|
}
|
|
|
|
return ctx.Status(fiber.StatusOK).JSON(response)
|
|
}
|