public IActionResult Add([FromBody] DogTrainingModel obj) { if (!IsCurrentUserAdmin() && !IsCurrentUserMember()) { return(Forbid()); } //dogs will be added to the training later var training = new DogTraining { Comments = null, DogId = obj.DogId, TrainingId = obj.TrainingId, DogTrackBlobUrl = obj.DogTrackBlobUrl, LostPerson = obj.LostPerson, LostPersonTrackBlobUrl = obj.LostPersonTrackBlobUrl, Notes = obj.Notes, Weather = obj.Weather, GroundType = obj.GroundType, DelayTime = obj.DelayTime, LostPersonTrackLength = obj.LostPersonTrackLength, AdditionalPictureBlobUrl = obj.AdditionalPictureBlobUrl }; unitOfWork.DogTrainingRepository.Insert(training); unitOfWork.Commit(); //var accessToken = HttpContext.GetTokenAsync("access_token").Result; return(new ObjectResult(new { trainingId = training.TrainingId, dogId = training.DogId })); }
public DogTrainingModel Get(int dogId, int trainingId) { if (!IsCurrentUserAdmin() && !IsCurrentUserMember()) { return(null); } //return unitOfWork.GuideRepository.GetById(id); var t = unitOfWork.DogTrainingRepository.GetByIds(dogId, trainingId); if (String.IsNullOrWhiteSpace(t.Weather)) { var training = unitOfWork.TrainingRepository.GetById(trainingId); t.Weather = training.Weather; } var dogTrainingModel = new DogTrainingModel() { DogId = t.DogId, TrainingId = t.TrainingId, DogTrackBlobUrl = t.DogTrackBlobUrl, LostPerson = t.LostPerson, LostPersonTrackBlobUrl = t.LostPersonTrackBlobUrl, Notes = t.Notes, Weather = t.Weather, GroundType = t.GroundType, DelayTime = t.DelayTime, LostPersonTrackLength = t.LostPersonTrackLength, AdditionalPictureBlobUrl = t.AdditionalPictureBlobUrl, Comments = t.Comments.Select(c => new CommentModel { AuthorId = c.AuthorId, AuthorName = c.Author.FirstName + " " + c.Author.LastName, CommentId = c.DogTrainingCommentId, Content = c.Content, Date = c.Date }).ToList() }; return(dogTrainingModel); }
public ActionResult Add(DogTrainingModel model, HttpPostedFileBase lostPersonTrackFile, HttpPostedFileBase dogTrackFile, HttpPostedFileBase imageFile) { if (!LoginHelper.IsAuthenticated()) { return(RedirectToAction("Login", "Account")); } else if (!LoginHelper.IsCurrentUserAdmin() && !LoginHelper.IsCurrentUserMember()) { return(RedirectToAction("Error", "Home", new { error = "Nie masz wystarczających uprawnień by zmieniać te dane" })); } MultipartFormDataContent additionalPhotoForm = new MultipartFormDataContent(); if (imageFile != null) { var additionalPictureStream = imageFile.InputStream; var additionalPictureStreamContent = new StreamContent(additionalPictureStream); var additionalPictureByteArrayContent = new ByteArrayContent(additionalPictureStreamContent.ReadAsByteArrayAsync().Result); additionalPictureByteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); var additionalPictureFileName = imageFile.FileName + Guid.NewGuid().ToString(); additionalPhotoForm.Add(additionalPictureByteArrayContent, additionalPictureFileName, Path.GetFileName(additionalPictureFileName)); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken()); var additionalPhotoUploadResponse = client.PostAsync("DogTrainings/UploadImage", additionalPhotoForm).Result; if (!additionalPhotoUploadResponse.IsSuccessStatusCode) { ViewBag.Message = "image upload failed. Reason: " + additionalPhotoUploadResponse.StatusCode; return(View("Error")); } else { model.AdditionalPictureBlobUrl = @"https://kgtstorage.blob.core.windows.net/images/" + additionalPictureFileName; } } var originalLostPersonTrackStream = lostPersonTrackFile.InputStream; var cleanedLostPersonTrackStream = new MemoryStream(); DateTime lostPersonStartTime = new DateTime(); double lostPersonTrackLength = 0.0; DateTime dogStartTime = new DateTime(); using (var reader = new StreamReader(originalLostPersonTrackStream)) { XDocument gpxDoc = XDocument.Load(reader); var originalFileSerializer = new XmlSerializer(typeof(Gpx)); var gpx = (Gpx)originalFileSerializer.Deserialize(gpxDoc.Root.CreateReader()); var trkSeg = gpx.Trk.Trkseg; //calculate lost person track length and time of lost person start lostPersonStartTime = DogTrainingHelper.CalculateGPSTrackStartTime(trkSeg); //lostPersonTrackLength = DogTrainingHelper.CalculateGPSTrackLength(trkSeg); var cleanedFileSerializer = new XmlSerializer(typeof(Trkseg)); cleanedFileSerializer.Serialize(cleanedLostPersonTrackStream, trkSeg); cleanedLostPersonTrackStream.Position = 0; } var originalDogTrackStream = dogTrackFile.InputStream; var cleanedDogTrackStream = new MemoryStream(); using (var reader = new StreamReader(originalDogTrackStream)) { XDocument gpxDoc = XDocument.Load(reader); var originalFileSerializer = new XmlSerializer(typeof(Gpx)); var gpx = (Gpx)originalFileSerializer.Deserialize(gpxDoc.Root.CreateReader()); var trkSeg = gpx.Trk.Trkseg; //calculate time of dog start dogStartTime = DogTrainingHelper.CalculateGPSTrackStartTime(trkSeg); var cleanedFileSerializer = new XmlSerializer(typeof(Trkseg)); cleanedFileSerializer.Serialize(cleanedDogTrackStream, trkSeg); cleanedDogTrackStream.Position = 0; } MultipartFormDataContent form = new MultipartFormDataContent(); var lostPersonStreamContent = new StreamContent(cleanedLostPersonTrackStream); var lostPersonImageContent = new ByteArrayContent(lostPersonStreamContent.ReadAsByteArrayAsync().Result); lostPersonImageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); var lostPersonFileName = lostPersonTrackFile.FileName + Guid.NewGuid().ToString(); form.Add(lostPersonImageContent, lostPersonFileName, Path.GetFileName(lostPersonFileName)); var dogStreamContent = new StreamContent(cleanedDogTrackStream); var dogImageContent = new ByteArrayContent(dogStreamContent.ReadAsByteArrayAsync().Result); dogImageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); var dogFileName = dogTrackFile.FileName + Guid.NewGuid().ToString(); form.Add(dogImageContent, dogFileName, Path.GetFileName(dogFileName)); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken()); var response = client.PostAsync("DogTrainings/Upload", form).Result; if (response.IsSuccessStatusCode) { //get blob urls - is it that simple or it has to be returned? var lostPersonTrackBlobUrl = @"https://kgtstorage.blob.core.windows.net/tracks/" + lostPersonFileName; var dogTrackBlobUrl = @"https://kgtstorage.blob.core.windows.net/tracks/" + dogFileName; //add blob urls to model model.LostPersonTrackBlobUrl = lostPersonTrackBlobUrl; model.DogTrackBlobUrl = dogTrackBlobUrl; //add lost person track length and delay time to model model.DelayTime = dogStartTime - lostPersonStartTime; //model.LostPersonTrackLength = lostPersonTrackLength; //add dogtraining client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken()); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress + "dogtrainings/"); var dogTrainingSerialized = JsonConvert.SerializeObject(model); message.Content = new StringContent(dogTrainingSerialized, System.Text.Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = client.SendAsync(message).Result; // await client.SendAsync(message) if (responseMessage.IsSuccessStatusCode) //200 OK { //display info message.Dispose(); var responseData = responseMessage.Content.ReadAsStringAsync().Result; var definition = new { DogId = "", TrainingId = "" }; var ids = JsonConvert.DeserializeAnonymousType(responseData, definition); return(RedirectToAction("Training", new { dogId = ids.DogId, trainingId = ids.TrainingId })); //return View("Dog", responseMessage.Content); } else // msg why not ok { message.Dispose(); ViewBag.Message = responseMessage.StatusCode; return(View("Error")); } } ViewBag.Message = "upload failed. Reason: " + response.StatusCode; return(View("Error")); }
public ActionResult Update(DogTrainingViewModel model, HttpPostedFileBase imageFile) { if (!LoginHelper.IsAuthenticated()) { return(RedirectToAction("Login", "Account")); } else if (!LoginHelper.IsCurrentUserAdmin() && !LoginHelper.IsCurrentUserMember()) { return(RedirectToAction("Error", "Home", new { error = "Nie masz wystarczających uprawnień by zmieniać te dane" })); } if (imageFile != null) { MultipartFormDataContent form = new MultipartFormDataContent(); var imageStreamContent = new StreamContent(imageFile.InputStream); var byteArrayImageContent = new ByteArrayContent(imageStreamContent.ReadAsByteArrayAsync().Result); byteArrayImageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); var imageFileName = imageFile.FileName + Guid.NewGuid().ToString(); form.Add(byteArrayImageContent, imageFileName, Path.GetFileName(imageFileName)); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken()); var response = client.PostAsync("DogTrainings/UploadImage", form).Result; if (response.IsSuccessStatusCode) { model.AdditionalPictureBlobUrl = @"https://kgtstorage.blob.core.windows.net/images/" + imageFileName; } else { ViewBag.Message = response.StatusCode; return(View("Error")); } } var lostPersonTrackPoints = new Trkseg { Trkpt = model.LostPersonTrackPoints }; var dogTrackPoints = new Trkseg { Trkpt = model.DogTrackPoints }; UpdateTracks(model.DogId, model.TrainingId, model.LostPersonTrackFilename, model.DogTrackFilename, lostPersonTrackPoints, dogTrackPoints); var dogTrainingModel = new DogTrainingModel { LostPerson = model.LostPerson, Notes = model.Notes, Weather = model.Weather, GroundType = model.GroundType, Comments = model.Comments, DogId = model.DogId, TrainingId = model.TrainingId, LostPersonTrackLength = model.LostPersonTrackLength, DelayTime = model.DelayTime, AdditionalPictureBlobUrl = model.AdditionalPictureBlobUrl }; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken()); System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, client.BaseAddress + $"dogtrainings/training?dogId={model.DogId}&trainingId={model.TrainingId}"); var dogTrainingSerialized = JsonConvert.SerializeObject(dogTrainingModel); message.Content = new StringContent(dogTrainingSerialized, System.Text.Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = client.SendAsync(message).Result; if (responseMessage.IsSuccessStatusCode) //200 OK { message.Dispose(); var responseData = responseMessage.Content.ReadAsStringAsync().Result; var definition = new { DogId = "", TrainingId = "" }; var ids = JsonConvert.DeserializeAnonymousType(responseData, definition); return(RedirectToAction("Training", new { dogId = ids.DogId, trainingId = ids.TrainingId })); } else // msg why not ok { ViewBag.Message = "code: " + responseMessage.StatusCode; return(View("Error")); } }