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/blog")] [Authorize(Roles = "Admin,MasterAdmin")] public class AdminBlogController : Controller { private readonly PostgreSQLService _pgService; private readonly SlugService _slugService; private readonly string _blogCollection = "BlogPosts"; public AdminBlogController(PostgreSQLService pgService, SlugService slugService) { _pgService = pgService; _slugService = slugService; } [HttpGet("")] public async Task Index() { return View((await _pgService.GetAllAsync(_blogCollection)).OrderByDescending((BlogPost p) => p.CreatedAt).ToList()); } [HttpGet("create")] public IActionResult Create() { return View(new BlogPost()); } [HttpPost("create")] public async Task Create(BlogPost post) { if (!base.ModelState.IsValid) { return View(post); } post.CreatedAt = DateTime.UtcNow; post.UpdatedAt = DateTime.UtcNow; post.PublishedDate = DateTime.UtcNow; post.Slug = _slugService.GenerateSlug(post.Title); await _pgService.InsertAsync(_blogCollection, post); base.TempData["SuccessMessage"] = "Blog post created successfully!"; return RedirectToAction("Index"); } [HttpGet("edit/{id}")] public async Task Edit(string id) { BlogPost blogPost = await _pgService.GetByIdAsync(_blogCollection, id); if (blogPost == null) { return NotFound(); } return View(blogPost); } [HttpPost("edit/{id}")] public async Task Edit(string id, BlogPost post) { if (!base.ModelState.IsValid) { return View(post); } post.Id = id; post.UpdatedAt = DateTime.UtcNow; post.Slug = _slugService.GenerateSlug(post.Title); await _pgService.UpdateAsync(_blogCollection, id, post); base.TempData["SuccessMessage"] = "Blog post updated successfully!"; return RedirectToAction("Index"); } [HttpPost("delete/{id}")] public async Task Delete(string id) { await _pgService.DeleteAsync(_blogCollection, id); base.TempData["SuccessMessage"] = "Blog post deleted successfully!"; return RedirectToAction("Index"); } private string GenerateSlug(string text) { return _slugService.GenerateSlug(text); } }