diff --git a/Aberwyn/Controllers/MealMenuApiController.cs b/Aberwyn/Controllers/MealMenuApiController.cs index 0f4abde..348d666 100644 --- a/Aberwyn/Controllers/MealMenuApiController.cs +++ b/Aberwyn/Controllers/MealMenuApiController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; +using System.Globalization; using System.Net.Http.Headers; using System.Text.Json; @@ -111,7 +112,71 @@ namespace Aberwyn.Controllers #region Skolmat [HttpGet("skolmat")] -public async Task GetSkolmat(int week, [FromQuery] string sensor = "sensor.engelbrektsskolan") + public async Task GetSkolmat(int week, [FromQuery] string sensor = "sensor.engelbrektsskolan") + { + var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3M2Q5ODIyYzU4ZWI0MjM4OWEyMGQ2MWQ2MWVhOWYzYyIsImlhdCI6MTc0OTE1MzY1MCwiZXhwIjoyMDY0NTEzNjUwfQ.8C_dKm7P1BbFVJKc_wT76YnQqiZxkP9EzrsLbfD0Ml8"; + var client = new HttpClient(); + client.BaseAddress = new Uri("https://ha.zcz.se"); + client.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Bearer", token); + + var res = await client.GetAsync($"/api/states/{sensor}"); + + if (!res.IsSuccessStatusCode) + return StatusCode((int)res.StatusCode, $"Kunde inte hämta data för {sensor}"); + + var json = await res.Content.ReadAsStringAsync(); + using var doc = JsonDocument.Parse(json); + + var attr = doc.RootElement.GetProperty("attributes"); + + if (!attr.TryGetProperty("calendar", out var calendar)) + return NotFound("Ingen kalender hittades i attributen"); + + var result = new List(); + var culture = CultureInfo.InvariantCulture; + var calendarSystem = culture.Calendar; + + foreach (var property in calendar.EnumerateObject()) + { + var dateString = property.Name; // t.ex 2026-02-09 + if (!DateTime.TryParse(dateString, out var date)) + continue; + + int weekNumber = calendarSystem.GetWeekOfYear( + date, + CalendarWeekRule.FirstFourDayWeek, + DayOfWeek.Monday); + + if (weekNumber != week) + continue; + + var dishes = property.Value.EnumerateArray() + .Select(x => x.GetProperty("dish").GetString()) + .ToList(); + + result.Add(new SchoolMealDto + { + Weekday = date.ToString("dddd", new CultureInfo("sv-SE")), + Date = date.ToString("yyyy-MM-dd"), + Courses = dishes + }); + + } + + if (!result.Any()) + return NotFound("Ingen skolmat för vecka " + week); + + return Ok(result.OrderBy(x => x.Date)); + } + public class SchoolMealDto + { + public string Weekday { get; set; } + public string Date { get; set; } + public List Courses { get; set; } + } + +public async Task GetSkolmatv0(int week, [FromQuery] string sensor = "sensor.engelbrektsskolan") { var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3M2Q5ODIyYzU4ZWI0MjM4OWEyMGQ2MWQ2MWVhOWYzYyIsImlhdCI6MTc0OTE1MzY1MCwiZXhwIjoyMDY0NTEzNjUwfQ.8C_dKm7P1BbFVJKc_wT76YnQqiZxkP9EzrsLbfD0Ml8"; var client = new HttpClient(); diff --git a/Aberwyn/Views/Home/Menu.cshtml b/Aberwyn/Views/Home/Menu.cshtml index 71f2857..60019dc 100644 --- a/Aberwyn/Views/Home/Menu.cshtml +++ b/Aberwyn/Views/Home/Menu.cshtml @@ -79,8 +79,8 @@
-
{{ day.weekday }}
-
{{ meal }}
+
{{ day.Weekday }}
+
{{ meal }}
diff --git a/Aberwyn/wwwroot/js/menu.js b/Aberwyn/wwwroot/js/menu.js index 2887eb1..fbea327 100644 --- a/Aberwyn/wwwroot/js/menu.js +++ b/Aberwyn/wwwroot/js/menu.js @@ -51,9 +51,9 @@ angular.module('mealMenuApp', ['ngSanitize']) $scope.schoolMealsBySchool = []; $scope.schoolSensors = [ - { name: "William – Engelbrektsskolan", entity: "sensor.engelbrektsskolan" }, - { name: "Louise - Nyeds skolan", entity: "sensor.nyedsskola" }, - { name: "Ludwig - Skogsgläntan", entity: "sensor.skogsglantan" } + { name: "William – Engelbrektsskolan", entity: "sensor.william_lunch" }, + { name: "Louise - Nyeds skolan", entity: "sensor.louise_lunch" }, + { name: "Ludwig - Skogsgläntan", entity: "sensor.ludwig_lunch" } ]; $scope.schoolMealsBySchool = [];