package scylladb import ( "time" "clickandjoin.app/managementsystem/modules/utils" gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper" "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper/dbstructs" "github.com/gocql/gocql" ) func TableCleaner() { currentTime := time.Now() desiredTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day()+1, 3, 0, 0, 0, currentTime.Location()) duration := desiredTime.Sub(currentTime) // handling expired userSignUpProcesses time.Sleep(duration) var userSignUpProcesses []dbstructs.UserSignUpProcess if err := Session.Query(gocnjhelper.DbMUserSignUpProcess.SelectAll()).SelectRelease(&userSignUpProcesses); err != nil { gocnjhelper.LogErrorf("Failed to select user sign up processes, err: %s", err.Error()) return } currentTimeUnix := time.Now().Unix() var expiredUserSignUpProcesses []dbstructs.UserSignUpProcess for _, us := range userSignUpProcesses { if us.ExpiresAt < currentTimeUnix { expiredUserSignUpProcesses = append(expiredUserSignUpProcesses, us) } } if len(expiredUserSignUpProcesses) > 0 { batch := Session.NewBatch(gocql.UnloggedBatch) q := "DELETE FROM " + Cluster.Keyspace + "." + gocnjhelper.DbMUserSignUpProcess.Name() + " WHERE x_token = ?" for _, us := range expiredUserSignUpProcesses { batch.Query(q, us.XToken) } if err := Session.ExecuteBatch(batch); err != nil { gocnjhelper.LogErrorf("Failed to execute batch, err:", err.Error()) return } } // 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(-utils.AccountNameReservingTime * 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 } } // restart timer go TableCleaner() }