Skip to content

Commit 5640daf

Browse files
sitereactornul800sebastiaan
authored andcommitted
Fixes U4-2752 ContentService.DeleteVersion and DeleteVersions fail
Signed-off-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
1 parent a1cae3f commit 5640daf

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,31 @@ public override IContent GetByVersion(Guid versionId)
170170
return content;
171171
}
172172

173+
public override void DeleteVersion(Guid versionId)
174+
{
175+
var sql = new Sql()
176+
.Select("*")
177+
.From<DocumentDto>()
178+
.InnerJoin<ContentVersionDto>().On<ContentVersionDto, DocumentDto>(left => left.VersionId, right => right.VersionId)
179+
.Where<ContentVersionDto>(x => x.VersionId == versionId)
180+
.Where<DocumentDto>(x => x.Newest == true);
181+
var dto = Database.Fetch<DocumentDto, ContentVersionDto>(sql).FirstOrDefault();
182+
183+
if(dto == null) return;
184+
185+
using (var transaction = Database.GetTransaction())
186+
{
187+
PerformDeleteVersion(dto.NodeId, versionId);
188+
189+
transaction.Complete();
190+
}
191+
}
192+
173193
protected override void PerformDeleteVersion(int id, Guid versionId)
174194
{
175195
Database.Delete<PreviewXmlDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
176-
Database.Delete<PropertyDataDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
177-
Database.Delete<ContentVersionDto>("WHERE nodeId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
196+
Database.Delete<PropertyDataDto>("WHERE contentNodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
197+
Database.Delete<ContentVersionDto>("WHERE ContentId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
178198
Database.Delete<DocumentDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
179199
}
180200

src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ public override IMedia GetByVersion(Guid versionId)
176176
protected override void PerformDeleteVersion(int id, Guid versionId)
177177
{
178178
Database.Delete<PreviewXmlDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
179-
Database.Delete<PropertyDataDto>("WHERE nodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
180-
Database.Delete<ContentVersionDto>("WHERE nodeId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
179+
Database.Delete<PropertyDataDto>("WHERE contentNodeId = @Id AND versionId = @VersionId", new { Id = id, VersionId = versionId });
180+
Database.Delete<ContentVersionDto>("WHERE ContentId = @Id AND VersionId = @VersionId", new { Id = id, VersionId = versionId });
181181
}
182182

183183
#endregion

src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public virtual IEnumerable<TEntity> GetAllVersions(int id)
4343

4444
public virtual void DeleteVersion(Guid versionId)
4545
{
46-
var dto = Database.FirstOrDefault<ContentVersionDto>("WHERE versionId = @VersionId AND newest = @Newest", new { VersionId = versionId, Newest = false });
47-
Mandate.That<Exception>(dto != null);
46+
var dto = Database.FirstOrDefault<ContentVersionDto>("WHERE versionId = @VersionId", new { VersionId = versionId });
47+
if(dto == null) return;
4848

4949
using (var transaction = Database.GetTransaction())
5050
{
@@ -56,8 +56,8 @@ public virtual void DeleteVersion(Guid versionId)
5656

5757
public virtual void DeleteVersions(int id, DateTime versionDate)
5858
{
59-
var list = Database.Fetch<ContentVersionDto>("WHERE nodeId = @Id AND VersionDate < @VersionDate", new { Id = id, VersionDate = versionDate });
60-
Mandate.That<Exception>(list.Any());
59+
var list = Database.Fetch<ContentVersionDto>("WHERE ContentId = @Id AND VersionDate < @VersionDate", new { Id = id, VersionDate = versionDate });
60+
if (list.Any() == false) return;
6161

6262
using (var transaction = Database.GetTransaction())
6363
{

src/Umbraco.Tests/Services/ContentServiceTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,22 @@ public void Can_Verify_Property_Types_On_Content()
861861
Assert.That(sut.GetValue<string>("imgCropper"), Is.Empty);
862862
}
863863

864+
[Test]
865+
public void Can_Delete_Previous_Versions_Not_Latest()
866+
{
867+
// Arrange
868+
var contentService = ServiceContext.ContentService;
869+
var content = contentService.GetById(1049);
870+
var version = content.Version;
871+
872+
// Act
873+
contentService.DeleteVersion(1049, version, true, 0);
874+
var sut = contentService.GetById(1049);
875+
876+
// Assert
877+
Assert.That(sut.Version, Is.EqualTo(version));
878+
}
879+
864880
private IEnumerable<IContent> CreateContentHierarchy()
865881
{
866882
var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage");

0 commit comments

Comments
 (0)