From 79f18af7749ad1ecc3ba07cf91336fcbfe6384fa Mon Sep 17 00:00:00 2001 From: Carlos Castro Date: Wed, 31 Jul 2024 16:18:44 +0100 Subject: [PATCH] remove email from players on open APIs; --- rest_service/Controllers/PlayersController.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/rest_service/Controllers/PlayersController.cs b/rest_service/Controllers/PlayersController.cs index 6610c81..2aa79fb 100644 --- a/rest_service/Controllers/PlayersController.cs +++ b/rest_service/Controllers/PlayersController.cs @@ -1,4 +1,4 @@ -using System.Xml.Linq; +using System.Xml.Linq; using Microsoft.AspNetCore.Mvc; using MongoDB.Bson; using MongoDB.Bson.Serialization; @@ -47,23 +47,33 @@ public async Task> GetPlayers([FromQuery] PlayerRequest pla if (!string.IsNullOrEmpty(playerRequest.Id)) filter &= Builders.Filter.Eq("Id", playerRequest.Id); + // Projection to only include Name and Age fields + var projection = Builders.Projection + .Exclude("Email"); + // If Name but no Location, then get Location from players_unique if (!string.IsNullOrEmpty(playerRequest.Name) && string.IsNullOrEmpty(playerRequest.Location)) { + + // Projection to only include Name and Age fields + var projectionUnique = Builders.Projection + .Exclude("Email"); + var playerUnique = _playersUniqueCollection .Find(Builders .Filter.Eq(x => x.Name, playerRequest.Name)) + .Project(projectionUnique) .FirstOrDefault(); if (playerUnique != null) filter &= Builders.Filter.Eq(x => x.Location, playerUnique.Location); } - var players = await _playersCollection.FindAsync(filter, new FindOptions() { Limit = 10 }); + var players = await _playersCollection.FindAsync(filter, new FindOptions() { Limit = 10, Projection = projection }); var playersResponse = players.ToList().Select(player => new PlayerResponse(player)).ToList(); - + return playersResponse; } @@ -156,7 +166,7 @@ public async Task> CreatePlayer(PlayerRequest playe try { await _playersCollection.InsertOneAsync(session, player); - + await _playersUniqueCollection.InsertOneAsync(session, playerUnique); if (session.IsInTransaction) @@ -205,7 +215,8 @@ public async Task> PlayerAutoComplete([FromQuery] string Name) return arrMatches.GetElement("matches").Value.AsBsonArray .Select(x => x.ToString()) .ToList(); - } catch (Exception e) + } + catch (Exception e) { Logger.LogError("GetPlayerAutoComplete did not find matches"); Logger.LogError(e.Message); @@ -307,6 +318,11 @@ public async Task> PlayerSearch([FromQuery] PlayerRequest p } } } + }), + new BsonDocument("$project", new BsonDocument + { + { "Email", 0 }, + }) } },