110 lines
3.0 KiB
Go
Raw Permalink Normal View History

2025-07-18 20:10:29 +07:00
package transformer
import (
"apskel-pos-be/internal/contract"
"math"
)
func PaginationToRequest(page, limit int) (int, int) {
if page < 1 {
page = 1
}
if limit < 1 {
limit = 10
}
if limit > 100 {
limit = 100
}
return page, limit
}
func CreatePaginationResponse(totalCount, page, limit int) contract.PaginationResponse {
totalPages := int(math.Ceil(float64(totalCount) / float64(limit)))
if totalPages < 1 {
totalPages = 1
}
return contract.PaginationResponse{
TotalCount: totalCount,
Page: page,
Limit: limit,
TotalPages: totalPages,
}
}
func CreateListUsersResponse(users []contract.UserResponse, totalCount, page, limit int) *contract.ListUsersResponse {
pagination := CreatePaginationResponse(totalCount, page, limit)
return &contract.ListUsersResponse{
Users: users,
Pagination: pagination,
}
}
func CreateListOrganizationsResponse(orgs []contract.OrganizationResponse, totalCount, page, limit int) *contract.ListOrganizationsResponse {
pagination := CreatePaginationResponse(totalCount, page, limit)
return &contract.ListOrganizationsResponse{
Organizations: orgs,
TotalCount: pagination.TotalCount,
Page: pagination.Page,
Limit: pagination.Limit,
TotalPages: pagination.TotalPages,
}
}
func CreateListOutletsResponse(outlets []contract.OutletResponse, totalCount, page, limit int) *contract.ListOutletsResponse {
pagination := CreatePaginationResponse(totalCount, page, limit)
return &contract.ListOutletsResponse{
Outlets: outlets,
TotalCount: pagination.TotalCount,
Page: pagination.Page,
Limit: pagination.Limit,
TotalPages: pagination.TotalPages,
}
}
func CreateListOrdersResponse(orders []contract.OrderResponse, totalCount, page, limit int) *contract.ListOrdersResponse {
pagination := CreatePaginationResponse(totalCount, page, limit)
return &contract.ListOrdersResponse{
Orders: orders,
TotalCount: pagination.TotalCount,
Page: pagination.Page,
Limit: pagination.Limit,
TotalPages: pagination.TotalPages,
}
}
func CreateListProductsResponse(products []contract.ProductResponse, totalCount, page, limit int) *contract.ListProductsResponse {
pagination := CreatePaginationResponse(totalCount, page, limit)
return &contract.ListProductsResponse{
Products: products,
TotalCount: pagination.TotalCount,
Page: pagination.Page,
Limit: pagination.Limit,
TotalPages: pagination.TotalPages,
}
}
func CreateErrorResponse(message string, code int) *contract.ErrorResponse {
return &contract.ErrorResponse{
Error: "error",
Message: message,
Code: code,
}
}
func CreateValidationErrorResponse(message string, details map[string]string) *contract.ValidationErrorResponse {
return &contract.ValidationErrorResponse{
Error: "validation_error",
Message: message,
Details: details,
Code: 400,
}
}
func CreateSuccessResponse(message string, data interface{}) *contract.SuccessResponse {
return &contract.SuccessResponse{
Message: message,
Data: data,
}
}