using System.Text.Json; using LittleTown.Core; using LittleTown.Core.Ports; namespace LittleTown.StaticDataAcces; /// /// Implementation du getter de données static en fichier local /// public class StaticDataGetter : IStaticDataGetter { string _boardData = ""; string _buildingData = ""; string _objectivesData = ""; /// /// Constructeur avec les chemin des fichiers de données /// /// structure json definissant le plateau /// structure json definissant les building /// structure json definissant les objectifs public StaticDataGetter(string boardData, string buildingData, string objectivesData) { _boardData = boardData; _objectivesData = objectivesData; _buildingData = buildingData; } /// Constructeur avec les chemins par défaut public StaticDataGetter() { // Les fichiers JSON sont copiés dans le dossier de build via le .csproj // Ils sont donc toujours relatifs à l'exécutable var baseDirectory = AppContext.BaseDirectory; string boardPath = Path.Combine(baseDirectory, "Data", "Board1.json"); string buildingPath = Path.Combine(baseDirectory, "Data", "Buildings.json"); string objectivesPath = Path.Combine(baseDirectory, "Data", "Objectives.json"); ReadFiles(boardPath, buildingPath, objectivesPath); } private void ReadFiles(string boardPath, string buildingPath, string objectivesPath) { _boardData = File.ReadAllText(boardPath); _buildingData = File.ReadAllText(buildingPath); _objectivesData = File.ReadAllText(objectivesPath); } /// public Board GetBoard(int version) { Board board = JsonSerializer.Deserialize(_boardData) ?? throw new JsonException("Cannot deserialize Board"); return board; } public Task GetBoardAsync(int version) { return Task.FromResult(GetBoard(version)); } /// public ICollection GetBuildings() { List buildings = JsonSerializer.Deserialize>(_buildingData) ?? throw new JsonException("Cannot deserialize Buildings"); return buildings; } /// public ICollection GetObjectives() { List objectives = JsonSerializer.Deserialize>(_objectivesData) ?? throw new JsonException("Cannot deserialize Objectives"); return objectives; } }