public async Task <Provider> AddProvider(string name)
        {
            await ProviderNameValidator.ValidateAndThrowAsync(name);

            var now = DateTimeOffset.Now;

            var provider = new Provider
            {
                Name    = name,
                Enabled = true,
                Created = now,
                Updated = now,
                Tokens  = new List <string>()
            };

            await using var transaction = await QuadCommentsDbContext.Database.BeginTransactionAsync();

            try
            {
                await QuadCommentsDbContext.Providers.AddAsync(provider);

                await QuadCommentsDbContext.SaveChangesAsync();

                await transaction.CommitAsync();
            }
            catch
            {
                await transaction.RollbackAsync();

                throw;
            }

            return(provider);
        }
        public async Task <Provider> RenameProvider(Guid providerId, string name)
        {
            await ProviderNameValidator.ValidateAndThrowAsync(name);

            await using var transaction = await QuadCommentsDbContext.Database.BeginTransactionAsync();

            try
            {
                var provider = await QuadCommentsDbContext
                               .Providers
                               .FirstOrDefaultAsync(x => x.Id == providerId);

                if (provider == null)
                {
                    throw new ArgumentException(providerId.ToString(), nameof(providerId));
                }

                provider.Name    = name;
                provider.Updated = DateTimeOffset.Now;

                await QuadCommentsDbContext.SaveChangesAsync();

                await transaction.CommitAsync();

                return(provider);
            }
            catch
            {
                await transaction.RollbackAsync();

                throw;
            }
        }