using System.Linq; using Nancy; using Nancy.ModelBinding; using Sony.Filtr.Applications; using Sony.Filtr.Contracts.Entities.Genre; using Sony.Filtr.Core.Genres; namespace Sony.Filtr.AdminAPI.Modules.PublicData { public class TagModule : BaseModule { public TagModule(ApplicationInstanceManager applicationInstanceManager, GenreManager genreManager) : base(applicationInstanceManager) { Get["GetTags", "/{countryCode}/tags"] = parameters => { var genres = genreManager.GetGenres(CurrentApplication); return Response.AsJson(genres); }; Get["GetSingleTag", "/{countryCode}/tags/{genreName}"] = parameters => { var genreName = (string)parameters.GenreName; if (string.IsNullOrWhiteSpace(genreName)) return HttpStatusCode.BadRequest; var genre = genreManager.GetGenre(CurrentApplication, genreName); if (genre == null) return HttpStatusCode.NotFound; return Response.AsJson(genre); }; Put["UpdateTag", "/{countryCode}/tags/{genreName}"] = parameters => { var genreName = (string)parameters.GenreName; if (string.IsNullOrWhiteSpace(genreName)) return HttpStatusCode.BadRequest; var genre = this.Bind(); var app = CurrentApplication; //Dupe-check. There can only exist one genre for a specific name in a market. If one exists we treat this as an update. var existingGenre = genreManager.GetGenre(CurrentApplication, genreName); if (existingGenre != null) genre.ID = existingGenre.ID; genre.Name = genreName; genre.ApplicationID = app.ID; genre = genreManager.SaveGenre(genre); return Response.AsJson(genre); }; Delete["DeleteTag", "/{countryCode}/tags/{genreName}"] = parameters => { var genreName = (string)parameters.GenreName; var existingGenre = genreManager.GetGenre(CurrentApplication, genreName); if (existingGenre == null) return HttpStatusCode.NotFound; genreManager.DeleteGenre(existingGenre); return HttpStatusCode.NoContent; }; } } }