Test yookassa callback
This commit is contained in:
99
internal/api/payout/payout_handler.go
Normal file
99
internal/api/payout/payout_handler.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package payout
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"regexp"
|
||||
|
||||
"go.uber.org/fx"
|
||||
|
||||
"payouts/internal/config"
|
||||
"payouts/internal/service/cache"
|
||||
"payouts/internal/service/database"
|
||||
"payouts/internal/service/database/orm"
|
||||
"payouts/internal/service/yookassa"
|
||||
)
|
||||
|
||||
const (
|
||||
BaseRoute = "/payout"
|
||||
CreateRoute = "/create"
|
||||
CallbackRoute = "/callback"
|
||||
BanksRoute = "/sbp/banks"
|
||||
)
|
||||
|
||||
var authHeaderRe = regexp.MustCompile(`^Bearer\s+(.*)$`)
|
||||
|
||||
type payoutHandler struct {
|
||||
dbService database.Service
|
||||
cacheService cache.Service
|
||||
yooKassa yookassa.Service
|
||||
}
|
||||
|
||||
// Params represents the module input params
|
||||
type Params struct {
|
||||
fx.In
|
||||
|
||||
AppConfig *config.App
|
||||
DbService database.Service
|
||||
YooKassa yookassa.Service
|
||||
CacheService cache.Service
|
||||
}
|
||||
|
||||
func NewPayoutHandler(p Params) (Handler, error) {
|
||||
return &payoutHandler{
|
||||
dbService: p.DbService,
|
||||
cacheService: p.CacheService,
|
||||
yooKassa: p.YooKassa,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *payoutHandler) getSession(r *http.Request) (*orm.User, error) {
|
||||
authHeaderValue := r.Header.Get("Authorization")
|
||||
if len(authHeaderValue) == 0 {
|
||||
return nil, errors.New("no valid auth header")
|
||||
}
|
||||
|
||||
matches := authHeaderRe.FindStringSubmatch(authHeaderValue)
|
||||
if matches == nil {
|
||||
return nil, errors.New("no valid auth header")
|
||||
}
|
||||
|
||||
sessionId := matches[1]
|
||||
userSession, err := p.cacheService.GetSession(sessionId)
|
||||
if err != nil {
|
||||
return nil, errors.New("session not found")
|
||||
}
|
||||
return &userSession, nil
|
||||
|
||||
}
|
||||
|
||||
// GetSbpBanks implements [Handler].
|
||||
func (p *payoutHandler) GetSbpBanks(w http.ResponseWriter, r *http.Request) {
|
||||
panic("unimplemented")
|
||||
}
|
||||
|
||||
// PaymentCreate implements [Handler].
|
||||
func (p *payoutHandler) PayoutCreate(w http.ResponseWriter, r *http.Request) {
|
||||
errResponse := func(message string, err error, status int) {
|
||||
http.Error(w, errors.Join(errors.New(message), err).Error(), status)
|
||||
}
|
||||
|
||||
_, err := p.getSession(r)
|
||||
if err != nil {
|
||||
errResponse("unautiorized", err, http.StatusUnauthorized)
|
||||
}
|
||||
|
||||
panic("unimplemented")
|
||||
}
|
||||
|
||||
// PaymentCallback implements [Handler].
|
||||
func (p *payoutHandler) PayoutCallback(w http.ResponseWriter, r *http.Request) {
|
||||
inData := map[string]any{}
|
||||
decoder := json.NewDecoder(r.Body)
|
||||
decoder.Decode(&inData)
|
||||
|
||||
slog.Info(fmt.Sprintf("Received callback from %s with object %v with headers %v", r.RemoteAddr, inData, r.Header))
|
||||
}
|
||||
Reference in New Issue
Block a user