diff --git a/modules/scylladb/helper.go b/modules/scylladb/helper.go index 6d6e4d2..543dde8 100644 --- a/modules/scylladb/helper.go +++ b/modules/scylladb/helper.go @@ -13,7 +13,7 @@ func TableCleaner() { desiredTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day()+1, 3, 0, 0, 0, currentTime.Location()) duration := desiredTime.Sub(currentTime) - time.Sleep(duration) + // handling expired userSignUpProcesses var userSignUpProcesses []dbstructs.UserSignUpProcess @@ -22,10 +22,10 @@ func TableCleaner() { return } - var expiredUserSignUpProcesses []dbstructs.UserSignUpProcess - currentTimeUnix := time.Now().Unix() + var expiredUserSignUpProcesses []dbstructs.UserSignUpProcess + for _, us := range userSignUpProcesses { if us.ExpiresAt < currentTimeUnix { expiredUserSignUpProcesses = append(expiredUserSignUpProcesses, us) @@ -47,6 +47,42 @@ func TableCleaner() { } } + // handling reserved account names + + var users []dbstructs.User + + if err := Session.Query(gocnjhelper.DbMUsers.SelectAll()).SelectRelease(&users); err != nil { + gocnjhelper.LogErrorf("Failed to select users, err: %s", err.Error()) + return + } + + var updatingUsers []dbstructs.User + + accountNameReservingTime := currentTime.Add(-7 * 24 * time.Hour).Unix() + + for _, u := range users { + if u.LastAccountNameLc != "" && u.AccountNameUpdatedAt < accountNameReservingTime { + updatingUsers = append(updatingUsers, u) + } + } + + if len(updatingUsers) > 0 { + batch := Session.NewBatch(gocql.UnloggedBatch) + + q := "UPDATE " + Cluster.Keyspace + "." + gocnjhelper.DbMUsers.Name() + " SET last_account_name_lc='' WHERE id = ?" + + for _, us := range updatingUsers { + batch.Query(q, us.Id) + } + + if err := Session.ExecuteBatch(batch); err != nil { + gocnjhelper.LogErrorf("Failed to execute batch, err:", err.Error()) + return + } + } + + time.Sleep(duration) + // restart timer go TableCleaner() }