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);
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }