Ejemplo n.º 1
0
        private void onResponse(Response response)
        {
            switch (response.ResponseCase)
            {
            case Response.ResponseOneofCase.OrderReports:
                OrderReports orderReports = response.OrderReports;

                foreach (var orderReport in orderReports.OrderReport)
                {
                    Debug.WriteLine("recieve the order/exeuction report message:{0}", orderReport);
                }
                break;

            case Response.ResponseOneofCase.MarketDatas:
                MarketDatas marketDatas = response.MarketDatas;

                foreach (var marketData in marketDatas.MarketData)
                {
                    Debug.WriteLine("recieve the market data update message:{0}", marketData);
                }

                break;

            case Response.ResponseOneofCase.Ping:
                Ping pingMsg = response.Ping;

                Debug.WriteLine("recieve the ping message:{0}", pingMsg);
                break;

            case Response.ResponseOneofCase.Notice:
                NoticeMessages noticeMsgs = response.Notice;

                foreach (var noticeMsg in noticeMsgs.Notice)
                {
                    Debug.WriteLine("recieve the notice message:{0}", noticeMsg);
                }
                break;

            case Response.ResponseOneofCase.ServiceStatus:
                ServiceStatuses serviceStatuses = response.ServiceStatus;

                foreach (var status in serviceStatuses.Status)
                {
                    Debug.WriteLine("recieve the service status message:{0}", status);
                }
                break;

            case Response.ResponseOneofCase.Instruments:
                Instruments instruments = response.Instruments;

                foreach (var instrument in instruments.Instrument)
                {
                    Debug.WriteLine("recieve the new instrument message:{0}", instrument);
                }
                break;

            case Response.ResponseOneofCase.InstrumentStatus:
                InstrumentStatuses instrumentStatuses = response.InstrumentStatus;

                foreach (var instrumentStatus in instrumentStatuses.Status)
                {
                    Debug.WriteLine("recieve the instrument status change message:{0}", instrumentStatus);
                }
                break;

            case Response.ResponseOneofCase.Position:
                AccountPosition acctPostion = response.Position;
                foreach (var postioin in acctPostion.Positions)
                {
                    Debug.WriteLine("recieve the position message:{0}", postioin);
                }
                break;

            case Response.ResponseOneofCase.SpreaderID:
            case Response.ResponseOneofCase.LogonResult:
            case Response.ResponseOneofCase.QueryResult:
            case Response.ResponseOneofCase.None:
            case Response.ResponseOneofCase.Extension:
            default:
                Assert.Fail("this should not in broadcast message from server");
                break;
            }
        }
Ejemplo n.º 2
0
        // success means called Thrid Party, saved raw request and raw response, (and saved warrantyProof), and returns a converted response
        // ---
        // anything here after SaveExternalPartyResponse in BudgetDatabase should be pure (non-deterministic and no side-effect)
        // so that the saved ExternalPartyResponse can be a source of truth
        internal async Task <Result <WarrantyCaseResponse, IFailure> > PerformVerifyAction(
            VerifyWarrantyCaseRequest request,
            WarrantyCaseOperation operation,
            Guid requestId)
        {
            var validateRequestResult = RequestValidator.Validate(request, operation, requestId);

            if (!validateRequestResult.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(validateRequestResult.Failure !));
            }

            var build = RequestBuilder.Build(request, operation, requestId);

            if (!build.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(build.Failure !));
            }
            var warrantyRequest = build.Success !;

            var saveWarrantyRequest = await BudgetDataWrapper.SaveExternalPartyRequest(
                new ExternalPartyRequest(
                    orderId : request.OrderId,
                    request : JsonConvert.SerializeObject(warrantyRequest))
            {
                Operation = operation,
                RequestId = requestId,
            });

            if (!saveWarrantyRequest.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(saveWarrantyRequest.Failure !));
            }

            var call = await ExternalPartyWrapper.Call(warrantyRequest);

            if (!call.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(call.Failure !));
            }
            var rawResponse = call.Success !;

            var saveWarrantyResponse = await BudgetDataWrapper.SaveExternalPartyResponse(
                new ExternalPartyResponse(
                    orderId : request.OrderId,
                    response : JsonConvert.SerializeObject(rawResponse))
            {
                Operation = operation,
                RequestId = requestId,
            });

            if (!saveWarrantyResponse.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(saveWarrantyRequest.Failure !));
            }

            var validateResponse = ResponseValidator.Validate(request, operation, requestId, rawResponse);

            if (!validateResponse.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(validateResponse.Failure !));
            }

            var convertResponse = ResponseConverter.Convert(request, operation, requestId, rawResponse);

            if (!convertResponse.IsSuccess)
            {
                return(new Result <WarrantyCaseResponse, IFailure>(convertResponse.Failure !));
            }
            var convertedResponse = convertResponse.Success !;

            if (operation == WarrantyCaseOperation.Commit &&
                convertedResponse.WarrantyCaseStatus == WarrantyCaseStatus.Committed)
            {
                var saveWarrantyProof = await ComprehensiveDataWrapper.SaveWarrantyProof(
                    new WarrantyProof(
                        orderId : request.OrderId,
                        warrantyCaseId : convertedResponse.WarrantyCaseId,
                        proof : rawResponse.Body !.OrderReports.Single().WarrantyProof !)
                {
                    RequestId = requestId,
                });
Ejemplo n.º 3
0
            public ValidatableResponseValidator()
            {
                RuleFor(y => y.WarrantyResponse.Header).NotNull();
                When(y => y.WarrantyResponse.Header != null, () =>
                {
                    RuleFor(y => y.WarrantyResponse.Header.RequestId).Equal(y => y.RequestId);
                    RuleFor(y => y.WarrantyResponse.Header.RequestType).Equal(y => OperationRequestTypeMap[y.Operation]);
                    RuleFor(y => y.WarrantyResponse.Header.Action).Equal(y => OperationActionMap[y.Operation]);
                    RuleFor(y => y.WarrantyResponse.Header.WarrantyCaseId).NotEmpty();
                    When(y => y.Operation != WarrantyCaseOperation.Create, () =>
                    {
                        RuleFor(y => y.WarrantyResponse.Header.WarrantyCaseId).Equal(y => y.Request.WarrantyCaseId);
                    });
                    RuleFor(y => y.WarrantyResponse.Header.WarrantyResponseErrors).Empty();
                });

                RuleFor(y => y.WarrantyResponse.Body).NotNull();
                When(y => y.WarrantyResponse.Body != null, () =>
                {
                    RuleFor(y => y.WarrantyResponse.Body !.CaseStatus).IsInEnum();
                    RuleFor(y => y.WarrantyResponse.Body !.ConformanceIndicator)
                    .Must(c => c.Equals("YES") || c.Equals("NO"));
                    When(y => y.WarrantyResponse.Body !.CaseStatus != CaseStatus.Cancelled, () =>
                    {
                        RuleFor(y => y.WarrantyResponse.Body !.OrderReports)
                        .Cascade(CascadeMode.Stop)
                        .NotEmpty()
                        .Must(rs => rs.Count() == 1)
                        .WithMessage("Must have one element in {PropertyName}.")
                        .Must((y, rs) => rs.Single().OrderId == y.Request.OrderId)
                        .WithMessage("OrderReport's OrderId must be the same as the request's.");
                        When(y => y.WarrantyResponse.Body !.OrderReports.Count() == 1, () =>
                        {
                            RuleForEach(y => y.WarrantyResponse.Body !.OrderReports).ChildRules(orderReportRule =>
                            {
                                orderReportRule.RuleFor(r => r.ConformanceIndicator)
                                .Must(c => c.Equals("YES") || c.Equals("NO"));
                                orderReportRule.RuleForEach(r => r.ConformanceMessages).ChildRules(conformanceMessageRule =>
                                {
                                    conformanceMessageRule.RuleFor(m => m.Level).IsInEnum();
                                    conformanceMessageRule.RuleFor(m => m.Message).NotEmpty();
                                });
                            });
                        });
                        When(y => y.WarrantyResponse.Body !.CaseStatus == CaseStatus.Certified, () =>
                        {
                            RuleForEach(y => y.WarrantyResponse.Body !.OrderReports).ChildRules(orderReportRule =>
                            {
                                orderReportRule.RuleFor(r => r.ConformanceIndicator).Equal("YES");
                                orderReportRule.RuleFor(r => r.WarrantyAmount).Must(a => a.HasValue);
                            });
                        });
                        When(y =>
                             y.WarrantyResponse.Body !.CaseStatus == CaseStatus.Committed ||
                             y.WarrantyResponse.Body !.CaseStatus == CaseStatus.Completed,
                             () =>
                        {
                            RuleForEach(y => y.WarrantyResponse.Body !.OrderReports).ChildRules(orderReportRule =>
                            {
                                orderReportRule.RuleFor(r => r.ConformanceIndicator).Equal("YES");
                                orderReportRule.RuleFor(r => r.WarrantyAmount).Must(a => a.HasValue);
                                orderReportRule.RuleFor(r => r.WarrantyProof).NotEmpty();
                            });
                        });
                    });
                });