using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace AsbCloudApp.Requests { /// /// класс с фильтрами для запроса /// public class SubsystemRequest: RequestBase, IValidatableObject { private static readonly DateTimeOffset validationMinDate = new DateTimeOffset(2020,01,01,0,0,0, TimeSpan.Zero); /// /// идентификатор скважины /// [Required] public int IdWell { get; set; } /// /// Идентификатор бурильщика /// public int? IdDriller { get; set; } /// /// Больше или равно дате /// public DateTimeOffset? GeDate { get; set; } /// /// Меньше или равно дате /// public DateTimeOffset? LeDate { get; set; } /// /// Больше или равно глубины забоя /// public double? GeDepth { get; set; } /// /// Меньше или равно глубины забоя /// public double? LeDepth { get; set; } /// public IEnumerable Validate(ValidationContext validationContext) { if (GeDate.HasValue && GeDate < validationMinDate) yield return new ValidationResult( $"Должно быть больше {validationMinDate:O})", new[] { nameof(GeDate) }); if (LeDate.HasValue && GeDate.HasValue) { if (LeDate < GeDate) yield return new ValidationResult( $"{nameof(LeDate)} должно быть больше {nameof(GeDate)}. ({LeDate:O} < {GeDate:O})", new[] { nameof(LeDate), nameof(GeDate) }); } if (LeDepth.HasValue && GeDepth.HasValue) { if (LeDepth < GeDepth) yield return new ValidationResult( $"{nameof(LeDepth)} должно быть больше {nameof(GeDepth)}. ({LeDepth} < {GeDepth})", new[] { nameof(LeDepth), nameof(GeDepth) }); } yield break; } } }