public IHttpActionResult GetCampaignImage(int campaignId, int id) { CampaignImage campaignImage = db.CampaignImages.Find(id); if (campaignImage == null) { return(NotFound()); } return(Ok(campaignImage)); }
public async Task <IHttpActionResult> PostNewCampaignImage(int campaignId, CampaignImage_AddBM model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var campaign = await db.SafelyGetCampaignById(campaignId, true); //Only the one who created the campaign can add images //TODO: Add this if you encountered an error db.Entry(campaignImage).Reference(p => p.Campaign).Load(); /*NOTE: Admins can not add images to a campaign, they can only remove it sometimes!*/ var userId = User.Identity.GetUserId(); if (campaign.CreatedById.ToString() != userId) { return(Unauthorized()); } var campaignImage = new CampaignImage { CampaignId = campaignId, Description = model.Description, ShownInGallery = model.ShownInGallery }; if (string.IsNullOrEmpty(model.Base64Image)) { return(BadRequest("No base64 image")); } else { var uploaderResponse = await Helpers.UploadHelper.UploadBase64ImageAsync(db, userId, model.Base64Image, FileServerTokenType.CampaignImageUpload); if (uploaderResponse.StatusCode == HttpStatusCode.OK || uploaderResponse.StatusCode == HttpStatusCode.Created) { campaignImage.FilePath = uploaderResponse.FilePath; campaignImage.FileServerId = uploaderResponse.FileServerId; } else { return(InternalServerError(new Exception(uploaderResponse.Message))); } } db.CampaignImages.Add(campaignImage); await db.SaveChangesAsync(); if (model.AppendedToStory) { var storyElements = new List <string>(); try { storyElements = JsonConvert.DeserializeObject <List <string> >(campaign.Story); } catch (JsonReaderException) { //This ensures compatibility with story property that contained plain text of story storyElements.Add(campaign.Story); } storyElements.Add(string.Format("[campaignImageId:{0}]", campaignImage.Id)); campaign.Story = JsonConvert.SerializeObject(storyElements); db.Entry(campaign).State = EntityState.Modified; await db.SaveChangesAsync(); } return(CreatedAtRoute("PostNewCampaignImage", new { id = campaignImage.Id }, campaignImage)); }