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