This commit is contained in:
aditya.siregar
2024-10-27 19:48:10 +07:00
parent 758df918ae
commit 081a1aa27b
13 changed files with 190 additions and 35 deletions
@@ -7,6 +7,7 @@ import (
"furtuna-be/internal/handlers/request"
"furtuna-be/internal/handlers/response"
"furtuna-be/internal/services"
"furtuna-be/internal/utils"
"net/http"
"time"
@@ -56,7 +57,7 @@ func (h *Handler) Inquiry(c *gin.Context) {
c.JSON(http.StatusOK, response.BaseResponse{
Success: true,
Status: http.StatusOK,
Data: MapOrderToCreateOrderResponse(order),
Data: MapOrderToCreateOrderResponse(order, req),
})
}
@@ -88,7 +89,7 @@ func (h *Handler) Execute(c *gin.Context) {
})
}
func MapOrderToCreateOrderResponse(orderResponse *entity.OrderResponse) response.CreateOrderResponse {
func MapOrderToCreateOrderResponse(orderResponse *entity.OrderResponse, req request.CustomerOrder) response.CreateOrderResponse {
order := orderResponse.Order
orderItems := make([]response.CreateOrderItemResponse, len(order.OrderItems))
for i, item := range order.OrderItems {
@@ -115,6 +116,8 @@ func MapOrderToCreateOrderResponse(orderResponse *entity.OrderResponse) response
Total: order.Total,
VisitDate: order.VisitDate.Format("2006-01-02"),
SiteName: order.Site.Name,
BankCode: req.BankCode,
BankName: utils.BankName(req.BankCode),
}
}
+19 -26
View File
@@ -1,6 +1,9 @@
package mdtrns
package linkqu
import (
"encoding/json"
"fmt"
"furtuna-be/internal/entity"
"furtuna-be/internal/handlers/request"
"furtuna-be/internal/handlers/response"
"furtuna-be/internal/services"
@@ -13,7 +16,7 @@ type Handler struct {
}
func (h *Handler) Route(group *gin.RouterGroup, jwt gin.HandlerFunc) {
route := group.Group("/midtrans")
route := group.Group("/linkqu")
route.POST("/callback", h.Callback)
}
@@ -25,35 +28,24 @@ func NewHandler(service services.Order) *Handler {
}
func (h *Handler) Callback(c *gin.Context) {
var callbackData request.MidtransCallbackRequest
var callbackData request.LinQuCallback
if err := c.ShouldBindJSON(&callbackData); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
validStatuses := []string{"settlement", "expire", "deny", "cancel", "capture", "failure"}
data, _ := json.Marshal(callbackData)
fmt.Println(string(data))
isValidStatus := false
for _, status := range validStatuses {
if callbackData.TransactionStatus == status {
isValidStatus = true
break
}
}
if !isValidStatus {
c.JSON(http.StatusOK, response.BaseResponse{
Success: true,
Status: http.StatusOK,
Message: "",
})
return
}
err := h.service.ProcessCallback(c, callbackData.ToEntity())
err := h.service.ProcessLinkQuCallback(c, &entity.LinkQuCallback{
PaymentReff: callbackData.PartnerReff2,
Status: callbackData.Status,
Signature: callbackData.Signature,
PartnerReff: callbackData.PartnerReff,
})
if err != nil {
c.JSON(http.StatusUnauthorized, response.BaseResponse{
c.JSON(http.StatusBadRequest, response.BaseResponse{
Success: false,
Status: http.StatusBadRequest,
Message: err.Error(),
@@ -63,9 +55,10 @@ func (h *Handler) Callback(c *gin.Context) {
}
c.JSON(http.StatusOK, response.BaseResponse{
Success: true,
Status: http.StatusOK,
Message: "order",
Success: true,
Status: http.StatusOK,
Message: "order",
Response: "00",
})
}
+19
View File
@@ -37,3 +37,22 @@ func (m *MidtransCallbackRequest) ToEntity() *entity.CallbackRequest {
TransactionStatus: m.TransactionStatus,
}
}
type LinQuCallback struct {
Amount int `json:"amount"`
SerialNumber string `json:"serialnumber"`
Type string `json:"type"`
PaymentReff int64 `json:"payment_reff"`
VaCode string `json:"va_code"`
PartnerReff string `json:"partner_reff"`
PartnerReff2 string `json:"partner_reff2"`
AdditionalFee int `json:"additionalfee"`
Balance int `json:"balance"`
CreditBalance int `json:"credit_balance"`
TransactionTime string `json:"transaction_time"`
VaNumber string `json:"va_number"`
CustomerName string `json:"customer_name"`
Username string `json:"username"`
Status string `json:"status"`
Signature string `json:"signature"`
}
@@ -9,4 +9,5 @@ type BaseResponse struct {
ErrorDetail interface{} `json:"error_detail,omitempty"`
Data interface{} `json:"data,omitempty"`
PagingMeta *PagingMeta `json:"meta,omitempty"`
Response string `json:"response,omitempty"`
}
+2
View File
@@ -96,6 +96,8 @@ type CreateOrderResponse struct {
CreatedAt time.Time `json:"created_at"`
OrderItems []CreateOrderItemResponse `json:"order_items"`
Token string `json:"token"`
BankCode string `json:"bank_code"`
BankName string `json:"bank_name"`
}
type PrintDetailResponse struct {