private async Task ValidateParentAndRootAsync(InputFolderServiceModel model) { if (model.ParentId != null && model.RootId != null) { var parentModelTask = this.folderDapper.GetFolderCatalogAsync(model.ParentId.Value); var rootModelTask = this.folderDapper.GetFolderCatalogAsync(model.RootId.Value); await Task.WhenAll(parentModelTask, rootModelTask); var parentModel = await parentModelTask; var rootModel = await rootModelTask; if (parentModel is null) { throw new FolderException { Message = "The parent folder does not exist." }; } if (rootModel is null) { throw new FolderException { Message = "The root folder does not exist" }; } if (parentModel.CatalogId != model.CatalogId || rootModel.CatalogId != model.CatalogId) { throw new FolderException { Message = "Different catalogs." }; } } }
public async Task <bool> CreateFolderAsync(InputFolderServiceModel inputModel) { this.ValidateInput(inputModel); await this.ValidateParentAndRootAsync(inputModel); if (inputModel.Name != DriveConstants.ROOT_FOLDER_NAME) { // TODO: fix (needs to be fixed cuz the names are sometimes incorrect) var numberOfExistingNames = await folderDapper.GetFolderNumbersWithExistingNameAsync( inputModel.Name, inputModel.ParentId.Value); if (numberOfExistingNames > 0) { inputModel.Name += $" ({++numberOfExistingNames})"; } } var(FolderId, MessageId) = await folderDapper.CreateFolderAsync(inputModel); if (FolderId > 0 && inputModel.IsPrivate) { await this.permissionsDapper.CreateFolderPermissionsAsync(inputModel.CatalogId, FolderId, inputModel.EmployeeId); } // send message to the subscribers if (FolderId > 0) { var messageData = new FolderCreatedMessage { FolderId = FolderId }; await this.publisher.Publish(messageData); await this.messageService.MarkMessageAsPublishedAsync(MessageId); } return(FolderId > 0); }
private void ValidateInput(InputFolderServiceModel model) { Guard.AgainstNullObject <FolderException>(model, nameof(model)); Guard.AgainstEmptyString <FolderException>(model.Name, nameof(model.Name)); Guard.AgainstInvalidWindowsCharacters <FolderException>(model.Name, nameof(model.Name)); Guard.AgainstLessThanOne <FolderException>(model.CatalogId, nameof(model.CatalogId)); Guard.AgainstLessThanOne <FolderException>(model.EmployeeId, nameof(model.EmployeeId)); if (model.IsPrivate && (model.RootId is null)) { throw new FolderException { Message = "The folder is private." }; } if (model.CreateDate == default) { throw new FolderException { Message = "DateTime is required." }; } }