From ee148b18431697f2bddc26c6678f6e87d35a4e8e Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 4 Mar 2023 22:02:05 +0100 Subject: [PATCH] added table cleaner for user sign up processes --- main.go | 2 ++ modules/scylladb/helper.go | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 modules/scylladb/helper.go diff --git a/main.go b/main.go index b894b7e..3efb05e 100644 --- a/main.go +++ b/main.go @@ -74,6 +74,8 @@ func main() { return fiber.ErrUpgradeRequired }) + go scylladb.TableCleaner() + go socketserver.RunHub() socketserver.WebSocketServer(app) diff --git a/modules/scylladb/helper.go b/modules/scylladb/helper.go new file mode 100644 index 0000000..0f7a01a --- /dev/null +++ b/modules/scylladb/helper.go @@ -0,0 +1,52 @@ +package scylladb + +import ( + "time" + + 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) + + 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 + } + + var expiredUserSignUpProcesses []dbstructs.UserSignUpProcess + + currentTimeUnix := time.Now().Unix() + + for _, us := range userSignUpProcesses { + if us.ExpiresAt < currentTimeUnix { + expiredUserSignUpProcesses = append(expiredUserSignUpProcesses, us) + } + } + + if len(expiredUserSignUpProcesses) > 0 { + batch := Session.NewBatch(gocql.UnloggedBatch) + + q := "DELETE FROM clicknjoin.user_sign_up_process 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 + } + } + + // restart timer + go TableCleaner() +}