using HRServer.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting; namespace HRServer.Controllers { [ApiController] public class HorseController : ControllerBase { private readonly ILogger _logger; public HorseController(ILogger logger) { _logger = logger; } [HttpGet("/api/ping")] public IActionResult Ping() { return Ok("pong"); } [HttpDelete("/api/deleteHorse/{id}")] public IActionResult DeleteHorse(ulong id) { HorseFactory.DeleteHorse(id); HorseFactory.SaveHorsesToFile(); return Ok(); } [HttpGet("/api/getHorse/{id}")] public IActionResult GetHorse (int id) { var horse = HorseFactory.GetHorse((ulong)id); if (horse == null) { horse = new Horse(); } return Ok(horse); } [HttpGet("/api/getHorse/{id}/LoadState")] public IActionResult GetHorseLoadState (ulong id) { // Hole das Pferd aus der Factory var horse = HorseFactory.GetHorse((ulong)id); // Überprüfe, ob das Pferd existiert if (horse == null) { return Ok(new DataLoadState { AchievementsLoaded = false, AchievementsNeedsRefresh = false, SummaryLoaded = false, BasicInfoLoaded = false, GeneticsLoaded = false, HealthLoaded = false, TrainingLoaded = false }); } if (horse.LastDrawnDate.AddDays(1) < DateTime.Now) { horse.LoadState.AchievementsNeedsRefresh = true; } HorseFactory.SaveHorsesToFile(); // Gib den Ladezustand des Pferdes zurück return Ok(horse.LoadState); } [HttpPost("/api/updateHorse/{id}/BasicData")] public IActionResult UpdateHorseBasicData(ulong id, [FromBody] Horse websiteHorse) { var localHorse = HorseFactory.GetHorse(id); if (localHorse == null) { localHorse = new Horse { Id = id }; HorseFactory.AddOrUpdateHorse(localHorse); } if (websiteHorse.Owner == "Unknown") { localHorse.Breed = websiteHorse.Breed; localHorse.HorseName = websiteHorse.HorseName; localHorse.Link = websiteHorse.Link; localHorse.Gender = websiteHorse.Gender; localHorse.Notes = websiteHorse.Notes; return Ok(localHorse); } localHorse.Age = websiteHorse.Age; localHorse.Breed = websiteHorse.Breed; localHorse.HorseName = websiteHorse.HorseName; localHorse.Gender = websiteHorse.Gender; localHorse.Link = websiteHorse.Link; localHorse.Owner = websiteHorse.Owner; localHorse.Notes = websiteHorse.Notes; HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } [HttpPost("/api/updateHorse/{id}/Summary")] public IActionResult UpdateHorseSummary(ulong id, [FromBody] HorseSummary websiteHorseSummary) { var localHorse = HorseFactory.GetHorse(id); if (localHorse == null) { localHorse = new Horse { Id = id }; HorseFactory.AddOrUpdateHorse(localHorse); } localHorse.Summary = websiteHorseSummary; HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } [HttpPost("/api/updateHorse/{id}/Training")] public IActionResult UpdateHorseTraining(ulong id, [FromBody] HorseTraining websiteHorseTraining) { var localHorse = HorseFactory.GetHorse((ulong)id); if (localHorse == null) { localHorse = new Horse { Id = (ulong)id }; HorseFactory.AddOrUpdateHorse(localHorse); } localHorse.Training = websiteHorseTraining; HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } [HttpPost("/api/updateHorse/{id}/Health")] public IActionResult UpdateHorseHealth(ulong id, [FromBody] HorseHealth websiteHorseHealth) { var localHorse = HorseFactory.GetHorse((ulong)id); if (localHorse == null) { localHorse = new Horse { Id = (ulong)id }; HorseFactory.AddOrUpdateHorse(localHorse); } localHorse.Health = websiteHorseHealth; HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } [HttpGet("/api/getHorse/{id}/Colors")] public IActionResult GetHorseColors(ulong id) { var horse = HorseFactory.GetHorse(id); if (horse == null) { return Ok(new Dictionary()); } return Ok(horse.Genetics.Colors); } [HttpPost("/api/updateHorse/{id}/Genetics")] public IActionResult UpdateHorseGenetics(ulong id, [FromBody] HorseGenetics websiteHorseGenetics) { var localHorse = HorseFactory.GetHorse((ulong)id); if (localHorse == null) { localHorse = new Horse { Id = (ulong)id }; localHorse.Genetics = websiteHorseGenetics; HorseFactory.AddOrUpdateHorse(localHorse); } if (websiteHorseGenetics != null) { localHorse.Genetics.GP = websiteHorseGenetics.GP; localHorse.Genetics.Disciplines = websiteHorseGenetics.Disciplines; localHorse.Genetics.GeneticPotential = websiteHorseGenetics.GeneticPotential; foreach (var kvp in websiteHorseGenetics.Colors) { // Wert hinzufügen oder überschreiben localHorse.Genetics.Colors[kvp.Key] = kvp.Value; } if (!websiteHorseGenetics.Colors.ContainsKey("Custom")) { localHorse.Genetics.Colors["Custom"] = string.Empty; } localHorse.LoadState.GeneticsLoaded = true; } HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } [HttpGet("/api/getHorse/{id}/Notes")] public IActionResult GetHorseNotes(ulong id) { var horse = HorseFactory.GetHorse(id); if (horse == null) { return Ok(string.Empty); } return Ok(horse.Notes); } [HttpPost("/api/updateHorse/{id}/Achievements")] public IActionResult UpdateHorseAchievements(ulong id, [FromBody] HorseAchievements websiteHorseAchievements) { var localHorse = HorseFactory.GetHorse((ulong)id); if (localHorse == null) { localHorse = new Horse { Id = (ulong)id }; HorseFactory.AddOrUpdateHorse(localHorse); } if (websiteHorseAchievements.ShowResults.Count >= 1) { // MinShowResult sollte nicht kleiner als das momentane Maximum - 6.928 sein websiteHorseAchievements.MinShowResult = Math.Max( websiteHorseAchievements.MinShowResult, websiteHorseAchievements.MaxShowResult - 6.928 ); // MaxShowResult aktualisieren, wenn es größer ist als der lokale Wert websiteHorseAchievements.MaxShowResult = Math.Max( websiteHorseAchievements.MaxShowResult, localHorse.Achievements.MaxShowResult ); // MinShowResult aktualisieren, wenn ein gültiger Wert vorhanden ist und der lokale Wert kleiner ist if (websiteHorseAchievements.MinShowResult == -1 || localHorse.Achievements.MinShowResult == -1 || localHorse.Achievements.MinShowResult == 0 /*Workaround, MinShowResult wurde mit 0 initialisiert, nicht -1*/) { // MinShowResult ist automatisch der größere Wert, da -1 oder 0 nicht gültig sind websiteHorseAchievements.MinShowResult = Math.Max(websiteHorseAchievements.MinShowResult, localHorse.Achievements.MinShowResult); } else { // Beide Werte sind gültig, also wird der kleinere Wert genommen websiteHorseAchievements.MinShowResult = Math.Min( websiteHorseAchievements.MinShowResult, localHorse.Achievements.MinShowResult ); } } // MaxCompetitionResult aktualisieren, wenn es kleiner ist als der lokale Wert websiteHorseAchievements.MaxCompetitionResult = Math.Max( websiteHorseAchievements.MaxCompetitionResult, localHorse.Achievements.MaxCompetitionResult ); // MinCompetitionResult aktualisieren, wenn ein gültiger Wert vorhanden ist und der lokale Wert kleiner ist if (websiteHorseAchievements.MinCompetitionResult != -1) { websiteHorseAchievements.MinCompetitionResult = Math.Min( websiteHorseAchievements.MinCompetitionResult, localHorse.Achievements.MinCompetitionResult ); } localHorse.Achievements = websiteHorseAchievements; HorseFactory.SaveHorsesToFile(); return Ok(localHorse); } } }