Add ticker for cleaning deleted users
This commit is contained in:
parent
954e4c5a34
commit
ecd4ed2ef8
4 changed files with 46 additions and 0 deletions
23
storage-new/cleaners/gdprUsers.go
Normal file
23
storage-new/cleaners/gdprUsers.go
Normal file
|
@ -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
|
||||||
|
}
|
|
@ -3,6 +3,8 @@ package cleaners
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CleanerManager struct {
|
type CleanerManager struct {
|
||||||
|
@ -26,6 +28,7 @@ func NewManager() *CleanerManager {
|
||||||
exitChan := make(chan any, 1)
|
exitChan := make(chan any, 1)
|
||||||
onTick, name, tickSpeed := builder()
|
onTick, name, tickSpeed := builder()
|
||||||
cm.exitChans = append(cm.exitChans, exitChan)
|
cm.exitChans = append(cm.exitChans, exitChan)
|
||||||
|
log.Info().Str("name", name).Msg("Starting ticker for cleaner")
|
||||||
go cm.tickOrExit(tickSpeed, name, exitChan, onTick)
|
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.activeCleaners[name] = true
|
||||||
m.activeCleanerLock.Unlock()
|
m.activeCleanerLock.Unlock()
|
||||||
|
log.Info().Str("cleaner", name).Msg("Ticking cleaner")
|
||||||
onTick(now)
|
onTick(now)
|
||||||
m.activeCleanerLock.Lock()
|
m.activeCleanerLock.Lock()
|
||||||
m.activeCleaners[name] = false
|
m.activeCleaners[name] = false
|
||||||
|
|
|
@ -1460,6 +1460,7 @@ type IUserDo interface {
|
||||||
GetPagedTruePublic(pageNr uint) (result []models.User, err error)
|
GetPagedTruePublic(pageNr uint) (result []models.User, err error)
|
||||||
GetPagedAllDeleted(pageNr uint) (result []models.User, err error)
|
GetPagedAllDeleted(pageNr uint) (result []models.User, err error)
|
||||||
GetPagedAllNonDeleted(pageNr uint) (result []models.User, err error)
|
GetPagedAllNonDeleted(pageNr uint) (result []models.User, err error)
|
||||||
|
GdprUsers() (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a user by a username
|
// Get a user by a username
|
||||||
|
@ -1552,6 +1553,20 @@ func (u userDo) GetPagedAllNonDeleted(pageNr uint) (result []models.User, err er
|
||||||
return
|
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 {
|
func (u userDo) Debug() IUserDo {
|
||||||
return u.withDO(u.DO.Debug())
|
return u.withDO(u.DO.Debug())
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,4 +112,8 @@ type IUser interface {
|
||||||
// LIMIT 50
|
// LIMIT 50
|
||||||
// OFFSET @pageNr * 50
|
// OFFSET @pageNr * 50
|
||||||
GetPagedAllNonDeleted(pageNr uint) ([]gen.T, error)
|
GetPagedAllNonDeleted(pageNr uint) ([]gen.T, error)
|
||||||
|
// Gdpr deleted users
|
||||||
|
//
|
||||||
|
// DELETE FROM @@table WHERE deleted_at IS NOT NULL AND deleted_at < NOW()
|
||||||
|
GdprUsers() error
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue