示例#1
0
        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."
                    };
                }
            }
        }
示例#2
0
        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);
        }
示例#3
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."
                };
            }
        }