From fa92395d1766a957d3a00ad74ddc9314ebac57ba Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Wed, 12 Aug 2026 17:46:37 +0200 Subject: [PATCH] D2 : exposer DateUpdate sur ResourceDTO pour le filtre incremental Le client ne pouvait pas savoir qu'une ressource avait change : il ne recevait que dateCreation. La colonne existait deja sur l'entite, elle n'etait simplement pas serialisee. Co-Authored-By: Claude Opus 5 --- .../Controllers/ResourceControllerTests.cs | 30 +++++++++++++++++++ ManagerService/DTOs/ResourceDTO.cs | 1 + ManagerService/Data/Resource.cs | 1 + 3 files changed, 32 insertions(+) diff --git a/ManagerService.Tests/Controllers/ResourceControllerTests.cs b/ManagerService.Tests/Controllers/ResourceControllerTests.cs index ad60373..d3014e7 100644 --- a/ManagerService.Tests/Controllers/ResourceControllerTests.cs +++ b/ManagerService.Tests/Controllers/ResourceControllerTests.cs @@ -124,6 +124,36 @@ namespace ManagerService.Tests.Controllers Assert.Equal("New Label", db.Resources.First().Label); } + // D2 : `dateUpdate` est le seul signal de fraîcheur dont dispose la visite hors + // ligne. S'il cessait d'être exposé, le device garderait indéfiniment ses fichiers + // périmés — sans erreur, sans trace. D'où ces deux tests plutôt qu'une relecture. + [Fact] + public void ToDTO_ExposesDateUpdate() + { + using var db = DbContextFactory.Create(); + db.Resources.Add(new Resource { Id = "r1", InstanceId = "inst-test", Label = "Img", Type = ResourceType.Image }); + db.SaveChanges(); + + var dto = db.Resources.First().ToDTO(); + + Assert.NotEqual(default, dto.dateUpdate); + Assert.Equal(db.Resources.First().DateUpdate, dto.dateUpdate); + } + + [Fact] + public void Update_AdvancesDateUpdate() + { + using var db = DbContextFactory.Create(); + db.Resources.Add(new Resource { Id = "r1", InstanceId = "inst-test", Label = "Old", Type = ResourceType.Image }); + db.SaveChanges(); + var before = db.Resources.First().DateUpdate; + + var result = BuildController(db).Update(new ResourceDTO { id = "r1", label = "New Label" }); + + var dto = Assert.IsType(result).Value as ResourceDTO; + Assert.True(dto.dateUpdate > before); + } + [Fact] public void Update_UnknownResource_Returns404() { diff --git a/ManagerService/DTOs/ResourceDTO.cs b/ManagerService/DTOs/ResourceDTO.cs index 55f71ee..cfa68ce 100644 --- a/ManagerService/DTOs/ResourceDTO.cs +++ b/ManagerService/DTOs/ResourceDTO.cs @@ -10,6 +10,7 @@ namespace ManagerService.DTOs public string label { get; set; } public string url { get; set; } // firebase url public DateTime dateCreation { get; set; } + public DateTime dateUpdate { get; set; } public string instanceId { get; set; } public long sizeBytes { get; set; } } diff --git a/ManagerService/Data/Resource.cs b/ManagerService/Data/Resource.cs index b08f291..011e782 100644 --- a/ManagerService/Data/Resource.cs +++ b/ManagerService/Data/Resource.cs @@ -75,6 +75,7 @@ namespace ManagerService.Data type = Type, url = Url, dateCreation = DateCreation, + dateUpdate = DateUpdate, instanceId = InstanceId, sizeBytes = SizeBytes };