From b1ab156e42ed0e68b49e89df45d44b6ad0ea02ff Mon Sep 17 00:00:00 2001 From: Azavax <21226881+azavaxhuman@users.noreply.github.com> Date: Wed, 23 Jul 2025 01:13:48 +0330 Subject: [PATCH] Endpoint for updating client traffic by email (#3259) * Update api.go * Update inbound.go * Update inbound.go --- web/controller/api.go | 1 + web/controller/inbound.go | 25 +++++++++++++++++++++++++ web/service/inbound.go | 15 +++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/web/controller/api.go b/web/controller/api.go index 9944e2a3..636035ba 100644 --- a/web/controller/api.go +++ b/web/controller/api.go @@ -47,6 +47,7 @@ func (a *APIController) initRouter(g *gin.RouterGroup) { {"POST", "/resetAllClientTraffics/:id", a.inboundController.resetAllClientTraffics}, {"POST", "/delDepletedClients/:id", a.inboundController.delDepletedClients}, {"POST", "/onlines", a.inboundController.onlines}, + {"POST", "/updateClientTraffic/:email", a.inboundController.updateClientTraffic}, } for _, route := range inboundRoutes { diff --git a/web/controller/inbound.go b/web/controller/inbound.go index 592a4bd0..a89f224f 100644 --- a/web/controller/inbound.go +++ b/web/controller/inbound.go @@ -339,3 +339,28 @@ func (a *InboundController) delDepletedClients(c *gin.Context) { func (a *InboundController) onlines(c *gin.Context) { jsonObj(c, a.inboundService.GetOnlineClients(), nil) } + +func (a *InboundController) updateClientTraffic(c *gin.Context) { + email := c.Param("email") + + // Define the request structure for traffic update + type TrafficUpdateRequest struct { + Upload int64 `json:"upload"` + Download int64 `json:"download"` + } + + var request TrafficUpdateRequest + err := c.ShouldBindJSON(&request) + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.inboundUpdateSuccess"), err) + return + } + + err = a.inboundService.UpdateClientTrafficByEmail(email, request.Upload, request.Download) + if err != nil { + jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err) + return + } + + jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.inboundClientUpdateSuccess"), nil) +} diff --git a/web/service/inbound.go b/web/service/inbound.go index f2646dbb..66e1a420 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -1785,6 +1785,21 @@ func (s *InboundService) GetClientTrafficByEmail(email string) (traffic *xray.Cl return nil, nil } +func (s *InboundService) UpdateClientTrafficByEmail(email string, upload int64, download int64) error { + db := database.GetDB() + + result := db.Model(xray.ClientTraffic{}). + Where("email = ?", email). + Updates(map[string]any{"up": upload, "down": download}) + + err := result.Error + if err != nil { + logger.Warningf("Error updating ClientTraffic with email %s: %v", email, err) + return err + } + return nil +} + func (s *InboundService) GetClientTrafficByID(id string) ([]xray.ClientTraffic, error) { db := database.GetDB() var traffics []xray.ClientTraffic