HR-Collector/HRServer-Exporter/HRServer/Controllers/HorseController.cs
2024-12-31 16:35:06 +01:00

238 lines
9.7 KiB
C#

using HRServer.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
namespace HRServer.Controllers
{
[ApiController]
public class HorseController : ControllerBase
{
private readonly ILogger<HorseController> _logger;
public HorseController(ILogger<HorseController> 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<string, string>());
}
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);
}
}
}