2024-03-15 21:27:45 +03:00
package endpoints
import (
"fmt"
"net/http"
"relynolli-server/models"
"relynolli-server/services"
2024-03-23 23:25:54 +03:00
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
2024-03-15 21:27:45 +03:00
)
type handlers struct { }
type getTotalRequest struct {
FuserId int ` json:"fuserId" `
}
type getTotalResponse struct {
TotalProductPrice float64 ` json:"total_product_price" `
}
type makeOrderRequest struct {
FuserId int ` json:"fuserId" validate:"required" `
PhoneNumber string ` json:"phoneNumber" validate:"required" `
FullName string ` json:"fullName" validate:"required" `
Email string ` json:"email" validate:"required,email" `
DeliveryType string ` json:"deliveryType,omitempty" `
Address string ` json:"address,omitempty" `
}
func ( h handlers ) GetTotal ( c * gin . Context ) {
req := getTotalRequest { }
err := c . ShouldBindJSON ( & req )
if err != nil {
c . JSON ( http . StatusBadRequest , models . Response { Status : http . StatusBadRequest , Info : "fuserId is not provided" } )
return
}
total := services . GetTotal ( req . FuserId )
c . JSON ( http . StatusOK , getTotalResponse { TotalProductPrice : total } )
}
func ( h handlers ) MakeOrder ( c * gin . Context ) {
// VALIDATION
validate := validator . New ( validator . WithRequiredStructEnabled ( ) )
req := makeOrderRequest { }
err := c . ShouldBindJSON ( & req )
if err != nil {
c . JSON ( 400 , models . Response { Status : http . StatusBadRequest , Info : fmt . Sprintf ( "ERROR: %s" , err . Error ( ) ) } )
return
}
validationErr := validate . Struct ( req )
if validationErr != nil {
responseErr := validationErr . ( validator . ValidationErrors ) [ 0 ]
c . JSON ( http . StatusBadRequest , models . Response { Status : http . StatusBadRequest , Info : fmt . Sprintf ( "Validation Error: Field %s should be %s" , responseErr . Field ( ) , responseErr . Tag ( ) ) } )
return
}
kassaResult , serviceErr := services . MakeOrder ( req . FuserId , req . Email , req . FullName , req . PhoneNumber )
if serviceErr != nil {
c . JSON ( http . StatusInternalServerError , models . Response { Status : http . StatusInternalServerError , Info : fmt . Sprintf ( "Error: %s" , serviceErr . Error ( ) ) } )
return
}
c . JSON ( http . StatusOK , kassaResult )
}
type Handlers interface {
GetTotal ( c * gin . Context )
MakeOrder ( c * gin . Context )
}
func GetHandlers ( ) Handlers {
return & handlers { }
}