/// <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)); }