public ActionResult Create(InfluencerFormViewModel viewModel, HttpPostedFileBase upload) { // BAD SCENARIO IF THE MODEL IS INVALID if (!ModelState.IsValid) { return(RedirectToAction("Create")); } // GET USER ID AND USER var userId = User.Identity.GetUserId(); var user = unitOfWork.ApplicationUserRepository.GetUser(userId); // BRING AURORA WALLET TO ALLOW THE USER PAY US var auroraWallet = unitOfWork.AuroraWalletRepository.GetAuroraWallet(); if (auroraWallet == null) { return(HttpNotFound()); } // THIS TRY CATCH CHECKS IF THE PAYMENT CAN BE DONE, AND IN GENERAL IF SOMETHING GOES WRONG try { //CREATE THE INFLUENCER var influencer = Influencer.CreateInflunecerWithPayment(viewModel, user, auroraWallet); //IF THERE IS NEW FILE UPLOADED if (upload != null && upload.ContentLength > 0) { //WE WILL CREATE A NEW FILE WITH THE TYPE OF AVATAR (THIS IS WHAT I NEED HERE) var avatar = FileUpload.GiveInfluencerAvatar(System.IO.Path.GetFileName(upload.FileName), upload.ContentType, null, FileType.Avatar, influencer.ID); //BLACK MAGIC using (var reader = new System.IO.BinaryReader(upload.InputStream)) { avatar.Content = reader.ReadBytes(upload.ContentLength); } // GIVE INFLUENCER THE LIST OF FILES WITH THE AVATAR FILE influencer.FileUploads = new List <FileUpload> { avatar }; } unitOfWork.InfluencerRepository.AddInfluencer(influencer); // SAVE CHANGES TO DB unitOfWork.Complete(); } catch (Exception) { // HERE YOU CAN ADD THE SAME PAGE WITH A NEW VIEW PROPERTY TO DISPLAY THAT THE PAYMENT COULDNT BE DONE return(RedirectToAction("Create")); } // REDIRECT TO ADD A GIG (USER EXPIRIENCE) return(RedirectToAction("Create", "Gig", null)); }
public ActionResult Update(InfluencerFormViewModel viewModel, HttpPostedFileBase upload) { // GET THE USER ID TO USE IT LATER var userId = User.Identity.GetUserId(); // BRING THE INFLUENCER FOR EDIT var influencerDb = unitOfWork.InfluencerRepository.GetInfluencerForUpdate(viewModel.ID); // CHECK IF THE INFLUENCER EXIST if (influencerDb == null) { return(HttpNotFound()); } if (influencerDb.User.Id != userId) { return(new HttpUnauthorizedResult()); } // BRING AURORA WALLET FOR RETURNING MONEY TO USER AND GETTING OUR CUT IF NEEDED var auroraWallet = unitOfWork.AuroraWalletRepository.GetAuroraWallet(); if (auroraWallet == null) { return(HttpNotFound()); } // THIS TRY CATCH CHECKS IF THE PAYMENT CAN BE DONE, AND IN GENERAL IF SOMETHING GOES WRONG try { influencerDb.Modify(viewModel, influencerDb, auroraWallet); // IF THERE IS MEW FILE UPLOADED THEN WE WILL DELETE THE INFLUENCER FILE FOR AVATAR FROM HIS FILES if (upload != null && upload.ContentLength > 0) { if (influencerDb.FileUploads.Any(f => f.FileType == FileType.Avatar)) { unitOfWork.FileUploadRepository.RemoveGigAvatarFileUpload(influencerDb); } // THEN WE WILL CREATE NEW FILE AND GIVE IT TO THE USER var avatar = FileUpload.GiveInfluencerAvatar(System.IO.Path.GetFileName(upload.FileName), upload.ContentType, null, FileType.Avatar, influencerDb.ID); // BLACK MAGIC using (var reader = new System.IO.BinaryReader(upload.InputStream)) { avatar.Content = reader.ReadBytes(upload.ContentLength); } // WE ADD THE LIST WITH THE NEW AVATAR FILE TO THE INFLUENCER LIST influencerDb.FileUploads = new List <FileUpload> { avatar }; } } catch (Exception) { return(RedirectToAction("Update", viewModel)); } // SAVE CHANGES TO DB unitOfWork.Complete(); // REDIRECT TO ADD A GIG (USER EXPIRIENCE) return(RedirectToAction("Create", "Gig", null)); }