public Task <bool> CanDeleteAsync(Conference conference) { // TODO: Check if there are any participants? var canDelete = _clock.CurrentDate().Date.AddDays(7) < conference.From.Date; return(Task.FromResult(canDelete)); }
public async Task <string> CreateAsync(Guid userId) { var token = _rng.Generate(30, true); var now = _clock.CurrentDate(); var expires = now.Add(_options.ExpiryRefreshToken); var refreshToken = new RefreshToken(Guid.NewGuid(), userId, token, DateTime.UtcNow, expires); await _refreshTokenRepository.DeleteAsync(userId); await _refreshTokenRepository.AddAsync(refreshToken); return(token); }
public async Task PurchaseAsync(Guid conferenceId, Guid userId) { var conference = await _conferenceRepository.GetAsync(conferenceId); if (conference is null) { throw new ConferenceNotFoundException(conferenceId); } var ticket = await _ticketRepository.GetAsync(conferenceId, userId); if (ticket is not null) { throw new TicketAlreadyPurchasedException(conferenceId, userId); } var now = _clock.CurrentDate(); var ticketSale = await _ticketSaleRepository.GetCurrentForConferenceAsync(conferenceId, now); if (ticketSale is null) { throw new TicketSaleUnavailableException(conferenceId); } if (ticketSale.Amount.HasValue) { await PurchaseAvailableAsync(ticketSale, userId, ticketSale.Price); return; } ticket = _generator.Generate(conferenceId, ticketSale.Id, ticketSale.Price); ticket.Purchase(userId, _clock.CurrentDate(), ticketSale.Price); await _ticketRepository.AddAsync(ticket); _logger.LogInformation($"Ticket with ID: '{ticket.Id}' was generated for the conference: " + $"'{conferenceId}' by user: '******'."); await _messageBroker.PublishAsync(new TicketPurchased(ticket.Id, conferenceId, userId)); }
public async Task <TicketSaleInfoDto> GetCurrentAsync(Guid conferenceId) { var conference = await _conferenceRepository.GetAsync(conferenceId); if (conference is null) { return(null); } var now = _clock.CurrentDate(); var ticketSale = await _ticketSaleRepository.GetCurrentForConferenceAsync(conferenceId, now); return(ticketSale is not null?Map(ticketSale, conference) : null); }