public async Task <IActionResult> AddExistingCommon(string commonResourceId) { //get user and she's/he's CommonResources from database var user = await _appUserContext.ApplicationUser.Where(u => u.Id == _user.GetUserId(HttpContext.User)) .Include(u => u.UserCommonResource) .FirstOrDefaultAsync(); if (user == null) { var error = new ErrorViewModel() { ErrorMessage = "Error 10: unable to get user's data" }; return(RedirectToAction("Index", "Error", error)); } //get requested commonResources var common = await _appUserContext.CommonResources.Where(c => c.CommonResourceId == commonResourceId).FirstOrDefaultAsync(); if (common == null) { var error = new ErrorViewModel(); return(RedirectToAction("Index", "Error", error)); } //add commonResource to user var join = new UserCommonResource { UserId = user.Id, User = user, CommonResourceId = commonResourceId, CommonResource = common }; user.UserCommonResource.Add(join); //save to database try { _appUserContext.ApplicationUser.Update(user); await _appUserContext.SaveChangesAsync(); } catch (InvalidOperationException) { var error = new ErrorViewModel() { ErrorMessage = "Error 101: User already have this common resource added." }; return(RedirectToAction("Index", "Error", error)); } return(RedirectToAction("Index")); }
public async Task <IActionResult> AddNewStorage([Bind("StorageId, CommonResourceId, CommonResource, OwnerId, StorageName, StorageType, Products")] Storage storage, string commonResourceId, string commonResourceName) { // Probably overcomplicated, split into functions at some point if (string.IsNullOrEmpty(storage.StorageName) || (string.IsNullOrEmpty(commonResourceId) && string.IsNullOrEmpty(commonResourceName))) { var error = new ErrorViewModel() { ErrorMessage = "Error 11: Storage name empty or common resource not set/empty." }; return(RedirectToAction("Index", "Error", error)); } //get user and she's/he's CommonResources from database var user = await _appUserContext.ApplicationUser.Where(u => u.Id == _user.GetUserId(HttpContext.User)) .Include(u => u.UserCommonResource) .FirstOrDefaultAsync(); if (user == null) { var error = new ErrorViewModel() { ErrorMessage = "Error 10: unable to get user's data" }; return(RedirectToAction("Index", "Error", error)); } storage.OwnerId = user.Id; CommonResource common; //if commonResourceId specified, get it from database, add storage if (!string.IsNullOrEmpty(commonResourceId)) { common = await _appUserContext.CommonResources.Where(c => c.CommonResourceId == commonResourceId) .Include(c => c.Storages) .FirstOrDefaultAsync(); if (common == null) { var error = new ErrorViewModel() { ErrorMessage = "Error 13" }; return(RedirectToAction("Index", "Error", error)); } common.Storages.Add(storage); _appUserContext.CommonResources.Update(common); _appUserContext.SaveChanges(); return(RedirectToAction("Index", "Storage")); } //if commonResourceId is not specified common = new CommonResource { CommonResourceName = commonResourceName, OwnerId = user.Id }; common.Storages.Add(storage); var join = new UserCommonResource { UserCommonResourceId = null, //autogenerated by database UserId = user.Id, User = user, CommonResourceId = common.CommonResourceId, CommonResource = common }; user.UserCommonResource.Add(join); _appUserContext.ApplicationUser.Update(user); await _appUserContext.SaveChangesAsync(); return(RedirectToAction("Index", "Storage")); }