From 210d38ceca243ba7ec3c8bb210af97289f07eed9 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 4 Oct 2022 14:33:53 +0200 Subject: [PATCH] Fix delivery of apps. --- .../Apps/MongoAppRepository.cs | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs index 07eea20f0..db10c7f1c 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs @@ -50,10 +50,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Apps using (Telemetry.Activities.StartActivity("MongoAppRepository/QueryAllAsync")) { var entities = - await Collection.Find(x => (x.IndexedUserIds.Contains(contributorId) || names.Contains(x.IndexedName)) && !x.IndexedDeleted) + await Collection.Find(x => (x.IndexedUserIds.Contains(contributorId) || names.Contains(x.IndexedName)) && !x.IndexedDeleted).SortBy(x => x.IndexedCreated) .ToListAsync(ct); - return entities.Select(x => (IAppEntity)x.Document).ToList(); + return RemoveDuplcateNames(entities); } } @@ -63,10 +63,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Apps using (Telemetry.Activities.StartActivity("MongoAppRepository/QueryAllAsync")) { var entities = - await Collection.Find(x => x.IndexedTeamId == teamId) + await Collection.Find(x => x.IndexedTeamId == teamId).SortBy(x => x.IndexedCreated) .ToListAsync(ct); - return entities.Select(x => (IAppEntity)x.Document).ToList(); + return RemoveDuplcateNames(entities); } } @@ -89,11 +89,24 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Apps using (Telemetry.Activities.StartActivity("MongoAppRepository/FindAsyncByName")) { var entity = - await Collection.Find(x => x.IndexedName == name && !x.IndexedDeleted) + await Collection.Find(x => x.IndexedName == name && !x.IndexedDeleted).SortByDescending(x => x.IndexedCreated) .FirstOrDefaultAsync(ct); return entity?.Document; } } + + private static List RemoveDuplcateNames(List entities) + { + var byName = new Dictionary(); + + // Remove duplicate names, the latest wins. + foreach (var entity in entities.OrderBy(x => x.IndexedCreated)) + { + byName[entity.IndexedName] = entity.Document; + } + + return byName.Values.ToList(); + } } }