protected virtual async Task <FlashSaleResult> CreatePendingResultAsync(Guid planId, Guid storeId, Guid userId) { return(await WithUnitOfWorkAsync(async() => { return await FlashSaleResultRepository.InsertAsync( new FlashSaleResult(GuidGenerator.Create(), CurrentTenant.Id, storeId, planId, userId) ); })); }
public virtual async Task HandleEventAsync(CreateFlashSaleOrderCompleteEto eventData) { var flashSaleResult = await FlashSaleResultRepository.GetAsync(eventData.PendingResultId); if (eventData.Success) { flashSaleResult.MarkAsSuccessful(eventData.OrderId.Value); } else { flashSaleResult.MarkAsFailed(eventData.Reason); } await FlashSaleResultRepository.UpdateAsync(flashSaleResult, autoSave : true); }
public async Task <FlashSaleResult> CreateFlashSaleResultAsync() { return(await WithUnitOfWorkAsync(async() => { var flashSaleResult = new FlashSaleResult( GuidGenerator.Create(), null, FlashSalesTestData.Store1Id, FlashSalesTestData.Plan1Id, GuidGenerator.Create()); await FlashSaleResultRepository.InsertAsync(flashSaleResult); return flashSaleResult; })); }
protected virtual async Task <FlashSaleResult> CreatePendingFlashSaleResultAsync(FlashSalePlanCacheItem plan, Guid userId, Func <Guid, Task> existResultPreProcess) { // Prevent repeat submit var existsResult = await FlashSaleResultRepository.FirstOrDefaultAsync(x => x.PlanId == plan.Id && x.UserId == userId && x.Status != FlashSaleResultStatus.Failed && x.Reason != FlashSaleResultFailedReason.InvalidHashToken); if (existsResult != null) { await existResultPreProcess(existsResult.Id); throw new BusinessException(FlashSalesErrorCodes.DuplicateFlashSalesOrder); } var result = new FlashSaleResult( id: GuidGenerator.Create(), tenantId: CurrentTenant.Id, storeId: plan.StoreId, planId: plan.Id, userId: userId ); return(await FlashSaleResultRepository.InsertAsync(result, autoSave : true)); }
public async Task HandleEventAsync_When_Create_Order_Failed() { var existFlashResult = await CreateFlashSaleResultAsync(); var createFlashSaleOrderCompleteEto = new CreateFlashSaleOrderCompleteEto() { TenantId = existFlashResult.TenantId, PendingResultId = existFlashResult.Id, Success = false, StoreId = FlashSalesTestData.Store1Id, PlanId = existFlashResult.PlanId, OrderId = null, Reason = "Failed reason", UserId = existFlashResult.UserId, }; await CreateFlashSaleOrderCompleteEventHandler.HandleEventAsync(createFlashSaleOrderCompleteEto); var flashResult = await FlashSaleResultRepository.GetAsync(existFlashResult.Id); flashResult.Status.ShouldBe(FlashSaleResultStatus.Failed); flashResult.OrderId.ShouldBe(null); flashResult.Reason.ShouldBe("Failed reason"); }
public async Task HandleEventAsync_When_Create_Order_Success() { var existFlashResult = await CreateFlashSaleResultAsync(); var createFlashSaleOrderCompleteEto = new CreateFlashSaleOrderCompleteEto() { TenantId = existFlashResult.TenantId, PendingResultId = existFlashResult.Id, Success = true, StoreId = existFlashResult.StoreId, PlanId = existFlashResult.PlanId, OrderId = GuidGenerator.Create(), Reason = null, UserId = existFlashResult.UserId, }; await CreateFlashSaleOrderCompleteEventHandler.HandleEventAsync(createFlashSaleOrderCompleteEto); var flashResult = await FlashSaleResultRepository.GetAsync(existFlashResult.Id); flashResult.Status.ShouldBe(FlashSaleResultStatus.Successful); flashResult.OrderId.ShouldBe(createFlashSaleOrderCompleteEto.OrderId); flashResult.Reason.ShouldBe(null); }
protected virtual async Task <bool> ExistRelatedFlashSaleResultsAsync(Guid planId) { return(await FlashSaleResultRepository.AnyAsync(x => x.PlanId == planId)); }