From ecd4ed2ef8c2e4519e6a917f419a557c616964e8 Mon Sep 17 00:00:00 2001 From: mstar Date: Tue, 8 Apr 2025 09:21:21 +0200 Subject: [PATCH] Add ticker for cleaning deleted users --- storage-new/cleaners/gdprUsers.go | 23 +++++++++++++++++++++++ storage-new/cleaners/manager.go | 4 ++++ storage-new/dbgen/users.gen.go | 15 +++++++++++++++ storage-new/models/User.go | 4 ++++ 4 files changed, 46 insertions(+) create mode 100644 storage-new/cleaners/gdprUsers.go diff --git a/storage-new/cleaners/gdprUsers.go b/storage-new/cleaners/gdprUsers.go new file mode 100644 index 0000000..494afa8 --- /dev/null +++ b/storage-new/cleaners/gdprUsers.go @@ -0,0 +1,23 @@ +package cleaners + +import ( + "time" + + "github.com/rs/zerolog/log" + + "git.mstar.dev/mstar/linstrom/storage-new/dbgen" +) + +func init() { + cleanerBuilders = append(cleanerBuilders, buildGdprUsers) +} + +func tickGdprUsers(now time.Time) { + if err := dbgen.User.GdprUsers(); err != nil { + log.Error().Err(err).Msg("Failed to gdpr users") + } +} + +func buildGdprUsers() (onTick func(time.Time), name string, tickSpeed time.Duration) { + return tickGdprUsers, "gdpr-users", time.Hour +} diff --git a/storage-new/cleaners/manager.go b/storage-new/cleaners/manager.go index fcb3ccf..4b50408 100644 --- a/storage-new/cleaners/manager.go +++ b/storage-new/cleaners/manager.go @@ -3,6 +3,8 @@ package cleaners import ( "sync" "time" + + "github.com/rs/zerolog/log" ) type CleanerManager struct { @@ -26,6 +28,7 @@ func NewManager() *CleanerManager { exitChan := make(chan any, 1) onTick, name, tickSpeed := builder() cm.exitChans = append(cm.exitChans, exitChan) + log.Info().Str("name", name).Msg("Starting ticker for cleaner") go cm.tickOrExit(tickSpeed, name, exitChan, onTick) } @@ -63,6 +66,7 @@ func (m *CleanerManager) wrapOnTick(name string, now time.Time, onTick func(time } m.activeCleaners[name] = true m.activeCleanerLock.Unlock() + log.Info().Str("cleaner", name).Msg("Ticking cleaner") onTick(now) m.activeCleanerLock.Lock() m.activeCleaners[name] = false diff --git a/storage-new/dbgen/users.gen.go b/storage-new/dbgen/users.gen.go index 15b9013..a45e37e 100644 --- a/storage-new/dbgen/users.gen.go +++ b/storage-new/dbgen/users.gen.go @@ -1460,6 +1460,7 @@ type IUserDo interface { GetPagedTruePublic(pageNr uint) (result []models.User, err error) GetPagedAllDeleted(pageNr uint) (result []models.User, err error) GetPagedAllNonDeleted(pageNr uint) (result []models.User, err error) + GdprUsers() (err error) } // Get a user by a username @@ -1552,6 +1553,20 @@ func (u userDo) GetPagedAllNonDeleted(pageNr uint) (result []models.User, err er return } +// Gdpr deleted users +// +// DELETE FROM @@table WHERE deleted_at IS NOT NULL AND deleted_at < NOW() +func (u userDo) GdprUsers() (err error) { + var generateSQL strings.Builder + generateSQL.WriteString("DELETE FROM users WHERE deleted_at IS NOT NULL AND deleted_at < NOW() ") + + var executeSQL *gorm.DB + executeSQL = u.UnderlyingDB().Exec(generateSQL.String()) // ignore_security_alert + err = executeSQL.Error + + return +} + func (u userDo) Debug() IUserDo { return u.withDO(u.DO.Debug()) } diff --git a/storage-new/models/User.go b/storage-new/models/User.go index 3ffd08d..379caed 100644 --- a/storage-new/models/User.go +++ b/storage-new/models/User.go @@ -112,4 +112,8 @@ type IUser interface { // LIMIT 50 // OFFSET @pageNr * 50 GetPagedAllNonDeleted(pageNr uint) ([]gen.T, error) + // Gdpr deleted users + // + // DELETE FROM @@table WHERE deleted_at IS NOT NULL AND deleted_at < NOW() + GdprUsers() error }