using System.Collections.Generic; using System.Linq; using Nancy; using Nancy.ModelBinding; using Sony.Filtr.ContentManagement; using Sony.Filtr.ContentManagement.Data; using Sony.Filtr.Contracts.Abstractions; using Sony.Filtr.Contracts.Definitions; namespace Sony.Filtr.AdminAPI.Modules { public class ContentManagementModule : BaseModule { public ContentManagementModule(IApplicationInstanceManager applicationInstanceManager, ContentManager contentManager) : base(applicationInstanceManager) { Get["GetPages", "/content/{countryCode}/{service}/Pages/"] = parameters => { ServiceType service; if (!ServiceType.TryParse(parameters.service, true, out service)) return HttpStatusCode.NotFound; var pages = contentManager.GetPages(CurrentApplication, service); return Response.AsJson(pages); }; Get["GetPage", "/content/{countryCode}/{service}/Pages/{id}"] = parameters => { ServiceType service; if (!ServiceType.TryParse(parameters.service, true, out service)) return HttpStatusCode.NotFound; var pageId = (int)parameters.id; var page = contentManager.GetPage(pageId); return Response.AsJson(page); }; Put["UpdatePage", "/content/{countryCode}/{service}/Pages/{id}"] = parameters => { ServiceType service; if (!ServiceType.TryParse(parameters.service, true, out service)) return HttpStatusCode.NotFound; var pageId = (int)parameters.id; var existingPage = contentManager.GetPage(pageId); if (existingPage == null) return HttpStatusCode.NotFound; var contentPage = this.Bind(); contentPage.Id = existingPage.Id; contentPage = contentManager.SavePage(contentPage); return Response.AsJson(contentPage); }; Post["AddPage", "/content/{countryCode}/{service}/Pages"] = parameters => { ServiceType service; if (!ServiceType.TryParse(parameters.service, true, out service)) return HttpStatusCode.NotFound; var contentPage = this.Bind(); contentPage.ApplicationId = CurrentApplication.ID; contentPage.Service = service; if (contentPage.PageKey != null) { var existingPage = contentManager.GetPage(CurrentApplication, service, contentPage.PageKey); if (existingPage != null) return HttpStatusCode.BadRequest; } contentPage = contentManager.SavePage(contentPage); return Response.AsJson(contentPage); }; Delete["DeletePage", "/content/{countryCode}/{service}/Pages/{id}"] = parameters => { var pageId = (int)parameters.id; var page = contentManager.GetPage(pageId); if (page == null) return HttpStatusCode.NotFound; contentManager.RemovePage(page); return HttpStatusCode.NoContent; }; Put["SetPageBlocks", "/content/{countryCode}/{service}/Pages/{id}/blocks"] = parameters => { var pageId = (int)parameters.id; var existingPage = contentManager.GetPage(pageId); if (existingPage == null) return HttpStatusCode.NotFound; var pageBlockOrderPostObject = this.Bind(); contentManager.SetPageBlocks(existingPage, pageBlockOrderPostObject.Ids); var page = contentManager.GetPage(pageId); return Response.AsJson(page); }; Get["GetBlocks", "/content/{countryCode}/Blocks/"] = parameters => { var pages = contentManager.GetBlocks(CurrentApplication); return Response.AsJson(pages); }; Get["GetBlock", "/content/{countryCode}/Blocks/{id}"] = parameters => { var id = (int)parameters.id; var existingBlock = contentManager.GetBlock(id); if (existingBlock == null) return HttpStatusCode.NotFound; return Response.AsJson(existingBlock); }; Put["UpdateBlock", "/content/{countryCode}/Blocks/{id}"] = parameters => { var id = (int)parameters.id; var existingBlock = contentManager.GetBlock(id); if (existingBlock == null) return HttpStatusCode.NotFound; var contentBlock = this.Bind(); contentBlock.Id = existingBlock.Id; var page = contentManager.SaveBlock(contentBlock); return Response.AsJson(page); }; Post["AddBlock", "/content/{countryCode}/Blocks/"] = parameters => { var contentBlock = this.Bind("id"); contentBlock.Id = default(int); contentBlock.ApplicationId = CurrentApplication.ID; var page = contentManager.SaveBlock(contentBlock); return Response.AsJson(page); }; Delete["DeleteBlock", "/content/{countryCode}/Blocks/{id}"] = parameters => { var id = (int) parameters.id; var existingBlock = contentManager.GetBlock(id); if (existingBlock == null) return HttpStatusCode.NotFound; contentManager.RemoveBlock(existingBlock); return HttpStatusCode.NoContent; }; } public class PageBlockOrderPostObject { public List Ids { get; set; } } } }