Exemple #1
0
 public RegistrationCreated(RegistrationId id, ExternalRegistrationId externalId, Candidate candidate, DateTime publishedOn)
 {
     Id          = id;
     ExternalId  = externalId;
     Candidate   = candidate;
     PublishedOn = publishedOn;
 }
 private async Task <Result <OrderItem> > CreateRegistrationOrderItem(ExternalRegistrationId externalRegistrationId,
                                                                      ExamId examId)
 {
     return(await _examPricingProvider.GetPriceAsync(examId)
            .OnSuccess(price => OrderItem.Create(Products.Registration.ItemName, Products.Registration.ProductType,
                                                 externalRegistrationId, 1, price)));
 }
 private Registration(ExternalRegistrationId externalId, ExamId examId, OrderId orderId, Candidate candidate,
                      ISystemTimeProvider systemTimeProvider) : this(systemTimeProvider)
 {
     ExternalId = externalId;
     Status     = RegistrationStatus.New;
     Candidate  = candidate;
     ExamId     = examId;
     OrderId    = orderId;
 }
 private async Task <Result <Order> > CreateOrder(ExternalRegistrationId externalRegistrationId, ExamId examId,
                                                  ContactData buyer)
 {
     return(await CreateRegistrationOrderItem(externalRegistrationId, examId)
            .OnSuccess(item => Order.CreateWithDefaultSellerAsync(buyer, new[] { item }, _systemTimeProvider,
                                                                  _singleCurrencyPolicy,
                                                                  _singleItemsCurrencyPolicy,
                                                                  _orderRepository)));
 }
Exemple #5
0
 public static async Task <Result <Registration> > CreateAsync(ExternalRegistrationId externalRegistrationId,
                                                               ExamId examId, OrderId orderId, Candidate candidate, ISystemTimeProvider systemTimeProvider,
                                                               IRegistrationRepository registrationRepository)
 {
     return(await Result.Create(candidate != null, RegistrationErrors.CandidateCannotBeEmpty.Build())
            .OnSuccess(() =>
                       new Registration(externalRegistrationId, examId, orderId, candidate, systemTimeProvider))
            .OnSuccess(async registration => await registrationRepository.SaveAsync(registration))
            .OnSuccess(registration => registration.RaiseEvent(new RegistrationCreated(registration.Id,
                                                                                       registration.ExternalId, candidate, systemTimeProvider.UtcNow))));
 }
        public async Task <Result <RegistrationId> > Handle(CreateRegistrationCommand request,
                                                            CancellationToken cancellationToken)
        {
            var externalRegistrationId = new ExternalRegistrationId();
            var orderResult            = await CreateOrder(externalRegistrationId, request.ExamId, request.Buyer);

            var bookPlaceResult = await BookPlace(request.ExamId);

            return(await Result.Combine(orderResult, bookPlaceResult)
                   .OnSuccess(async() =>
                              await Registration.CreateAsync(externalRegistrationId, request.ExamId, orderResult.Value.Id,
                                                             request.Candidate, _systemTimeProvider, _registrationRepository))
                   .OnSuccess(registration => registration.Id));
        }
Exemple #7
0
 public RegistrationCancelled(RegistrationId id, ExternalRegistrationId externalId, DateTime publishedOn)
 {
     Id          = id;
     ExternalId  = externalId;
     PublishedOn = publishedOn;
 }