treasurer/handlers/payout.go
2023-05-16 19:21:56 +03:00

91 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}
}