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.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.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<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();
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();

View File

@ -10,6 +10,7 @@ namespace ManagerService.DTOs
public List<TranslationDTO> 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; }

View File

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

View File

@ -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<GuidedPathDTO> guidedPaths { get; set; }
}
}

View File

@ -15,6 +15,8 @@ namespace Manager.DTOs
public List<CategorieDTO> categories { get; set; }
public string centerLatitude { 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

View File

@ -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,

View File

@ -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(),
};

View File

@ -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
},