/// <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, }); }
/// <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, }, }, }; }