Browse Source

Endpoint for updating client traffic by email (#3259)

* Update api.go

* Update inbound.go

* Update inbound.go
Azavax 23 hours ago
parent
commit
b1ab156e42
3 changed files with 41 additions and 0 deletions
  1. 1 0
      web/controller/api.go
  2. 25 0
      web/controller/inbound.go
  3. 15 0
      web/service/inbound.go

+ 1 - 0
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 {

+ 25 - 0
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)
+}

+ 15 - 0
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