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
	 Grail Finder
					Grail Finder