From f17d72b34ec43a90957b2459c1047e3e036a7cb3 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Wed, 4 Mar 2026 16:36:13 +0100 Subject: [PATCH] Multiple fixs after help from ai --- .../Controllers/SectionMapController.cs | 47 ++++++++++++++++++- ManagerService/DTOs/GuidedPathDTO.cs | 1 + ManagerService/DTOs/SubSection/AgendaDTO.cs | 1 + ManagerService/DTOs/SubSection/GameDTO.cs | 1 + ManagerService/DTOs/SubSection/MapDTO.cs | 2 + ManagerService/Data/SubSection/GuidedStep.cs | 4 +- .../Data/SubSection/SectionAgenda.cs | 1 + ManagerService/Services/SectionFactory.cs | 6 ++- 8 files changed, 58 insertions(+), 5 deletions(-) diff --git a/ManagerService/Controllers/SectionMapController.cs b/ManagerService/Controllers/SectionMapController.cs index ec21d26..38d832d 100644 --- a/ManagerService/Controllers/SectionMapController.cs +++ b/ManagerService/Controllers/SectionMapController.cs @@ -393,6 +393,15 @@ namespace ManagerService.Controllers GuidedPath guidedPath = new GuidedPath().FromDTO(guidedPathDTO); guidedPath.Id = idService.GenerateHexId(); + guidedPath.SectionMapId = sectionMapId; + guidedPath.Steps = new List(); + foreach (var stepDTO in guidedPathDTO.steps ?? new List()) + { + GuidedStep step = new GuidedStep().FromDTO(stepDTO); + step.Id = idService.GenerateHexId(); + step.GuidedPathId = guidedPath.Id; + guidedPath.Steps.Add(step); + } _myInfoMateDbContext.GuidedPaths.Add(guidedPath); _myInfoMateDbContext.SaveChanges(); @@ -428,7 +437,9 @@ namespace ManagerService.Controllers if (guidedPathDTO == null) throw new ArgumentNullException("GuidedPath param is null"); - var existingGuidedPath = _myInfoMateDbContext.GuidedPaths.FirstOrDefault(gp => gp.Id == guidedPathDTO.id); + var existingGuidedPath = _myInfoMateDbContext.GuidedPaths + .Include(gp => gp.Steps) + .FirstOrDefault(gp => gp.Id == guidedPathDTO.id); if (existingGuidedPath == null) throw new KeyNotFoundException("GuidedPath does not exist"); @@ -442,9 +453,40 @@ namespace ManagerService.Controllers existingGuidedPath.HideNextStepsUntilComplete = guidedPathDTO.hideNextStepsUntilComplete; existingGuidedPath.Order = guidedPathDTO.order; + // Sync steps + var dtoStepIds = (guidedPathDTO.steps ?? new List()) + .Where(s => s.id != null) + .Select(s => s.id) + .ToHashSet(); + + // Delete removed steps + var stepsToRemove = existingGuidedPath.Steps + .Where(s => !dtoStepIds.Contains(s.Id)) + .ToList(); + foreach (var s in stepsToRemove) + existingGuidedPath.Steps.Remove(s); + + // Create or update steps + foreach (var stepDTO in guidedPathDTO.steps ?? new List()) + { + var existing = existingGuidedPath.Steps.FirstOrDefault(s => s.Id == stepDTO.id); + if (existing != null) + { + existing.FromDTO(stepDTO); + existing.GuidedPathId = existingGuidedPath.Id; + } + else + { + var newStep = new GuidedStep().FromDTO(stepDTO); + newStep.Id = idService.GenerateHexId(); + newStep.GuidedPathId = existingGuidedPath.Id; + existingGuidedPath.Steps.Add(newStep); + } + } + _myInfoMateDbContext.SaveChanges(); - return new OkObjectResult(existingGuidedPath); + return new OkObjectResult(existingGuidedPath.ToDTO()); } catch (ArgumentNullException ex) { @@ -559,6 +601,7 @@ namespace ManagerService.Controllers GuidedStep guidedStep = new GuidedStep().FromDTO(guidedStepDTO); guidedStep.Id = idService.GenerateHexId(); + guidedStep.GuidedPathId = guidedPathId; _myInfoMateDbContext.GuidedSteps.Add(guidedStep); _myInfoMateDbContext.SaveChanges(); diff --git a/ManagerService/DTOs/GuidedPathDTO.cs b/ManagerService/DTOs/GuidedPathDTO.cs index a408695..3764443 100644 --- a/ManagerService/DTOs/GuidedPathDTO.cs +++ b/ManagerService/DTOs/GuidedPathDTO.cs @@ -10,6 +10,7 @@ namespace ManagerService.DTOs public List description { get; set; } public string? sectionMapId { get; set; } public string? sectionEventId { get; set; } + public string? sectionGameId { get; set; } public bool isLinear { get; set; } public bool requireSuccessToAdvance { get; set; } public bool hideNextStepsUntilComplete { get; set; } diff --git a/ManagerService/DTOs/SubSection/AgendaDTO.cs b/ManagerService/DTOs/SubSection/AgendaDTO.cs index 10ba5cb..3e76b3d 100644 --- a/ManagerService/DTOs/SubSection/AgendaDTO.cs +++ b/ManagerService/DTOs/SubSection/AgendaDTO.cs @@ -5,6 +5,7 @@ namespace Manager.DTOs { public class AgendaDTO : SectionDTO { + public bool isOnlineAgenda { get; set; } public List resourceIds { get; set; } // All json files for all languages public MapProvider? agendaMapProvider { get; set; } // Default = Google public List events { get; set; } diff --git a/ManagerService/DTOs/SubSection/GameDTO.cs b/ManagerService/DTOs/SubSection/GameDTO.cs index 3e795ae..b4ffe3a 100644 --- a/ManagerService/DTOs/SubSection/GameDTO.cs +++ b/ManagerService/DTOs/SubSection/GameDTO.cs @@ -13,5 +13,6 @@ namespace Manager.DTOs public int rows { get; set; } = 3; public int cols { get; set; } = 3; public GameTypes gameType { get; set; } = GameTypes.Puzzle; + public List guidedPaths { get; set; } } } diff --git a/ManagerService/DTOs/SubSection/MapDTO.cs b/ManagerService/DTOs/SubSection/MapDTO.cs index e8e73d6..726fa2e 100644 --- a/ManagerService/DTOs/SubSection/MapDTO.cs +++ b/ManagerService/DTOs/SubSection/MapDTO.cs @@ -15,6 +15,8 @@ namespace Manager.DTOs public List categories { get; set; } public string centerLatitude { get; set; } // Center on public string centerLongitude { get; set; } // Center on + public bool isParcours { get; set; } + public List guidedPaths { get; set; } } public class GeoPointDTO diff --git a/ManagerService/Data/SubSection/GuidedStep.cs b/ManagerService/Data/SubSection/GuidedStep.cs index b35a158..6053e77 100644 --- a/ManagerService/Data/SubSection/GuidedStep.cs +++ b/ManagerService/Data/SubSection/GuidedStep.cs @@ -65,11 +65,11 @@ namespace ManagerService.Data.SubSection order = Order, title = Title, description = Description, - geometry = Geometry.ToDto(), + geometry = Geometry?.ToDto(), zoneRadiusMeters = ZoneRadiusMeters, imageUrl = ImageUrl, triggerGeoPointId = TriggerGeoPointId, - triggerGeoPoint = TriggerGeoPoint.ToDTO(), + triggerGeoPoint = TriggerGeoPoint?.ToDTO(), isHiddenInitially = IsHiddenInitially, isStepTimer = IsStepTimer, isStepLocked = IsStepLocked, diff --git a/ManagerService/Data/SubSection/SectionAgenda.cs b/ManagerService/Data/SubSection/SectionAgenda.cs index 2826492..45ea712 100644 --- a/ManagerService/Data/SubSection/SectionAgenda.cs +++ b/ManagerService/Data/SubSection/SectionAgenda.cs @@ -48,6 +48,7 @@ namespace ManagerService.Data.SubSection longitude = Longitude, meterZoneGPS = MeterZoneGPS, resourceIds = AgendaResourceIds, + isOnlineAgenda = IsOnlineAgenda, agendaMapProvider = AgendaMapProvider, events = EventAgendas.Select(e => e.ToDTO()).ToList(), }; diff --git a/ManagerService/Services/SectionFactory.cs b/ManagerService/Services/SectionFactory.cs index 0513e73..4366792 100644 --- a/ManagerService/Services/SectionFactory.cs +++ b/ManagerService/Services/SectionFactory.cs @@ -87,6 +87,7 @@ namespace ManagerService.Services Longitude = dto.longitude, MeterZoneGPS = dto.meterZoneGPS, Type = dto.type, + IsOnlineAgenda = agendaDTO.isOnlineAgenda, AgendaResourceIds = agendaDTO.resourceIds, AgendaMapProvider = agendaDTO.agendaMapProvider, //EventAgendas = // TODO specific @@ -239,7 +240,8 @@ namespace ManagerService.Services GameMessageFin = puzzleDTO.messageFin, GamePuzzleImageId = puzzleDTO.puzzleImageId, GamePuzzleRows = puzzleDTO.rows, - GamePuzzleCols = puzzleDTO.cols + GamePuzzleCols = puzzleDTO.cols, + GameType = puzzleDTO.gameType, }, SectionType.Quiz => new SectionQuiz { @@ -387,6 +389,7 @@ namespace ManagerService.Services longitude = agenda.Longitude, meterZoneGPS = agenda.MeterZoneGPS, type = agenda.Type, + isOnlineAgenda = agenda.IsOnlineAgenda, resourceIds = agenda.AgendaResourceIds, agendaMapProvider = agenda.AgendaMapProvider, // events => TODO specific @@ -540,6 +543,7 @@ namespace ManagerService.Services messageFin = game.GameMessageFin, puzzleImage = game.GamePuzzleImage?.ToDTO(), puzzleImageId = game.GamePuzzleImageId, + gameType = game.GameType, rows = game.GamePuzzleRows, cols = game.GamePuzzleCols },