internal async Task <Guid> Save() { UserHelperFunctions userHelper = new UserHelperFunctions() { _context = _context, _emailService = _emailService, _securityOptions = _securityOptions, _user = _user }; userHelper.Populate(); bool isNew = false; var folder = _context.Folders.Where(x => x.FolderID == FolderID).FirstOrDefault(); if (folder == null) { folder = new Folder(); isNew = true; folder.FolderID = Guid.NewGuid(); } folder.Description = Description; folder.ParentFolderID = (SelectedParentFolderID != Guid.Empty.ToString() && !string.IsNullOrEmpty(SelectedParentFolderID)) ? Guid.Parse(SelectedParentFolderID) : (Guid?)null; if (isNew) { _context.Add(folder); //Add logged in user as a share user var folderUsr = new FolderUser() { AllowDelete = true, AllowEdit = true, FolderID = folder.FolderID, FolderUserID = Guid.NewGuid(), UserID = userHelper.loggedInUserID }; _context.Add(folderUsr); } else { _context.Update(folder); } await _context.SaveChangesAsync(); FolderID = folder.FolderID; return(FolderID); }
internal async Task <Guid> Save() { UserHelperFunctions userHelper = new UserHelperFunctions() { _context = _context, _emailService = _emailService, _securityOptions = _securityOptions, _user = _user }; userHelper.Populate(); bool isNew = false; var folderUser = _context.FolderUsers.Where(x => x.FolderUserID == FolderUserID).FirstOrDefault(); if (folderUser == null) { folderUser = new FolderUser(); isNew = true; folderUser.FolderUserID = Guid.NewGuid(); folderUser.FolderID = FolderID; } folderUser.UserID = Guid.Parse(SelectedUserID); folderUser.AllowDelete = AllowDelete; folderUser.AllowEdit = AllowEdit; if (isNew) { _context.Add(folderUser); } else { _context.Update(folderUser); } await _context.SaveChangesAsync(); FolderUserID = folderUser.FolderUserID; return(FolderUserID); }
// get or create a Folder by name for given user public Folder GetOrCreateFolder(User user, string name, Guid itemTypeID) { try { // get the folder by name for user if (Folders.Any(f => f.UserID == user.ID && f.Name == name)) { return(Folders.Single(f => f.UserID == user.ID && f.Name == name)); } else { // create the folder with given name and itemTypeID for user var folderUser = new FolderUser() { ID = Guid.NewGuid(), FolderID = Guid.NewGuid(), UserID = user.ID, PermissionID = BuiltSteady.Zaplify.Shared.Entities.Permissions.Full }; var folder = new Folder() { ID = folderUser.FolderID, SortOrder = 0, Name = name, UserID = user.ID, ItemTypeID = itemTypeID, Items = new List <Item>(), FolderUsers = new List <FolderUser>() { folderUser } }; Folders.Add(folder); SaveChanges(); TraceLog.TraceInfo(string.Format("Created folder named '{0}' for user '{1}'", name, user.Name)); return(folder); } } catch (Exception ex) { TraceLog.TraceException(string.Format("Could not find or create folder named '{0}' for user '{1}'", name, user.Name), ex); return(null); } }
public HttpResponseMessageWrapper <Folder> InsertFolder(HttpRequestMessage req) { Operation operation = null; HttpStatusCode code = AuthenticateUser(req); if (code != HttpStatusCode.OK) { // user not authenticated return(ReturnResult <Folder>(req, operation, code)); } Folder clientFolder = null; code = ProcessRequestBody <Folder>(req, out clientFolder, out operation); if (code != HttpStatusCode.OK) // error encountered processing body { return(ReturnResult <Folder>(req, operation, code)); } // default ItemTypeID to Task if not set if (clientFolder.ItemTypeID == null || clientFolder.ItemTypeID == Guid.Empty) { clientFolder.ItemTypeID = SystemItemTypes.Task; } // this operation isn't meant to do more than just insert the new folder // therefore make sure items collection is empty if (clientFolder.Items != null) { clientFolder.Items.Clear(); } // if the current user isn't in the FolderUsers collection, add it now (must have at least one FolderUser) bool addFolderUser = false; if (clientFolder.FolderUsers == null || clientFolder.FolderUsers.Count < 1) { addFolderUser = true; } else { var folderUsers = clientFolder.FolderUsers.Where <FolderUser>(gu => gu.UserID == clientFolder.UserID); if (folderUsers == null || folderUsers.Count() < 1) { addFolderUser = true; } } if (addFolderUser) { FolderUser fu = new FolderUser() { ID = Guid.NewGuid(), UserID = clientFolder.UserID, FolderID = clientFolder.ID, PermissionID = 3 /* full */ }; if (clientFolder.FolderUsers == null) { clientFolder.FolderUsers = new List <FolderUser>(); } clientFolder.FolderUsers.Add(fu); } try { var folder = this.StorageContext.Folders.Add(clientFolder); if (folder == null || this.StorageContext.SaveChanges() < 1) { TraceLog.TraceError("Internal Server Error (database operation did not succeed)"); return(ReturnResult <Folder>(req, operation, HttpStatusCode.InternalServerError)); } else { TraceLog.TraceInfo("Created"); return(ReturnResult <Folder>(req, operation, folder, HttpStatusCode.Created)); } } catch (Exception ex) { // check for the condition where the folder is already in the database // in that case, return 202 Accepted; otherwise, return 409 Conflict try { var dbFolder = this.StorageContext.Folders.Single(g => g.ID == clientFolder.ID); if (dbFolder.Name == clientFolder.Name && dbFolder.UserID == clientFolder.UserID) { TraceLog.TraceInfo("Accepted, entity exists : Exception[" + ex.Message + "]"); return(ReturnResult <Folder>(req, operation, dbFolder, HttpStatusCode.Accepted)); } else { TraceLog.TraceException("Conflict, entity in database did not match", ex); return(ReturnResult <Folder>(req, operation, HttpStatusCode.Conflict)); } } catch (Exception e) { // folder not inserted - return 409 Conflict TraceLog.TraceException(String.Format("Conflict, entity was not in database : Exception[{0}]", ex.Message), e); return(ReturnResult <Folder>(req, operation, HttpStatusCode.Conflict)); } } }