diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs index 4f98a7a4b..68d92be78 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs @@ -78,6 +78,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents [BsonElement("vs")] public long Version { get; set; } + [BsonRequired] + [BsonElement("dl")] + public bool IsDeleted { get; set; } + [BsonRequired] [BsonElement("cb")] public RefToken CreatedBy { get; set; } diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs index 2500d6cc5..0319305bc 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs @@ -59,8 +59,14 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents Index .Ascending(x => x.SchemaId) .Ascending(x => x.Status) + .Ascending(x => x.IsDeleted) .Text(x => x.DataText)); + await collection.Indexes.CreateOneAsync( + Index + .Ascending(x => x.Id) + .Ascending(x => x.IsDeleted)); + await collection.Indexes.CreateOneAsync( Index .Ascending(x => x.Id) @@ -138,7 +144,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents public async Task FindContentAsync(IAppEntity app, ISchemaEntity schema, Guid id) { var contentEntity = - await Collection.Find(x => x.Id == id) + await Collection.Find(x => x.Id == id && !x.IsDeleted) .FirstOrDefaultAsync(); contentEntity?.ParseData(schema.SchemaDef); @@ -148,7 +154,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents public override async Task ClearAsync() { - await ArchiveCollection.DeleteManyAsync(new BsonDocument()); + await Database.DropCollectionAsync("States_Contents_Archive"); await base.ClearAsync(); } diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository_SnapshotStore.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository_SnapshotStore.cs index 7b9d0e0ca..c220e416e 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository_SnapshotStore.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository_SnapshotStore.cs @@ -53,6 +53,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents var document = SimpleMapper.Map(value, new MongoContentEntity { + IsDeleted = value.IsDeleted, DocumentId = key.ToString(), DataText = idData?.ToFullText(), DataByIds = idData, diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs index a4cc37627..606cd1a28 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs @@ -67,7 +67,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors var filters = new List> { Filter.Eq(x => x.SchemaId, schemaId), - Filter.In(x => x.Status, status) + Filter.In(x => x.Status, status), + Filter.Eq(x => x.IsDeleted, false) }; var filter = FilterBuilder.Build(query, schema); diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs index 9906054fa..b05f80515 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs @@ -84,9 +84,11 @@ namespace Squidex.Infrastructure.MongoDb return TaskHelper.Done; } - public virtual Task ClearAsync() + public virtual async Task ClearAsync() { - return Collection.DeleteManyAsync(new BsonDocument()); + await Database.DropCollectionAsync(CollectionName()); + + await SetupCollectionAsync(Collection); } public async Task DropCollectionIfExistsAsync()