using System.Drawing; using System.Linq; using Nancy; using Sony.Filtr.AdminAPI.BusinessLogic; using Sony.Filtr.AdminAPI.ViewModels; using Sony.Filtr.Applications; using Sony.Filtr.Core.EditorialPlaylists; using Sony.Filtr.Core.Factory; namespace Sony.Filtr.AdminAPI.Modules.EditorialPlaylist { public class EditorialPlaylistImageModule : BaseModule { private readonly EditorialPlaylistViewModelHelper _editorialPlaylistViewModelHelper; public EditorialPlaylistImageModule(EditorialPlaylistBusinessLogic editorialPlaylistBusinessLogic, EditorialPlaylistManager editorialPlaylistManager, ImageFactory imageFactory, ApplicationInstanceManager applicationInstanceManager, EditorialPlaylistViewModelHelper editorialPlaylistViewModelHelper) : base(applicationInstanceManager) { _editorialPlaylistViewModelHelper = editorialPlaylistViewModelHelper; Get["GetPlaylistImage", "{countryCode}/EditorialPlaylist/{id}/image", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; var thumbnail = imageFactory.GetOriginal(playlist.ImageFileName); return Response.FromStream(thumbnail, "img/png"); }; Get["GetPlaylistImageThumbnail", "{countryCode}/EditorialPlaylist/{id}/image/thumbnail", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; var org = imageFactory.GetOriginal(playlist.ImageFileName); var thumbnail = imageFactory.ResizeImage(org, new Size(100, 200)); return Response.FromStream(thumbnail, "img/png"); }; Put["UploadPlaylistImage", "{countryCode}/EditorialPlaylist/{id}/image", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; if (!imageFactory.IsValidImageAndAllowedFormat(Request.Body)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; //TODO: Validation playlist = await editorialPlaylistBusinessLogic.SetImageAsync(playlist, Request.Body); var viewModel = await _editorialPlaylistViewModelHelper.GetExtendedPlaylistInfoAsync(playlist); return Response.AsJson(viewModel); }; Get["GetPlaylistHeaderImage", "{countryCode}/EditorialPlaylist/{id}/headerImage", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; var org = imageFactory.GetThumbnail(playlist.HeaderImageUrl); if (org == null) return HttpStatusCode.NotFound; return Response.FromStream(org, "img/png"); }; Get["GetPlaylistHeaderImageThumbnail", "{countryCode}/EditorialPlaylist/{id}/headerImage/thumbnail", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; var org = imageFactory.GetThumbnail(playlist.HeaderImageUrl); if (org == null) return HttpStatusCode.NotFound; var thumbnail = imageFactory.ResizeImage(org, new Size(300, 100)); return Response.FromStream(thumbnail, "img/png"); }; Put["UploadPlaylistHeaderImage", "{countryCode}/EditorialPlaylist/{id}/headerImage", true] = async (parameters,cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; if (!imageFactory.IsValidImageAndAllowedFormat(Request.Body)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; playlist = await editorialPlaylistBusinessLogic.SetHeaderImageAsync(playlist, Request.Body); var viewModel = await _editorialPlaylistViewModelHelper.GetExtendedPlaylistInfoAsync(playlist); return Response.AsJson(viewModel); }; Delete["DeletePlaylistHeaderImage", "{countryCode}/EditorialPlaylist/{id}/headerImage", true] = async (parameters, cx) => { int playlistId; if (!int.TryParse((string)parameters.id, out playlistId)) return HttpStatusCode.BadRequest; var playlist = await editorialPlaylistManager.GetEditorialPlaylistAsync(playlistId); if (playlist == null) return HttpStatusCode.NotFound; playlist = await editorialPlaylistBusinessLogic.RemoveHeaderImageAsync(playlist); var viewModel = await _editorialPlaylistViewModelHelper.GetExtendedPlaylistInfoAsync(playlist); return Response.AsJson(viewModel); }; } } }