From 3afab1be6b082d1ec7301258145f0a97052aa248 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Wed, 20 May 2026 15:14:17 +1000 Subject: [PATCH] =?UTF-8?q?v1.0.0:=20SlidesController=20=E2=80=94=20CRUD?= =?UTF-8?q?=20for=20Meows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/SlidesController.cs | 110 ++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Controllers/SlidesController.cs diff --git a/Controllers/SlidesController.cs b/Controllers/SlidesController.cs new file mode 100644 index 0000000..ec802f5 --- /dev/null +++ b/Controllers/SlidesController.cs @@ -0,0 +1,110 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using NoticeBoard.Data; +using NoticeBoard.Models; + +namespace NoticeBoard.Controllers; + +public class SlidesController : Controller +{ + private readonly AppDbContext _db; + + public SlidesController(AppDbContext db) + { + _db = db; + } + + public async Task Index() + { + var slides = await _db.Slides + .Include(s => s.DeviceSlides) + .ThenInclude(ds => ds.Device) + .OrderBy(s => s.Name) + .ToListAsync(); + return View(slides); + } + + public IActionResult Create() + { + return View(new Slide()); + } + + [HttpPost] + [ValidateAntiForgeryToken] + public async Task Create(Slide slide) + { + if (!ModelState.IsValid) + return View(slide); + + slide.CreatedAt = DateTime.UtcNow; + slide.UpdatedAt = DateTime.UtcNow; + _db.Slides.Add(slide); + await _db.SaveChangesAsync(); + + TempData["Success"] = $"Slide '{slide.Name}' created."; + return RedirectToAction(nameof(Index)); + } + + public async Task Edit(int id) + { + var slide = await _db.Slides.FindAsync(id); + if (slide == null) return NotFound(); + return View(slide); + } + + [HttpPost] + [ValidateAntiForgeryToken] + public async Task Edit(int id, Slide slide) + { + if (id != slide.Id) return NotFound(); + if (!ModelState.IsValid) return View(slide); + + var existing = await _db.Slides.FindAsync(id); + if (existing == null) return NotFound(); + + existing.Name = slide.Name; + existing.SlideType = slide.SlideType; + existing.Content = slide.Content; + existing.EmbedUrl = slide.EmbedUrl; + existing.IcsSource = slide.IcsSource; + existing.CustomCss = slide.CustomCss; + existing.BackgroundColor = slide.BackgroundColor; + existing.BackgroundImage = slide.BackgroundImage; + existing.UpdatedAt = DateTime.UtcNow; + + await _db.SaveChangesAsync(); + TempData["Success"] = $"Slide '{slide.Name}' updated."; + return RedirectToAction(nameof(Index)); + } + + public async Task Delete(int id) + { + var slide = await _db.Slides + .Include(s => s.DeviceSlides) + .ThenInclude(ds => ds.Device) + .FirstOrDefaultAsync(s => s.Id == id); + if (slide == null) return NotFound(); + return View(slide); + } + + [HttpPost, ActionName("Delete")] + [ValidateAntiForgeryToken] + public async Task DeleteConfirmed(int id) + { + var slide = await _db.Slides.FindAsync(id); + if (slide == null) return NotFound(); + + _db.Slides.Remove(slide); + await _db.SaveChangesAsync(); + + TempData["Success"] = $"Slide '{slide.Name}' deleted."; + return RedirectToAction(nameof(Index)); + } + + public async Task Preview(int id) + { + var slide = await _db.Slides.FindAsync(id); + if (slide == null) return NotFound(); + return View(slide); + } +}