91 lines
2.8 KiB
Go
91 lines
2.8 KiB
Go
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
|
||
}
|
||
|
||
}
|
||
}
|