75 lines
2.8 KiB
C#
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";
|
|
}
|
|
}
|
|
} |