// 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()));
        }
Example #2
0
        /// <summary>
        /// This method should be used for creating domain object from DB
        /// </summary>
        /// <returns></returns>

        public static Result <Pizza> Create(int id,
                                            Guid uid,
                                            DateTime createdOn,
                                            DateTime?deletedOn,
                                            PizzaNameValue pizzaName,
                                            PizzaSizeValue 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));
            }

            var pizza = new Pizza
            {
                CreatedOn = createdOn,
                DeletedOn = deletedOn,
                Id        = id,
                Uid       = uid,
                Name      = pizzaName,
                Size      = pizzaSize
            };

            pizza._ingredients.AddRange(ingredients);
            return(Result.Ok(pizza));
        }
Example #3
0
        public Result UpdateSize(PizzaSizeValue newPizzaSize)
        {
            Result resultOrError = CheckEditable();

            if (resultOrError.IsFailure)
            {
                return(resultOrError);
            }

            if (newPizzaSize == default(int))
            {
                return(Result.Invalid(ResultErrorCodes.PIZZA_INVALID_SIZE));
            }

            Size = newPizzaSize;

            MarkModify();

            return(Result.Ok());
        }
Example #4
0
        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));
        }