// Storage to domain public static Result <Pizza> ToPizzaDomain(this Entities.Pizza dbPizza) { Result <PizzaNameValue> pizzaNameOrError = PizzaNameValue.Create(dbPizza.Name); Result <PizzaSizeValue> pizzaSizeOrError = PizzaSizeValue.Create(dbPizza.Size); Result okOrError = Result.FirstFailureOrOk(pizzaNameOrError, pizzaSizeOrError); if (okOrError.IsFailure) { return(Result.FromError <Pizza>(okOrError)); } ICollection <Result <Ingredient> > ingredientResults = dbPizza.Ingredients .Where(ingredient => ingredient.DeletedOn == null) .Select(ingredient => ingredient.ToIngredientDomain()).ToList(); Result ingredientsOrError = Result.FirstFailureOrOk(ingredientResults); if (ingredientsOrError.IsFailure) { return(Result.FromError <Pizza>(ingredientsOrError)); } return(Pizza.Create(dbPizza.Id, dbPizza.Uid, dbPizza.CreatedOn, dbPizza.DeletedOn, pizzaNameOrError.Value, pizzaSizeOrError.Value, ingredientResults.Select(ingredient => ingredient.Value).ToList())); }
public static Result <Pizza> Create(Guid uid, DateTime createdOn, string pizzaName, int pizzaSize, ICollection <Ingredient> ingredients) { if (uid == default(Guid)) { return(Result.Invalid <Pizza>(ResultErrorCodes.PIZZA_INVALID_UID)); } if (createdOn == default(DateTime)) { return(Result.Invalid <Pizza>(ResultErrorCodes.PIZZA_INVALID_CREATED_ON)); } Result <PizzaNameValue> pizzaNameOrError = PizzaNameValue.Create(pizzaName); Result <PizzaSizeValue> pizzaSizeOrError = PizzaSizeValue.Create(pizzaSize); Result okOrError = Result.FirstFailureOrOk(pizzaNameOrError, pizzaSizeOrError); if (okOrError.IsFailure) { return(Result.FromError <Pizza>(okOrError)); } var pizza = new Pizza { CreatedOn = createdOn, Uid = uid, Name = pizzaNameOrError.Value, Size = pizzaSizeOrError.Value }; pizza._ingredients.AddRange(ingredients); return(Result.Ok(pizza)); }