vgquotes/Src/VideoGameQuotes.Web/Controllers/SystemController.cs

76 lines
2.5 KiB
C#

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()));
}
}
}