Multiple fixs after help from ai

This commit is contained in:
Thomas Fransolet 2026-03-04 16:36:13 +01:00
parent 98f3606887
commit f17d72b34e
8 changed files with 58 additions and 5 deletions

View File

@ -393,6 +393,15 @@ namespace ManagerService.Controllers
GuidedPath guidedPath = new GuidedPath().FromDTO(guidedPathDTO); GuidedPath guidedPath = new GuidedPath().FromDTO(guidedPathDTO);
guidedPath.Id = idService.GenerateHexId(); guidedPath.Id = idService.GenerateHexId();
guidedPath.SectionMapId = sectionMapId;
guidedPath.Steps = new List<GuidedStep>();
foreach (var stepDTO in guidedPathDTO.steps ?? new List<GuidedStepDTO>())
{
GuidedStep step = new GuidedStep().FromDTO(stepDTO);
step.Id = idService.GenerateHexId();
step.GuidedPathId = guidedPath.Id;
guidedPath.Steps.Add(step);
}
_myInfoMateDbContext.GuidedPaths.Add(guidedPath); _myInfoMateDbContext.GuidedPaths.Add(guidedPath);
_myInfoMateDbContext.SaveChanges(); _myInfoMateDbContext.SaveChanges();
@ -428,7 +437,9 @@ namespace ManagerService.Controllers
if (guidedPathDTO == null) if (guidedPathDTO == null)
throw new ArgumentNullException("GuidedPath param is 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) if (existingGuidedPath == null)
throw new KeyNotFoundException("GuidedPath does not exist"); throw new KeyNotFoundException("GuidedPath does not exist");
@ -442,9 +453,40 @@ namespace ManagerService.Controllers
existingGuidedPath.HideNextStepsUntilComplete = guidedPathDTO.hideNextStepsUntilComplete; existingGuidedPath.HideNextStepsUntilComplete = guidedPathDTO.hideNextStepsUntilComplete;
existingGuidedPath.Order = guidedPathDTO.order; existingGuidedPath.Order = guidedPathDTO.order;
// Sync steps
var dtoStepIds = (guidedPathDTO.steps ?? new List<GuidedStepDTO>())
.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<GuidedStepDTO>())
{
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(); _myInfoMateDbContext.SaveChanges();
return new OkObjectResult(existingGuidedPath); return new OkObjectResult(existingGuidedPath.ToDTO());
} }
catch (ArgumentNullException ex) catch (ArgumentNullException ex)
{ {
@ -559,6 +601,7 @@ namespace ManagerService.Controllers
GuidedStep guidedStep = new GuidedStep().FromDTO(guidedStepDTO); GuidedStep guidedStep = new GuidedStep().FromDTO(guidedStepDTO);
guidedStep.Id = idService.GenerateHexId(); guidedStep.Id = idService.GenerateHexId();
guidedStep.GuidedPathId = guidedPathId;
_myInfoMateDbContext.GuidedSteps.Add(guidedStep); _myInfoMateDbContext.GuidedSteps.Add(guidedStep);
_myInfoMateDbContext.SaveChanges(); _myInfoMateDbContext.SaveChanges();

View File

@ -10,6 +10,7 @@ namespace ManagerService.DTOs
public List<TranslationDTO> description { get; set; } public List<TranslationDTO> description { get; set; }
public string? sectionMapId { get; set; } public string? sectionMapId { get; set; }
public string? sectionEventId { get; set; } public string? sectionEventId { get; set; }
public string? sectionGameId { get; set; }
public bool isLinear { get; set; } public bool isLinear { get; set; }
public bool requireSuccessToAdvance { get; set; } public bool requireSuccessToAdvance { get; set; }
public bool hideNextStepsUntilComplete { get; set; } public bool hideNextStepsUntilComplete { get; set; }

View File

@ -5,6 +5,7 @@ namespace Manager.DTOs
{ {
public class AgendaDTO : SectionDTO public class AgendaDTO : SectionDTO
{ {
public bool isOnlineAgenda { get; set; }
public List<TranslationDTO> resourceIds { get; set; } // All json files for all languages public List<TranslationDTO> resourceIds { get; set; } // All json files for all languages
public MapProvider? agendaMapProvider { get; set; } // Default = Google public MapProvider? agendaMapProvider { get; set; } // Default = Google
public List<EventAgendaDTO> events { get; set; } public List<EventAgendaDTO> events { get; set; }

View File

@ -13,5 +13,6 @@ namespace Manager.DTOs
public int rows { get; set; } = 3; public int rows { get; set; } = 3;
public int cols { get; set; } = 3; public int cols { get; set; } = 3;
public GameTypes gameType { get; set; } = GameTypes.Puzzle; public GameTypes gameType { get; set; } = GameTypes.Puzzle;
public List<GuidedPathDTO> guidedPaths { get; set; }
} }
} }

View File

@ -15,6 +15,8 @@ namespace Manager.DTOs
public List<CategorieDTO> categories { get; set; } public List<CategorieDTO> categories { get; set; }
public string centerLatitude { get; set; } // Center on public string centerLatitude { get; set; } // Center on
public string centerLongitude { get; set; } // Center on public string centerLongitude { get; set; } // Center on
public bool isParcours { get; set; }
public List<GuidedPathDTO> guidedPaths { get; set; }
} }
public class GeoPointDTO public class GeoPointDTO

View File

@ -65,11 +65,11 @@ namespace ManagerService.Data.SubSection
order = Order, order = Order,
title = Title, title = Title,
description = Description, description = Description,
geometry = Geometry.ToDto(), geometry = Geometry?.ToDto(),
zoneRadiusMeters = ZoneRadiusMeters, zoneRadiusMeters = ZoneRadiusMeters,
imageUrl = ImageUrl, imageUrl = ImageUrl,
triggerGeoPointId = TriggerGeoPointId, triggerGeoPointId = TriggerGeoPointId,
triggerGeoPoint = TriggerGeoPoint.ToDTO(), triggerGeoPoint = TriggerGeoPoint?.ToDTO(),
isHiddenInitially = IsHiddenInitially, isHiddenInitially = IsHiddenInitially,
isStepTimer = IsStepTimer, isStepTimer = IsStepTimer,
isStepLocked = IsStepLocked, isStepLocked = IsStepLocked,

View File

@ -48,6 +48,7 @@ namespace ManagerService.Data.SubSection
longitude = Longitude, longitude = Longitude,
meterZoneGPS = MeterZoneGPS, meterZoneGPS = MeterZoneGPS,
resourceIds = AgendaResourceIds, resourceIds = AgendaResourceIds,
isOnlineAgenda = IsOnlineAgenda,
agendaMapProvider = AgendaMapProvider, agendaMapProvider = AgendaMapProvider,
events = EventAgendas.Select(e => e.ToDTO()).ToList(), events = EventAgendas.Select(e => e.ToDTO()).ToList(),
}; };

View File

@ -87,6 +87,7 @@ namespace ManagerService.Services
Longitude = dto.longitude, Longitude = dto.longitude,
MeterZoneGPS = dto.meterZoneGPS, MeterZoneGPS = dto.meterZoneGPS,
Type = dto.type, Type = dto.type,
IsOnlineAgenda = agendaDTO.isOnlineAgenda,
AgendaResourceIds = agendaDTO.resourceIds, AgendaResourceIds = agendaDTO.resourceIds,
AgendaMapProvider = agendaDTO.agendaMapProvider, AgendaMapProvider = agendaDTO.agendaMapProvider,
//EventAgendas = // TODO specific //EventAgendas = // TODO specific
@ -239,7 +240,8 @@ namespace ManagerService.Services
GameMessageFin = puzzleDTO.messageFin, GameMessageFin = puzzleDTO.messageFin,
GamePuzzleImageId = puzzleDTO.puzzleImageId, GamePuzzleImageId = puzzleDTO.puzzleImageId,
GamePuzzleRows = puzzleDTO.rows, GamePuzzleRows = puzzleDTO.rows,
GamePuzzleCols = puzzleDTO.cols GamePuzzleCols = puzzleDTO.cols,
GameType = puzzleDTO.gameType,
}, },
SectionType.Quiz => new SectionQuiz SectionType.Quiz => new SectionQuiz
{ {
@ -387,6 +389,7 @@ namespace ManagerService.Services
longitude = agenda.Longitude, longitude = agenda.Longitude,
meterZoneGPS = agenda.MeterZoneGPS, meterZoneGPS = agenda.MeterZoneGPS,
type = agenda.Type, type = agenda.Type,
isOnlineAgenda = agenda.IsOnlineAgenda,
resourceIds = agenda.AgendaResourceIds, resourceIds = agenda.AgendaResourceIds,
agendaMapProvider = agenda.AgendaMapProvider, agendaMapProvider = agenda.AgendaMapProvider,
// events => TODO specific // events => TODO specific
@ -540,6 +543,7 @@ namespace ManagerService.Services
messageFin = game.GameMessageFin, messageFin = game.GameMessageFin,
puzzleImage = game.GamePuzzleImage?.ToDTO(), puzzleImage = game.GamePuzzleImage?.ToDTO(),
puzzleImageId = game.GamePuzzleImageId, puzzleImageId = game.GamePuzzleImageId,
gameType = game.GameType,
rows = game.GamePuzzleRows, rows = game.GamePuzzleRows,
cols = game.GamePuzzleCols cols = game.GamePuzzleCols
}, },