publicclassOrderService{publicasyncTask<Result<Order>>ProcessOrderAsync(OrderRequestrequest){returnawaitResultPipeline<Order>.Start(request).Then(ValidateOrderRequest).ThenAsync(asyncvalidRequest=>awaitCheckInventoryAsync(validRequest)).ThenAsync(asyncinventory=>awaitCalculateTotalAsync(inventory)).ThenAsync(asynctotal=>awaitProcessPaymentAsync(total)).ThenAsync(asyncpayment=>awaitCreateOrderAsync(payment)).ThenAsync(asyncorder=>awaitSendConfirmationEmailAsync(order)).WithRetry(maxAttempts:3,delay:TimeSpan.FromSeconds(1)).WithTimeout(TimeSpan.FromSeconds(30)).BuildAsync();}privateResult<OrderRequest>ValidateOrderRequest(OrderRequestrequest){varvalidationResult=ValidationResult.Create().AddErrorIf(request.Items.Count==0,"Items","Order must contain at least one item").AddErrorIf(request.ShippingAddress==null,"ShippingAddress","Shipping address is required").AddErrorIf(request.PaymentMethod==null,"PaymentMethod","Payment method is required");returnvalidationResult.IsValid?Result<OrderRequest>.Success(request):Result<OrderRequest>.Failure(Error.Create(ErrorCode.ValidationError,"Invalid order request",newDictionary<string,object>{{"Errors",validationResult.Errors}}));}}
publicclassTransferService{publicasyncTask<Result<Transfer>>ProcessTransferAsync(TransferRequestrequest){returnawaitResultPipeline<Transfer>.Start(request).Then(ValidateTransferRequest).ThenAsync(asyncvalidRequest=>awaitCheckAccountBalanceAsync(validRequest)).ThenAsync(asyncbalance=>awaitVerifyTransferLimitAsync(balance)).ThenAsync(asyncverified=>awaitExecuteTransferAsync(verified)).ThenAsync(asynctransfer=>awaitSendTransferNotificationAsync(transfer)).WithTimeout(TimeSpan.FromSeconds(60)).WithRetry(3,TimeSpan.FromSeconds(5)).BuildAsync();}privateResult<TransferRequest>ValidateTransferRequest(TransferRequestrequest){varvalidationResult=ValidationResult.Create().AddErrorIf(request.Amount<=0,"Amount","Transfer amount must be positive").AddErrorIf(request.SourceAccountId==request.TargetAccountId,"Accounts","Source and target accounts must be different").AddErrorIf(string.IsNullOrEmpty(request.Description),"Description","Transfer description is required");returnvalidationResult.IsValid?Result<TransferRequest>.Success(request):Result<TransferRequest>.Failure(Error.Create(ErrorCode.ValidationError,"Invalid transfer request",newDictionary<string,object>{{"Errors",validationResult.Errors}}));}}
publicclassUserService{publicasyncTask<Result<User>>RegisterUserAsync(UserRegistrationrequest){returnawaitResultPipeline<User>.Start(request).Then(ValidateUserData).ThenAsync(asyncvalidData=>awaitCheckEmailAvailabilityAsync(validData)).ThenAsync(asyncavailable=>awaitHashPasswordAsync(available)).ThenAsync(asynchashed=>awaitCreateUserAsync(hashed)).ThenAsync(asyncuser=>awaitSendWelcomeEmailAsync(user)).BuildAsync();}privateResult<UserRegistration>ValidateUserData(UserRegistrationrequest){varvalidationResult=ValidationResult.Create().AddErrorIf(string.IsNullOrEmpty(request.Email),"Email","Email is required").AddErrorIf(!IsValidEmail(request.Email),"Email","Invalid email format").AddErrorIf(string.IsNullOrEmpty(request.Password),"Password","Password is required").AddErrorIf(request.Password.Length<8,"Password","Password must be at least 8 characters").AddErrorIf(request.Age<18,"Age","User must be at least 18 years old");returnvalidationResult.IsValid?Result<UserRegistration>.Success(request):Result<UserRegistration>.Failure(Error.Create(ErrorCode.ValidationError,"Invalid user registration data",newDictionary<string,object>{{"Errors",validationResult.Errors}}));}}
publicclassApiGateway{publicasyncTask<Result<ApiResponse>>ProcessRequestAsync(ApiRequestrequest){returnawaitResultPipeline<ApiResponse>.Start(request).Then(ValidateApiRequest).ThenAsync(asyncvalidRequest=>awaitAuthenticateRequestAsync(validRequest)).ThenAsync(asyncauthenticated=>awaitAuthorizeRequestAsync(authenticated)).ThenAsync(asyncauthorized=>awaitRateLimitRequestAsync(authorized)).ThenAsync(asynclimited=>awaitProcessRequestAsync(limited)).ThenAsync(asyncresponse=>awaitLogRequestAsync(response)).WithTimeout(TimeSpan.FromSeconds(10)).WithRetry(2,TimeSpan.FromSeconds(1)).BuildAsync();}privateResult<ApiRequest>ValidateApiRequest(ApiRequestrequest){varvalidationResult=ValidationResult.Create().AddErrorIf(string.IsNullOrEmpty(request.Endpoint),"Endpoint","API endpoint is required").AddErrorIf(request.Headers==null,"Headers","Request headers are required").AddErrorIf(request.Timestamp>DateTime.UtcNow.AddMinutes(5),"Timestamp","Request timestamp is too far in the future");returnvalidationResult.IsValid?Result<ApiRequest>.Success(request):Result<ApiRequest>.Failure(Error.Create(ErrorCode.ValidationError,"Invalid API request",newDictionary<string,object>{{"Errors",validationResult.Errors}}));}}