Enha: cron for cleaning rooms from players
This commit is contained in:
58
crons/players.go
Normal file
58
crons/players.go
Normal file
@ -0,0 +1,58 @@
|
||||
package crons
|
||||
|
||||
import "context"
|
||||
|
||||
func (cm *CronManager) CleanupPlayersRoom() {
|
||||
ctx, tx, err := cm.repo.InitTx(context.Background())
|
||||
if err != nil {
|
||||
cm.log.Error("failed to init transaction for actions cleanup", "err", err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
if err := tx.Rollback(); err != nil {
|
||||
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
||||
}
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
players, err := cm.repo.PlayerListAll(ctx)
|
||||
if err != nil {
|
||||
cm.log.Error("failed to list players", "err", err)
|
||||
if err := tx.Rollback(); err != nil {
|
||||
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
// get all rooms to have only one req
|
||||
rooms, err := cm.repo.RoomList(ctx)
|
||||
if err != nil {
|
||||
cm.log.Error("failed to list rooms", "err", err)
|
||||
if err := tx.Rollback(); err != nil {
|
||||
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
for _, player := range players {
|
||||
found := false
|
||||
for _, room := range rooms {
|
||||
// check if room exists
|
||||
if player.RoomID != nil && room.ID == *player.RoomID {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
// delete roomid from player
|
||||
if err := cm.repo.PlayerExitRoom(ctx, player.Username); err != nil {
|
||||
cm.log.Error("failed to unset room", "err", err)
|
||||
if err := tx.Rollback(); err != nil {
|
||||
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := tx.Commit(); err != nil {
|
||||
cm.log.Error("failed to commit transaction for actions cleanup", "err", err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user