Bladeren bron

Fixed track owner filtering with redundant field

Lukas Angerer 3 jaren geleden
bovenliggende
commit
2b7b9c754e

+ 1 - 1
docker-compose-local.yml

@@ -2,7 +2,7 @@ version: "3"
 
 services:
   runnersmeet:
-    image: executry/runners-meet
+    image: executry/runners-meet:latest
     ports:
       - 7443:443
       - 7080:80

+ 5 - 5
src/RunnersMeet.Server/Controllers/TracksController.cs

@@ -31,12 +31,12 @@ public class TracksController : ControllerBase
 	public ActionResult<ResultPage<Track>> GetTracks([FromQuery] int? page, [FromQuery] string? owner, [FromQuery] string? filter)
 	{
 		var query = _queryFactory.TracksQuery();
-		if (owner == "me")
-		{
-			query.ForOwner(User.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "<unknown>");
-		}
-		else if (owner != null)
+		if (owner != null)
 		{
+			if (owner == "me")
+			{
+				owner = User.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "<unknown>";
+			}
 			query.ForOwner(owner);
 		}
 

+ 5 - 0
src/RunnersMeet.Server/Domain/Track.cs

@@ -9,6 +9,11 @@ public class Track : IUserData
 	public ObjectId TrackId { get; set; } = ObjectId.Empty;
 	[BsonRef("users")]
 	public UserProfile Owner { get; set; } = new UserProfile();
+
+	/// <summary>
+	/// Redundant field <code>Owner.UserId</code> to simplify queries
+	/// </summary>
+	public string OwnerId { get; set; } = String.Empty;
 	public string FileHash { get; set; } = String.Empty;
 	public string DisplayName { get; set; } = String.Empty;
 	public double Distance { get; set; }

+ 1 - 0
src/RunnersMeet.Server/Persistence/CreateTrackCommand.cs

@@ -17,6 +17,7 @@ public class CreateTrackCommand
 		var track = new Track
 		{
 			Owner = owner,
+			OwnerId = owner.UserId,
 			FileHash = fileName.Hash,
 			DisplayName = gpxSummary.TrackName,
 			Distance = gpxSummary.Distance,

+ 1 - 1
src/RunnersMeet.Server/Persistence/Database.cs

@@ -17,7 +17,7 @@ public class Database : IDatabase
 
 		Tracks = _db.GetCollection<Track>("tracks")
 			.Include(t => t.Owner);
-		Tracks.EnsureIndex(t => t.Owner.UserId);
+		Tracks.EnsureIndex(t => t.OwnerId);
 		Tracks.EnsureIndex(t => t.FileHash);
 
 		Users = _db.GetCollection<UserProfile>("users");

+ 2 - 2
src/RunnersMeet.Server/Persistence/TracksQuery.cs

@@ -14,9 +14,9 @@ public class TracksQuery : ITracksQuery
 		_query = _database.Tracks.Query();
 	}
 
-	public TracksQuery ForOwner(string owner)
+	public TracksQuery ForOwner(string ownerId)
 	{
-		_query.Where(track => track.Owner.UserId == owner);
+		_query.Where(track => track.OwnerId == ownerId);
 		return this;
 	}