using System; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using Nancy; using Nancy.ModelBinding; using Sony.Filtr.Contracts.Abstractions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.Factory; using Sony.Filtr.Core.ImageCarousel; namespace Sony.Filtr.AdminAPI.Modules.PublicData { public class CarouselImagesModule : BaseModule { public CarouselImagesModule(IApplicationInstanceManager applicationInstanceManager, ImageCarouselManager imageCarouselManager, ImageFactory imageFactory) : base(applicationInstanceManager) { Get["GetCarouselImages", "/{countryCode}/CarouselImages", true] = async (parameters, cancellationToken) => { var images = imageCarouselManager.GetImages(CurrentApplication); return Response.AsJson(images); }; Get["GetSingleCarouselImage", "/{countryCode}/CarouselImages/{imageId}", true] = async (parameters, cancellationToken) => { var imageId = (int) parameters.imageId; var image = imageCarouselManager.GetImage(imageId); if (image == null) return HttpStatusCode.NotFound; return Response.AsJson(image); }; Post["AddCarouselImage", "/{countryCode}/CarouselImages/", true] = async (parameters, cancellationToken) => { var image = this.Bind(); image.ApplicationId = CurrentApplication.ID; imageCarouselManager.SaveImage(image); return Response.AsJson(image); }; Put["UpdateCarouselImage", "/{countryCode}/CarouselImages/{imageId}", true] = async (parameters, cancellationToken) => { var imageId = (int)parameters.imageId; var existingImage = imageCarouselManager.GetImage(imageId); if (existingImage == null) return HttpStatusCode.NotFound; if (existingImage.ApplicationId != CurrentApplication.ID) return HttpStatusCode.BadRequest; var image = this.Bind("originalImageUrl", "mediumImageUrl", "smallImageUrl"); image.Id = imageId; image.ApplicationId = CurrentApplication.ID; image.OriginalImageUrl = existingImage.OriginalImageUrl; image.MediumImageUrl = existingImage.MediumImageUrl; image.SmallImageUrl = existingImage.SmallImageUrl; imageCarouselManager.SaveImage(image); return Response.AsJson(image); }; Delete["DeleteCarouselImage", "/{countryCode}/CarouselImages/{imageId}", true] = async (parameters, cancellationToken) => { var imageId = (int)parameters.imageId; var existingImage = imageCarouselManager.GetImage(imageId); if (existingImage == null) return HttpStatusCode.NotFound; imageCarouselManager.DeleteImage(existingImage); return HttpStatusCode.NoContent; }; Put["UploadCarouselImageImage", "/{countryCode}/CarouselImages/{imageId}/image", true] = async (parameters, cx) => { int imageId = (int)parameters.imageId; var existingImage = imageCarouselManager.GetImage(imageId); if (existingImage == null) return HttpStatusCode.NotFound; var image = imageFactory.GetImage(Request.Body); if (image == null || (!image.RawFormat.Equals(ImageFormat.Jpeg) && !image.RawFormat.Equals(ImageFormat.Png))) return HttpStatusCode.BadRequest; var originalFileName = GetFilename("carousel-{0}.{1}", imageId, image.RawFormat); await imageFactory.SaveImageAsync(originalFileName, Request.Body); existingImage.OriginalImageUrl = originalFileName; var resizedMediumFilename = GetFilename("carousel-medium-{0}.{1}", imageId, image.RawFormat); var resizedMedium = imageFactory.ResizeImage(image, new Size(1440, 300), image.RawFormat); await imageFactory.SaveImageAsync(resizedMediumFilename, resizedMedium); existingImage.MediumImageUrl = resizedMediumFilename; var resizedSmallFilename = GetFilename("carousel-small-{0}.{1}", imageId, image.RawFormat); var resizedThumbnail = imageFactory.ResizeImage(image, new Size(960, 200), image.RawFormat); await imageFactory.SaveImageAsync(resizedSmallFilename, resizedThumbnail); existingImage.SmallImageUrl = resizedSmallFilename; existingImage = imageCarouselManager.SaveImage(existingImage); return Response.AsJson(existingImage); }; } private string GetFilename(string filename, int imageId, ImageFormat imageFormat) { if (imageFormat.Equals(ImageFormat.Jpeg)) return string.Format(filename, imageId, "jpg"); else if (imageFormat.Equals(ImageFormat.Png)) return string.Format(filename, imageId, "png"); throw new Exception("Unknown format"); } } }