/// <summary>
        /// Создает пустой класс ответа, устанавливая поля ErrorCode и Message в указанные значения.
        /// </summary>
        /// <param name="request">Запрос.</param>
        /// <param name="errorCode">Значение для поля <see cref="ResponseBase.ErrorCode"/>.</param>
        /// <param name="message">Значение для поля <see cref="ResponseBase.Message"/>.</param>
        /// <returns>Ответ с установленными полями <see cref="ResponseBase.Status"/>, <see cref="ResponseBase.ErrorCode"/>, <see cref="ResponseBase.Message"/>.</returns>
        /// <remarks>Если передать значение 0 для <paramref name="errorCode"/>, то будет создан "успешный" ответ, иначе "ошибочный".</remarks>
        public static UpdatePharmaciesResponse CreateEmptyResponse(
            this UpdatePharmaciesRequest request,
            int errorCode,
            string message)
        {
            request = request ?? throw new ArgumentNullException(nameof(request));

            if (string.IsNullOrEmpty(message))
            {
                throw new ArgumentNullException(nameof(message));
            }

            return(new UpdatePharmaciesResponse
            {
                Status = errorCode == 0 ? Globals.StatusSuccess : Globals.StatusError,
                ErrorCode = errorCode,
                Message = message,
            });
        }
Esempio n. 2
0
        /// <summary>
        /// Выполняет валидацию объекта с учётом вложенных коллекций (Orders, Products, ...), используя <see cref="ProtocolSettings">параметры протокола</see>, заданные в конструкторе.
        /// </summary>
        /// <param name="instance">Экземпляр объекта для проверки.</param>
        /// <param name="results">Список, который необходимо заполнить ошибками (если они будут найдены).</param>
        /// <returns>Результат валидации: <b>true</b> в случае успешной валидации или <b>false</b> если были обнаружены ошибки.</returns>
        public bool TryValidateObject(object instance, out List <ValidationResult> results)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            var psp = new ProtocolSettingsServiceProvider(protocolSettings);

            var vc = new ValidationContext(instance, psp, null);

            results = new List <ValidationResult>();

            var isValid = Validator.TryValidateObject(instance, vc, results, true);

            IEnumerable <object>?children = instance switch
            {
                GetDiscountRequest gdr => gdr.Orders,
                GetDiscountResponse gdr => gdr.Orders,
                ConfirmPurchaseRequest cpr => cpr.Skus,
                GetProgramsResponse gpr => gpr.Programs,
                GetProductsResponse gpr => gpr.Products,
                UpdatePharmaciesRequest upr => upr.Pharmacies,
                                _ => null,
            };

            if (children != null)
            {
                foreach (var child in children)
                {
                    if (child != null)
                    {
                        var childvc = new ValidationContext(child, psp, null);
                        isValid &= Validator.TryValidateObject(child, childvc, results, true);
                    }
                }
            }

            return(isValid);
        }
 public UpdatePharmaciesRequestValidationTests()
 {
     validValue = new UpdatePharmaciesRequest
     {
         UpdateMode = Globals.UpdateModeMerge,
         Pharmacies = new List <UpdatePharmaciesRequest.Pharmacy>()
         {
             new UpdatePharmaciesRequest.Pharmacy
             {
                 Id       = "apt1",
                 Brand    = "Sample",
                 Region   = "Center",
                 City     = "Moscow",
                 Address  = "Central street, 1",
                 Gps      = "55.55, 37.37",
                 WorkTime = "sometimes",
                 Phones   = "Yes, we have",
                 Disabled = true,
             },
         },
     };
 }