using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using Portoa.Persistence; using Portoa.Util; using Portoa.Web.Controllers; using VideoGameQuotes.Api; using VideoGameQuotes.Web.Models; using VideoGameQuotes.Web.Security; using VideoGameQuotes.Web.Services; namespace VideoGameQuotes.Web.Controllers { public class SystemController : Controller { private readonly ISystemService systemService; public SystemController(ISystemService systemService) { this.systemService = systemService; } [HttpPost, VerifyUser(Group = UserGroup.Admin)] public JsonResult Delete(int id) { if (id < 1) { return Json(this.CreateJsonResponse("Invalid ID")); } try { var system = systemService.FindById(id); var games = systemService.GetGamesForSystem(system); if (games.Any()) { return Json(this.CreateJsonErrorResponse( string.Format("The following games are still using this system: {0}", games.Implode(game => game.Name, ", ")) )); } } catch (EntityNotFoundException) { return Json(this.CreateJsonErrorResponse("No system exists for ID " + id)); } systemService.Delete(id); return Json(this.CreateJsonResponse()); } [HttpPost, VerifyUser(Group = UserGroup.Admin)] public JsonResult Edit(EditSystemModel model) { if (model.SystemId < 1) { ModelState.AddModelError("SystemId", "Invalid system ID"); } if (!ModelState.IsValid) { return Json(this.CreateJsonErrorResponse("Some errors occurred")); } var system = systemService.FindById(model.SystemId); system.Name = model.SystemName; system.Abbreviation = model.SystemAbbreviation; system.ReleaseDate = model.SystemReleaseDate; system = systemService.Save(system); return Json(this.CreateJsonResponse(data: system.ToDto())); } [HttpPost, VerifyUser] public ActionResult Create(EditSystemModel model) { if (!ModelState.IsValid) { return Json(this.CreateJsonErrorResponse("Some errors occurred")); } if (systemService.FindByNameOrAbbreviation(model.SystemName, model.SystemAbbreviation).Any()) { return Json(this.CreateJsonResponse("A system with that name or abbreviation already exists.")); } var system = systemService.Save(new GamingSystem { Abbreviation = model.SystemAbbreviation, Name = model.SystemName, ReleaseDate = model.SystemReleaseDate }); return Json(this.CreateJsonResponse(data: system.ToDto())); } } }