Example #1
0
    public async Task <bool> CreateLinkAsync(LinkViewModel lvm,
                                             string userId,
                                             CancellationToken cancellationToken = default)
    {
        var certificate = await _certificateRepository.GetCertificateIncludeLinksAsync(lvm.CertificateId,
                                                                                       userId,
                                                                                       cancellationToken);

        if (certificate != null)
        {
            // Check the limit (maximum 5).
            if (certificate.Links.Count >= 5)
            {
                return(true);
            }

            await _linkRepository.CreateAsync(new Link(lvm.Url, lvm.CertificateId),
                                              cancellationToken);

            await _cacheService.SetItemAsync(lvm.CertificateId, userId);

            return(true);
        }

        return(false);
    }
    public async Task <Certificate> GetItemAsync(int id, string userId)
    {
        return(await _memoryCache.GetOrCreateAsync(nameof(CertificateViewModel).GenerateCacheKey(id.ToString()),
                                                   async item =>
        {
            item.SlidingExpiration = CacheHelper.DefaultExpiration;

            return await _repository.GetCertificateIncludeLinksAsync(id, userId);
        }));
    }
    public async Task <CertificateViewModel> GetCertificateByIdIncludeLinksAsync(int page,
                                                                                 int id,
                                                                                 string userId,
                                                                                 CancellationToken cancellationToken = default)
    {
        var certificate = await _repository.GetCertificateIncludeLinksAsync(id, userId, cancellationToken);

        if (certificate is null)
        {
            return(null);
        }

        return(new CertificateViewModel
        {
            Id = certificate.Id,
            Title = certificate.Title,
            Description = certificate.Description,
            Links = certificate.Links,
            Date = certificate.Date,
            Stage = certificate.Stage,
            Path = certificate.Path,
            UserId = certificate.UserId,
            Page = page
        });
    }
    public async Task GetCertificateWithLinks()
    {
        // Arrange
        var certificate = await _context.Certificates.Include(e => e.Links).AsNoTracking().FirstAsync();

        // Act
        var repositoryResult = await _repository.GetCertificateIncludeLinksAsync(certificate.Id,
                                                                                 certificate.UserId);

        // Assert
        Assert.Equal(certificate.Title, repositoryResult.Title);
        Assert.Equal(certificate.Links.Count, repositoryResult.Links.Count);
    }