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) } }