diff --git a/veza-backend-api/internal/api/routes_marketplace.go b/veza-backend-api/internal/api/routes_marketplace.go index 1d366091b..2ce8fa905 100644 --- a/veza-backend-api/internal/api/routes_marketplace.go +++ b/veza-backend-api/internal/api/routes_marketplace.go @@ -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") diff --git a/veza-backend-api/internal/handlers/sell_handler.go b/veza-backend-api/internal/handlers/sell_handler.go index 244452a74..1d3eb542b 100644 --- a/veza-backend-api/internal/handlers/sell_handler.go +++ b/veza-backend-api/internal/handlers/sell_handler.go @@ -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}) +}