publicResult<User>ValidateUser(Useruser){returnResultPipeline<User>.StartWith(user).Ensure(u=>u.Email!=null,"Email cannot be null").Ensure(u=>IsValidEmail(u.Email),"Invalid email format").Ensure(u=>u.Password!=null,"Password cannot be null").Ensure(u=>IsStrongPassword(u.Password),"Weak password").Then(ValidateUserAge).Then(ValidateUserLocation).Build();}
publicasyncTask<Result<User>>ValidateUserAsync(Useruser){returnawaitResultPipeline<User>.StartWith(user).EnsureAsync(asyncu=>awaitIsEmailUniqueAsync(u.Email),"Email already in use").EnsureAsync(asyncu=>awaitIsUsernameAvailableAsync(u.Username),"Username taken").ThenAsync(asyncu=>awaitValidateUserLocationAsync(u)).BuildAsync();}
publicResult<OrderEvent>ValidateAndProcessEvent(OrderEvent@event){returnResultPipeline<OrderEvent>.StartWith(@event).Ensure(e=>e.Timestamp<=DateTime.UtcNow,"Event cannot be in the future").Ensure(e=>e.Version>0,"Invalid version").Then(ValidateEventData).Then(ApplyEvent).Build();}
publicResult<User>ValidateAndCreateUser(UserRequestrequest){varvalidationResult=ValidationResult.Create().AddErrorIf(string.IsNullOrEmpty(request.Name),"Name","Name is required").AddErrorIf(!IsValidEmail(request.Email),"Email","Invalid email format").AddErrorIf(request.Age<18,"Age","User must be at least 18 years old");if(!validationResult.IsValid){returnResult<User>.Failure(Error.Create(ErrorCode.ValidationError,"Validation failed",newDictionary<string,object>{{"Errors",validationResult.Errors}}));}returnResult<User>.Success(newUser{Name=request.Name,Email=request.Email,Age=request.Age});}
publicResult<Order>ProcessOrder(OrderRequestrequest){try{varorder=CreateOrder(request);returnResult<Order>.Success(order);}catch(Exceptionex){returnResult<Order>.Failure(Error.Create(ErrorCode.InvalidOperation,"Failed to process order",newDictionary<string,object>{{"Request",request},{"Exception",ex},{"Timestamp",DateTime.UtcNow}}));}}
publicResult<User>GetUser(intuserId){returnResultFactory.FromDatabaseOperation(()=>_dbContext.Users.Find(userId),"GetUser").Catch(error=>{if(error.Code==ErrorCode.DatabaseError){returnResult<User>.Failure(Error.Create(ErrorCode.NotFound,"User not found",newDictionary<string,object>{{"UserId",userId}}));}returnResult<User>.Failure(error);});}
publicUserGetUserOrThrow(Result<User>userResult){returnuserResult.GetValueOrThrow(error=>newUserNotFoundException($"User not found: {error.Message}"));}