DB more usage of transactions

This commit is contained in:
somebodywashere 2024-03-07 20:39:29 +03:00
parent ecae6e5ead
commit dbbfe0c0b7

View file

@ -969,7 +969,7 @@ func (s *InboundService) disableInvalidInbounds(tx *gorm.DB) (bool, int64, error
s.xrayApi.Init(p.GetAPIPort()) s.xrayApi.Init(p.GetAPIPort())
for _, tag := range tags { for _, tag := range tags {
err1 := s.xrayApi.DelInbound(tag) err1 := s.xrayApi.DelInbound(tag)
if err == nil { if err1 == nil {
logger.Debug("Inbound disabled by api:", tag) logger.Debug("Inbound disabled by api:", tag)
} else { } else {
logger.Debug("Error in disabling inbound by api:", err1) logger.Debug("Error in disabling inbound by api:", err1)
@ -1060,10 +1060,7 @@ func (s *InboundService) AddClientStat(tx *gorm.DB, inboundId int, client *model
clientTraffic.Reset = client.Reset clientTraffic.Reset = client.Reset
result := tx.Create(&clientTraffic) result := tx.Create(&clientTraffic)
err := result.Error err := result.Error
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) UpdateClientStat(tx *gorm.DB, email string, client *model.Client) error { func (s *InboundService) UpdateClientStat(tx *gorm.DB, email string, client *model.Client) error {
@ -1076,10 +1073,7 @@ func (s *InboundService) UpdateClientStat(tx *gorm.DB, email string, client *mod
"expiry_time": client.ExpiryTime, "expiry_time": client.ExpiryTime,
"reset": client.Reset}) "reset": client.Reset})
err := result.Error err := result.Error
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) UpdateClientIPs(tx *gorm.DB, oldEmail string, newEmail string) error { func (s *InboundService) UpdateClientIPs(tx *gorm.DB, oldEmail string, newEmail string) error {
@ -1204,10 +1198,7 @@ func (s *InboundService) SetClientTelegramUserID(trafficId int, tgId string) err
} }
inbound.Settings = string(modifiedSettings) inbound.Settings = string(modifiedSettings)
_, err = s.UpdateInboundClient(inbound, clientId) _, err = s.UpdateInboundClient(inbound, clientId)
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) checkIsEnabledByEmail(clientEmail string) (bool, error) { func (s *InboundService) checkIsEnabledByEmail(clientEmail string) (bool, error) {
@ -1354,10 +1345,7 @@ func (s *InboundService) ResetClientIpLimitByEmail(clientEmail string, count int
} }
inbound.Settings = string(modifiedSettings) inbound.Settings = string(modifiedSettings)
_, err = s.UpdateInboundClient(inbound, clientId) _, err = s.UpdateInboundClient(inbound, clientId)
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) ResetClientExpiryTimeByEmail(clientEmail string, expiry_time int64) error { func (s *InboundService) ResetClientExpiryTimeByEmail(clientEmail string, expiry_time int64) error {
@ -1414,10 +1402,7 @@ func (s *InboundService) ResetClientExpiryTimeByEmail(clientEmail string, expiry
} }
inbound.Settings = string(modifiedSettings) inbound.Settings = string(modifiedSettings)
_, err = s.UpdateInboundClient(inbound, clientId) _, err = s.UpdateInboundClient(inbound, clientId)
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) ResetClientTrafficLimitByEmail(clientEmail string, totalGB int) error { func (s *InboundService) ResetClientTrafficLimitByEmail(clientEmail string, totalGB int) error {
@ -1477,24 +1462,27 @@ func (s *InboundService) ResetClientTrafficLimitByEmail(clientEmail string, tota
} }
inbound.Settings = string(modifiedSettings) inbound.Settings = string(modifiedSettings)
_, err = s.UpdateInboundClient(inbound, clientId) _, err = s.UpdateInboundClient(inbound, clientId)
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) ResetClientTrafficByEmail(clientEmail string) error { func (s *InboundService) ResetClientTrafficByEmail(clientEmail string) error {
db := database.GetDB() db := database.GetDB()
tx := db.Begin()
var err error
result := db.Model(xray.ClientTraffic{}). defer func() {
if err == nil {
tx.Commit()
} else {
tx.Rollback()
}
}()
err = tx.Model(xray.ClientTraffic{}).
Where("email = ?", clientEmail). Where("email = ?", clientEmail).
Updates(map[string]interface{}{"enable": true, "up": 0, "down": 0}) Updates(map[string]interface{}{"enable": true, "up": 0, "down": 0}).Error
err := result.Error return err
if err != nil {
return err
}
return nil
} }
func (s *InboundService) ResetClientTraffic(id int, clientEmail string) (bool, error) { func (s *InboundService) ResetClientTraffic(id int, clientEmail string) (bool, error) {
@ -1550,7 +1538,17 @@ func (s *InboundService) ResetClientTraffic(id int, clientEmail string) (bool, e
traffic.Enable = true traffic.Enable = true
db := database.GetDB() db := database.GetDB()
err = db.Save(traffic).Error tx := db.Begin()
defer func() {
if err == nil {
tx.Commit()
} else {
tx.Rollback()
}
}()
err = tx.Save(traffic).Error
if err != nil { if err != nil {
return false, err return false, err
} }
@ -1560,6 +1558,16 @@ func (s *InboundService) ResetClientTraffic(id int, clientEmail string) (bool, e
func (s *InboundService) ResetAllClientTraffics(id int) error { func (s *InboundService) ResetAllClientTraffics(id int) error {
db := database.GetDB() db := database.GetDB()
tx := db.Begin()
var err error
defer func() {
if err == nil {
tx.Commit()
} else {
tx.Rollback()
}
}()
whereText := "inbound_id " whereText := "inbound_id "
if id == -1 { if id == -1 {
@ -1568,31 +1576,31 @@ func (s *InboundService) ResetAllClientTraffics(id int) error {
whereText += " = ?" whereText += " = ?"
} }
result := db.Model(xray.ClientTraffic{}). err = tx.Model(xray.ClientTraffic{}).
Where(whereText, id). Where(whereText, id).
Updates(map[string]interface{}{"enable": true, "up": 0, "down": 0}) Updates(map[string]interface{}{"enable": true, "up": 0, "down": 0}).Error
err := result.Error return err
if err != nil {
return err
}
return nil
} }
func (s *InboundService) ResetAllTraffics() error { func (s *InboundService) ResetAllTraffics() error {
db := database.GetDB() db := database.GetDB()
tx := db.Begin()
var err error
result := db.Model(model.Inbound{}). defer func() {
if err == nil {
tx.Commit()
} else {
tx.Rollback()
}
}()
err = tx.Model(model.Inbound{}).
Where("user_id > ?", 0). Where("user_id > ?", 0).
Updates(map[string]interface{}{"up": 0, "down": 0}) Updates(map[string]interface{}{"up": 0, "down": 0}).Error
err := result.Error return err
if err != nil {
return err
}
return nil
} }
func (s *InboundService) DelDepletedClients(id int) (err error) { func (s *InboundService) DelDepletedClients(id int) (err error) {
@ -1666,11 +1674,7 @@ func (s *InboundService) DelDepletedClients(id int) (err error) {
} }
err = tx.Where(whereText+" and enable = ?", id, false).Delete(xray.ClientTraffic{}).Error err = tx.Where(whereText+" and enable = ?", id, false).Delete(xray.ClientTraffic{}).Error
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) GetClientTrafficTgBot(tgId string) ([]*xray.ClientTraffic, error) { func (s *InboundService) GetClientTrafficTgBot(tgId string) ([]*xray.ClientTraffic, error) {
@ -1770,15 +1774,22 @@ func (s *InboundService) GetInboundClientIps(clientEmail string) (string, error)
func (s *InboundService) ClearClientIps(clientEmail string) error { func (s *InboundService) ClearClientIps(clientEmail string) error {
db := database.GetDB() db := database.GetDB()
tx := db.Begin()
var err error
result := db.Model(model.InboundClientIps{}). defer func() {
if err == nil {
tx.Commit()
} else {
tx.Rollback()
}
}()
err = tx.Model(model.InboundClientIps{}).
Where("client_email = ?", clientEmail). Where("client_email = ?", clientEmail).
Update("ips", "") Update("ips", "").Error
err := result.Error
if err != nil { return err
return err
}
return nil
} }
func (s *InboundService) SearchInbounds(query string) ([]*model.Inbound, error) { func (s *InboundService) SearchInbounds(query string) ([]*model.Inbound, error) {