Пример #1
0
        public UpdatableProperties UpdateProperties(UpdatableProperties updatableProperties)
        {
            int updatedQuality = 0;

            if (updatableProperties.SellIn > 10)
            {
                updatedQuality = updatableProperties.Quality + 1;
            }

            if (updatableProperties.SellIn > 5 && updatableProperties.SellIn <= 10)
            {
                updatedQuality = updatableProperties.Quality + 2;
            }

            if (updatableProperties.SellIn > 0 && updatableProperties.SellIn <= 5)
            {
                updatedQuality = updatableProperties.Quality + 3;
            }

            if (updatedQuality > 50)
            {
                updatedQuality = 50;
            }

            return(new UpdatableProperties(updatableProperties.SellIn - 1, updatedQuality));
        }
Пример #2
0
        public UpdatableProperties UpdateProperties(UpdatableProperties updatableProperties)
        {
            int quality = updatableProperties.Quality;

            if (updatableProperties.Quality < 50)
            {
                quality = updatableProperties.Quality + 1;
            }

            return(new UpdatableProperties(updatableProperties.SellIn - 1, quality));
        }
Пример #3
0
        public UpdatableProperties UpdateProperties(UpdatableProperties updatableProperties)
        {
            int quality;

            if (updatableProperties.SellIn <= 0)
            {
                quality = updatableProperties.Quality - 2;
            }
            else
            {
                quality = updatableProperties.Quality - 1;
            }

            if (quality < 0)
            {
                quality = 0;
            }

            return(new UpdatableProperties(updatableProperties.SellIn - 1, quality));
        }
Пример #4
0
        public static bool TryParsingRequestFor <T>(
            HttpListenerContext _Context,
            out JObject _SuccessResultJson,
            bool _bDeserialize, out T _SuccessResultDeserialized,
            out BWebServiceResponse _FailureResponse,
            Action <string> _ErrorMessageAction = null)
        {
            _FailureResponse           = BWebResponse.InternalError("");
            _SuccessResultDeserialized = default;
            _SuccessResultJson         = null;

            string[] MustHaveProperties;
            string[] UpdatableProperties;
            Dictionary <string, Func <JToken, bool> > UpdatablePropertiesValidityCheck;

            if (typeof(T) == typeof(ModelDBEntry))
            {
                MustHaveProperties  = ModelDBEntry.MustHaveProperties;
                UpdatableProperties = ModelDBEntry.UpdatableProperties;
                UpdatablePropertiesValidityCheck = ModelDBEntry.UpdatablePropertiesValidityCheck;
            }
            else if (typeof(T) == typeof(Revision))
            {
                MustHaveProperties  = Revision.MustHaveProperties;
                UpdatableProperties = Revision.UpdatableProperties;
                UpdatablePropertiesValidityCheck = Revision.UpdatablePropertiesValidityCheck;
            }
            else if (typeof(T) == typeof(FileEntry))
            {
                MustHaveProperties  = null;
                UpdatableProperties = FileEntry.UpdatableProperties;
                UpdatablePropertiesValidityCheck = FileEntry.UpdatablePropertiesValidityCheck;
            }
            else
            {
                throw new ArgumentException("Only ModelDBEntry and Revision are supported.");
            }

            using (var InputStream = _Context.Request.InputStream)
            {
                var NewObjectJson = new JObject();

                using (var ResponseReader = new StreamReader(InputStream))
                {
                    try
                    {
                        var ParsedBody = JObject.Parse(ResponseReader.ReadToEnd());

                        var PropertiesList = new List <string>();
                        foreach (var Child in ParsedBody)
                        {
                            PropertiesList.Add(Child.Key);
                        }
                        if (MustHaveProperties != null)
                        {
                            foreach (var MustHaveProperty in MustHaveProperties)
                            {
                                if (!PropertiesList.Contains(MustHaveProperty))
                                {
                                    _FailureResponse = BWebResponse.BadRequest("Request body must contain all necessary fields.");
                                    return(false);
                                }
                            }
                        }

                        foreach (var Child in ParsedBody)
                        {
                            if (!UpdatablePropertiesValidityCheck[Child.Key](Child.Value))
                            {
                                _FailureResponse = BWebResponse.BadRequest("Given field " + Child.Key + " has invalid value.");
                                return(false);
                            }
                            if (UpdatableProperties.Contains(Child.Key))
                            {
                                NewObjectJson[Child.Key] = Child.Value;
                            }
                            else
                            {
                                _FailureResponse = BWebResponse.BadRequest("Unexpected field " + Child.Value.ToString());
                                return(false);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        _ErrorMessageAction?.Invoke("Read request body stage has failed. Exception: " + e.Message + ", Trace: " + e.StackTrace);
                        _FailureResponse = BWebResponse.BadRequest("Malformed request body. Request must be a valid json form.");
                        return(false);
                    }
                }

                //For other elements to be created without any elements
                _SuccessResultJson = NewObjectJson;
                if (_bDeserialize)
                {
                    _SuccessResultDeserialized = JsonConvert.DeserializeObject <T>(NewObjectJson.ToString());
                }
            }

            return(true);
        }
 public UpdatableProperties UpdateProperties(UpdatableProperties updatableProperties)
 {
     return(new UpdatableProperties(updatableProperties.SellIn, updatableProperties.Quality));
 }