public static async Task<IList<Player>> LoadRandom( SocialGamificationAssetContext db, Player player, IList<CustomDataBase> customData, bool alliancesOnly = false, int limit = 1) { var query = db.Players.Where(a => a.Role == AccountType.Player); if (alliancesOnly) { var alliancesList = Alliance.GetAllianceIds(db, player.Id, AllianceState.Accepted); query = query.Where(p => alliancesList.Contains(p.Id)); } else { query = query.Where(p => p.Id != player.Id); } // CustomData conditions var customDataQuery = Models.CustomData.ConditionBuilder(db, customData, CustomDataType.Player); if (customDataQuery != null) { IList<Guid> similarPlayers = await customDataQuery.Select(c => c.ObjectId).Distinct().ToListAsync(); // Check if Players satisfy CustomData constraints query = query.Where(p => similarPlayers.Contains(p.Id)); } IList<Player> players = await query.ToListAsync(); return GenericHelper.Shuffle(players, limit); }
public async Task<IActionResult> AddPlayer([FromBody] UserForm register) { if (!ModelState.IsValid) { return HttpResponseHelper.BadRequest(ModelState); } if (string.IsNullOrWhiteSpace(register.Username) && string.IsNullOrWhiteSpace(register.Email)) { return HttpResponseHelper.BadRequest("Either Username or Email is required."); } if (string.IsNullOrWhiteSpace(register.Password)) { return HttpResponseHelper.BadRequest("Password is required."); } var player = new Player(); if (!string.IsNullOrWhiteSpace(register.Username)) { if (await Player.ExistsUsername(_context, register.Username)) { return HttpResponseHelper.BadRequest("Player with this Username already exists."); } player.Username = register.Username; } if (!string.IsNullOrWhiteSpace(register.Email)) { if (await Player.ExistsEmail(_context, register.Email)) { return HttpResponseHelper.BadRequest("Player with this Email already exists."); } player.Email = register.Email; } player.Password = PasswordHelper.HashPassword(register.Password); _context.Players.Add(player); var error = await SaveChangesAsync(); if (error != null) { return error; } // Add or Update the CustomData error = await player.AddOrUpdateCustomData(_context, register.CustomData); if (error != null) { return error; } return CreatedAtRoute("GetPlayer", new { id = player.Id }, player); }