Files
Aberwyn/Aberwyn/Controllers/MealMenuApiController.cs
Tai 57bea7b54c
Some checks failed
continuous-integration/drone/push Build is failing
Meal updates
2025-06-11 13:06:08 +02:00

112 lines
3.7 KiB
C#

// MealMenuApiController.cs
using Aberwyn.Models;
using Aberwyn.Data;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using System.Net.Http.Headers;
using System.Text.Json;
namespace Aberwyn.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class MealMenuApiController : ControllerBase
{
private readonly MenuService _menuService;
public MealMenuApiController(MenuService menuService, IConfiguration configuration, IHostEnvironment env)
{
_menuService = menuService;
}
[HttpGet("menu")]
public IActionResult GetMenu(int weekNumber, int year)
{
var menu = _menuService.GetWeeklyMenu(weekNumber, year);
return Ok(menu ?? new List<WeeklyMenu>());
}
[HttpGet("getMeals")]
public IActionResult GetMeals()
{
var meals = _menuService.GetMealsSlim(true);
var mealDtos = meals.Select(m => MealDto.FromMeal(m, includeThumbnail: true)).ToList(); // 👈 fix
return Ok(mealDtos);
}
[HttpGet("getWeeklyMenu")]
public IActionResult GetWeeklyMenu(int weekNumber, int year)
{
var menuDtos = _menuService.GetWeeklyMenuDto(weekNumber, year);
Console.WriteLine("Hämtar meals: " + menuDtos);
return Ok(menuDtos);
}
[HttpPut("menu")]
public IActionResult SaveMenu([FromBody] MenuViewModel weeklyMenu)
{
_menuService.UpdateWeeklyMenu(weeklyMenu);
return Ok("Menu saved successfully");
}
[HttpPost("addMeal")]
public IActionResult AddMeal([FromBody] Meal meal)
{
if (meal == null || string.IsNullOrWhiteSpace(meal.Name))
return BadRequest("Meal Name is required.");
// Använd AddMeal som returnerar det nya ID:t
var mealId = _menuService.AddMeal(meal);
if (mealId > 0)
return Ok(new { Message = "Meal added successfully", MealId = mealId });
return StatusCode(500, "Failed to add meal.");
}
#region Skolmat
[HttpGet("skolmat")]
public async Task<IActionResult> GetSkolmat(int week, [FromQuery] string sensor = "sensor.engelbrektsskolan")
{
var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3M2Q5ODIyYzU4ZWI0MjM4OWEyMGQ2MWQ2MWVhOWYzYyIsImlhdCI6MTc0OTE1MzY1MCwiZXhwIjoyMDY0NTEzNjUwfQ.8C_dKm7P1BbFVJKc_wT76YnQqiZxkP9EzrsLbfD0Ml8";
var client = new HttpClient();
client.BaseAddress = new Uri("http://192.168.1.196:8123/");
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();
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");
if (!calendar.TryGetProperty(week.ToString(), out var weekData))
return NotFound("Ingen skolmat för vecka " + week);
var result = new List<object>();
foreach (var day in weekData.EnumerateArray())
{
var weekday = day.GetProperty("weekday").GetString();
var date = day.GetProperty("date").GetString();
var courses = day.GetProperty("courses").EnumerateArray().Select(c => c.GetString()).ToList();
result.Add(new { weekday, date, courses });
}
return Ok(result);
}
#endregion
}
}