treasurer/handlers/payout.go

91 lines
2.8 KiB
Go
Raw Normal View History

2023-05-16 16:21:56 +00:00
package handlers
import (
"bitbucket.org/skeris/treasurer/dal"
"bitbucket.org/skeris/treasurer/payway"
"github.com/gorilla/mux"
"net/http"
)
type RequestCreatePayout struct {
RequesterID string `json:"requester_id" validate:"required"`
Amount float64 `json:"amount" validate:">0"` // Сумма для вывода
Destination string `json:"destination" validate:"required"` // Счет на который выводим
PayWayID string `json:"payway_id" validate:"required"` // Присылать именно ID, а не shortName! id: fk1, sn: fk
PayoutType string `json:"payout_type" validate:"required"` // Тип вывода: payoutType.CommonID
Currency string `json:"currency"`
Description string `json:"description"` // Пока не придумал что сюда заполнять
Email string `json:"email"`
Phone string `json:"phone"`
IsFake bool `json:"is_fake"`
OnAccept Action `json:"on_accept"`
OnDecline Action `json:"on_decline"`
OnTimeout Action `json:"on_timeout"`
}
func CreatePayoutHandler(h *Handler, pwc *payway.PayWay) {
var request RequestCreatePayout
err := h.handlePostRequest(&request)
if err != nil {
return
}
// Добавить в монгу запись
record := &dal.Payment{
RequesterID: request.RequesterID,
Amount: request.Amount,
Destination: request.Destination,
PayWayID: request.PayWayID,
PaymentType: request.PayoutType,
Currency: request.Currency,
Description: request.Description, // Пока не придумал что сюда заполнять
Email: request.Email,
Phone: request.Phone,
IsFake: request.IsFake,
UserIP: h.r.RemoteAddr,
Status: "open",
OnAccept: dal.Action{ActionType: request.OnAccept.ActionType, Data: request.OnAccept.Data},
OnDecline: dal.Action{ActionType: request.OnDecline.ActionType, Data: request.OnDecline.Data},
OnTimeout: dal.Action{ActionType: request.OnTimeout.ActionType, Data: request.OnTimeout.Data},
IsRefill: false,
}
id, err := h.mongo.InsertPayment(h.r.Context(), record)
if err != nil {
h.reportError(http.StatusInternalServerError, "failed", err)
return
}
// Добавить в очередь запись
pwc.QueuePayout.Enqueue(id)
h.sendResponse(Response{
Success: true,
Message: map[string]string{"id": id},
})
}
func PayoutListenerHandler(h *Handler, pwc *payway.PayWay) {
payWay := mux.Vars(h.r)["payWay"]
var err error
switch payWay {
case "fk":
var request payway.ReqPayoutListenerFk
err = h.handleGetRequest(&request)
if err != nil {
return
}
err = pwc.Cache[payWay].PayoutListener(h.r.Context(), h.r.RemoteAddr, &request, h.mongo)
if err != nil {
h.reportError(http.StatusInternalServerError, "failed", err)
return
}
}
}