public async Task DeleteCertificateAsync(int id,
                                             string userId,
                                             CancellationToken cancellationToken = default)
    {
        var certificate = await _repository.GetByUserIdAsync(id, userId, cancellationToken);

        await _repository.DeleteAsync(certificate, cancellationToken);

        _cacheService.SetList(userId);
    }
        public async Task <IActionResult> DeleteCertificate(long id)
        {
            if (!await certificateRepository.Exists(id))
            {
                return(NotFound(new List <string>()
                {
                    $"Certificate with ID = {id} not found"
                }));
            }

            await certificateRepository.DeleteAsync(id);

            return(NoContent());
        }
    // Use for Coyote.
    /*********************************/
    public async Task GetAndUpdateAtTheSameTime()
    {
        _context.Certificates.AddRange(CertificateBuilder.GetDefaultValues());
        _context.SaveChanges();

        _context.ChangeTracker.Clear();

        var certificate = await _context.Certificates.AsNoTracking().FirstOrDefaultAsync();

        // This code throws an DbUpdateConcurrencyException,
        // so we add a check (try-catch) to the "Edit" methods of the controllers.
        var deleteResult = _repository.DeleteAsync(certificate);
        var updateResult = _repository.UpdateAsync(certificate);

        await Task.WhenAll(deleteResult, updateResult);
    }