public DTO.Messages.Wrapper RemoveOne(DTO.Messages.AddToCart ToBeRemoved = null)
        {
            var Result = AuthorizeResponse();

            if (ToBeRemoved == null)
            {
                Result.Messages.Add("PostBody", "can't be empty");
            }
            if (string.IsNullOrWhiteSpace(ToBeRemoved.ProductId))
            {
                Result.Messages.Add("ProductId", "can't be empty");
            }
            if (ToBeRemoved.Quantity == 0)
            {
                Result.Messages.Add("Quantity", "can't be Zero (0)");
            }

            if (Result.Messages.Count > 0)
            {
                Result.Code   = 400;
                Result.Status = "Bad Request";
                return(Result);
            }

            var Session = SessionRepo.GetOne(Token.jti);
            var Removed = false;

            if (ToBeRemoved.Quantity < 0)
            {
                Session.Cart.Remove(ToBeRemoved.ProductId);
                Removed = true;
            }
            else
            {
                Session.Cart.TryGetValue(ToBeRemoved.ProductId, out int Left);
                if (Left < 1 || Left - ToBeRemoved.Quantity < 1)
                {
                    Session.Cart.Remove(ToBeRemoved.ProductId);
                    Removed = true;
                }
                else
                {
                    Session.Cart[ToBeRemoved.ProductId] = (Left - ToBeRemoved.Quantity);
                    Removed = false;
                }
            }
            SessionRepo.Save(Session);

            Result.Messages.Add("ItemStatus", Removed ? "Ok" : "Reduced");
            Result.Data = ToBeRemoved;
            return(Result);
        }
        public DTO.Messages.Wrapper AddOne(DTO.Messages.AddToCart Adding = null)
        {
            var Result = AuthorizeResponse();

            if (Adding == null)
            {
                Result.Messages.Add("PostBody", "can't be empty");
            }
            else
            {
                if (string.IsNullOrWhiteSpace(Adding.ProductId))
                {
                    Result.Messages.Add("ProductId", "can't be empty");
                }
                else
                {
                    var Product = ProductRepo.GetOne(Adding.ProductId);
                    if (Product == null)
                    {
                        Result.Messages.Add("ProductId", "is invalid");
                    }
                    else if (Product.Scored() < 0)
                    {
                        Result.Messages.Add("Product", "is unavailable due to Promotions");
                    }
                }

                if (Adding.Quantity < 1)
                {
                    Result.Messages.Add("Quantity", "must be greater than 0");
                }
            }

            if (Result.Messages.Count > 0)
            {
                Result.Code   = 400;
                Result.Status = "Bad Request";
                return(Result);
            }

            var Session = SessionRepo.GetOne(Token.jti);

            Session.Cart.Add(Adding.ProductId, Adding.Quantity);
            SessionRepo.Save(Session);

            Result.Data = Adding;
            return(Result);
        }