110 lines
3.0 KiB
Go
110 lines
3.0 KiB
Go
|
|
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,
|
||
|
|
}
|
||
|
|
}
|