Exemplo n.º 1
0
        /// <summary>
        /// Creates a new server.
        /// </summary>
        /// <param name="createServerDto">The creation request data.</param>
        /// <param name="owner">The user creating the server.</param>
        /// <returns>The result of the creation.</returns>
        public async Task <CreateServerResult> CreateServerAsync(CreateServerDto createServerDto, ApplicationUser owner)
        {
            var validationResult = AnnotationValidator.TryValidate(createServerDto);

            if (validationResult.Failed)
            {
                return(CreateServerResult.Fail(validationResult.Error.ToErrorList()));
            }

            var server   = new Server(createServerDto.Name, createServerDto.PrivacyLevel, createServerDto.Description);
            var category = Category.CreateDefaultWelcomeCategory(server);

            server.Categories.Add(category);
            server.Members.Add(owner);

            var adminRole = ServerRole.CreateDefaultAdminRole(server);

            await _serverRepository.InsertAsync(server);

            await _serverRoleRepository.InsertAsync(adminRole);

            await _userRoleRepository.InsertAsync(new IdentityUserRole <Guid>
            {
                UserId = owner.Id,
                RoleId = adminRole.Id
            });

            await _serverRepository.CommitAsync();

            return(CreateServerResult.Ok(server));
        }