feat(commerce): add GET /sell/transfers endpoint

This commit is contained in:
senke 2026-02-23 22:56:26 +01:00
parent 22ce89f3da
commit b3c74428d8
2 changed files with 26 additions and 4 deletions

View file

@ -102,10 +102,11 @@ func (r *APIRouter) setupMarketplaceRoutes(router *gin.RouterGroup) {
sellProtected.GET("/stats/top-products", marketHandler.GetSellTopProducts)
sellProtected.GET("/sales", marketHandler.GetSellSales)
sellHandler := handlers.NewSellHandler(stripeConnectSvc, r.logger)
sellHandler := handlers.NewSellHandler(r.db.GormDB, stripeConnectSvc, r.logger)
sellProtected.POST("/connect/onboard", sellHandler.ConnectOnboard)
sellProtected.GET("/connect/callback", sellHandler.ConnectCallback)
sellProtected.GET("/balance", sellHandler.GetBalance)
sellProtected.GET("/transfers", sellHandler.GetSellerTransfers)
}
commerce := router.Group("/commerce")

View file

@ -4,21 +4,25 @@ import (
"errors"
"net/http"
"veza-backend-api/internal/core/marketplace"
"veza-backend-api/internal/services"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"gorm.io/gorm"
)
// SellHandler handles Stripe Connect seller payout endpoints
type SellHandler struct {
stripeConnect *services.StripeConnectService
logger *zap.Logger
db *gorm.DB
stripeConnect *services.StripeConnectService
logger *zap.Logger
}
// NewSellHandler creates a new SellHandler
func NewSellHandler(stripeConnect *services.StripeConnectService, logger *zap.Logger) *SellHandler {
func NewSellHandler(db *gorm.DB, stripeConnect *services.StripeConnectService, logger *zap.Logger) *SellHandler {
return &SellHandler{
db: db,
stripeConnect: stripeConnect,
logger: logger,
}
@ -125,3 +129,20 @@ func (h *SellHandler) GetBalance(c *gin.Context) {
"pending": bal.Pending,
})
}
// GetSellerTransfers returns the transfer history for the authenticated seller (v0.603)
func (h *SellHandler) GetSellerTransfers(c *gin.Context) {
userID, ok := GetUserIDUUID(c)
if !ok {
return
}
var transfers []marketplace.SellerTransfer
if err := h.db.Where("seller_id = ?", userID).Order("created_at DESC").Find(&transfers).Error; err != nil {
h.logger.Error("GetSellerTransfers failed", zap.Error(err), zap.String("user_id", userID.String()))
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to fetch transfers"})
return
}
RespondSuccess(c, http.StatusOK, gin.H{"data": transfers})
}