diff options
| author | Azavax <21226881+azavaxhuman@users.noreply.github.com> | 2025-07-23 00:43:48 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-23 00:43:48 +0300 |
| commit | b1ab156e42ed0e68b49e89df45d44b6ad0ea02ff (patch) | |
| tree | e4ffb3297e38afaf54e625065ab2886b25f5fc1c | |
| parent | fa45bf87de469f9e7f79c90b4381de5b9e4f58d2 (diff) | |
Endpoint for updating client traffic by email (#3259)
* Update api.go
* Update inbound.go
* Update inbound.go
| -rw-r--r-- | web/controller/api.go | 1 | ||||
| -rw-r--r-- | web/controller/inbound.go | 25 | ||||
| -rw-r--r-- | web/service/inbound.go | 15 |
3 files changed, 41 insertions, 0 deletions
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 |
