OneConversorTemplate/OnlyOneAccessTemplate/Controllers/MenuController.cs
Ricardo Carneiro c25bf9dc94 feat: novo menu
2025-06-09 23:16:00 -03:00

75 lines
2.8 KiB
C#

using Microsoft.AspNetCore.Mvc;
using OnlyOneAccessTemplate.Models;
using OnlyOneAccessTemplate.Services;
namespace OnlyOneAccessTemplate.Controllers
{
[Route("api/menu")]
public class MenuController : ControllerBase
{
private readonly IModuleService _moduleService;
private readonly ILogger<MenuController> _logger;
public MenuController(IModuleService moduleService, ILogger<MenuController> logger)
{
_moduleService = moduleService;
_logger = logger;
}
[HttpGet("converters")]
public async Task<IActionResult> GetConvertersMenu(string language = "pt")
{
try
{
var modules = await _moduleService.GetAllActiveModulesAsync();
var menuItems = modules
.Where(m => m.ShowInMenu && m.IsActive)
.OrderBy(m => m.MenuOrder)
.ThenBy(m => m.MenuTitle)
.GroupBy(m => m.MenuCategory ?? "Conversores")
.Select(g => new
{
category = g.Key,
items = g.Select(m => new
{
moduleId = m.ModuleId,
title = GetLocalizedTitle(m, language),
description = GetLocalizedDescription(m, language),
icon = m.MenuIcon ?? "fas fa-exchange-alt",
url = $"/{language}/{m.RequestBy}",
order = m.MenuOrder,
isNew = m.CreatedAt > DateTime.UtcNow.AddDays(-7),
isHealthy = m.IsHealthy,
version = m.Version
}).ToList()
})
.OrderBy(g => g.category)
.ToList();
return Ok(new { success = true, menu = menuItems });
}
catch (Exception ex)
{
_logger.LogError(ex, "Erro ao buscar menu de conversores");
return StatusCode(500, new { success = false, message = ex.Message });
}
}
private string GetLocalizedTitle(ModuleConfig module, string language)
{
if (module.SeoTitles?.ContainsKey(language) == true)
return module.SeoTitles[language];
return module.MenuTitle ?? module.Name ?? "Conversor";
}
private string GetLocalizedDescription(ModuleConfig module, string language)
{
if (module.SeoDescriptions?.ContainsKey(language) == true)
return module.SeoDescriptions[language];
return module.MenuDescription ?? "Ferramenta de conversão";
}
}
}