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)
             );
     }));
 }
示例#2
0
    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);
    }
示例#3
0
    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;
        }));
    }
示例#4
0
    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));
    }
示例#5
0
    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");
    }
示例#6
0
    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);
    }
示例#7
0
 protected virtual async Task <bool> ExistRelatedFlashSaleResultsAsync(Guid planId)
 {
     return(await FlashSaleResultRepository.AnyAsync(x => x.PlanId == planId));
 }