Files
SkyArtShop/Controllers/AdminMenuController.cs
Local Server 703ab57984 Fix admin route access and backend configuration
- Added /admin redirect to login page in nginx config
- Fixed backend server.js route ordering for proper admin handling
- Updated authentication middleware and routes
- Added user management routes
- Configured PostgreSQL integration
- Updated environment configuration
2025-12-13 22:34:11 -06:00

188 lines
4.0 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SkyArtShop.Models;
using SkyArtShop.Services;
namespace SkyArtShop.Controllers;
[Route("admin/menu")]
[Authorize(Roles = "Admin,MasterAdmin")]
public class AdminMenuController : Controller
{
private readonly PostgreSQLService _pgService;
public AdminMenuController(PostgreSQLService pgService)
{
_pgService = pgService;
}
[HttpGet("")]
public async Task<IActionResult> Index()
{
return View((await _pgService.GetAllAsync<MenuItem>("MenuItems")).OrderBy((MenuItem m) => m.DisplayOrder).ToList());
}
[HttpPost("reseed")]
public async Task<IActionResult> ReseedMenu()
{
foreach (MenuItem item in await _pgService.GetAllAsync<MenuItem>("MenuItems"))
{
await _pgService.DeleteAsync<MenuItem>("MenuItems", item.Id);
}
MenuItem[] array = new MenuItem[10]
{
new MenuItem
{
Label = "Home",
Url = "/",
DisplayOrder = 1,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Shop",
Url = "/Shop",
DisplayOrder = 2,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Top Sellers",
Url = "/#top-sellers",
DisplayOrder = 3,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Promotion",
Url = "/#promotion",
DisplayOrder = 4,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Portfolio",
Url = "/Portfolio",
DisplayOrder = 5,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Blog",
Url = "/Blog",
DisplayOrder = 6,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "About",
Url = "/About",
DisplayOrder = 7,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "Instagram",
Url = "#instagram",
DisplayOrder = 8,
IsActive = true,
ShowInNavbar = false,
ShowInDropdown = true
},
new MenuItem
{
Label = "Contact",
Url = "/Contact",
DisplayOrder = 9,
IsActive = true,
ShowInNavbar = true,
ShowInDropdown = true
},
new MenuItem
{
Label = "My Wishlist",
Url = "#wishlist",
DisplayOrder = 10,
IsActive = true,
ShowInNavbar = false,
ShowInDropdown = true
}
};
MenuItem[] array2 = array;
foreach (MenuItem entity in array2)
{
await _pgService.InsertAsync("MenuItems", entity);
}
base.TempData["SuccessMessage"] = "Menu items reseeded successfully!";
return RedirectToAction("Index");
}
[HttpGet("create")]
public IActionResult Create()
{
return View(new MenuItem());
}
[HttpPost("create")]
public async Task<IActionResult> Create(MenuItem menuItem)
{
if (!base.ModelState.IsValid)
{
return View(menuItem);
}
menuItem.CreatedAt = DateTime.UtcNow;
await _pgService.InsertAsync("MenuItems", menuItem);
base.TempData["SuccessMessage"] = "Menu item created successfully!";
return RedirectToAction("Index");
}
[HttpGet("edit/{id}")]
public async Task<IActionResult> Edit(string id)
{
MenuItem menuItem = await _pgService.GetByIdAsync<MenuItem>("MenuItems", id);
if (menuItem == null)
{
return NotFound();
}
return View(menuItem);
}
[HttpPost("edit/{id}")]
public async Task<IActionResult> Edit(string id, MenuItem menuItem)
{
if (!base.ModelState.IsValid)
{
return View(menuItem);
}
menuItem.Id = id;
await _pgService.UpdateAsync("MenuItems", id, menuItem);
base.TempData["SuccessMessage"] = "Menu item updated successfully!";
return RedirectToAction("Index");
}
[HttpPost("delete/{id}")]
public async Task<IActionResult> Delete(string id)
{
await _pgService.DeleteAsync<MenuItem>("MenuItems", id);
base.TempData["SuccessMessage"] = "Menu item deleted successfully!";
return RedirectToAction("Index");
}
}