using System.Linq.Expressions; using NejCommon.Utils; namespace NejCommon.Models; public class DateTimeOffsetFrame : IEquatable { public DateTimeOffsetFrame(){ } public DateTimeOffsetFrame(DateTimeOffset fromDate, DateTimeOffset toDate) { FromDate = fromDate; ToDate = toDate; } public DateTimeOffset FromDate { get; set; } = DateTimeOffset.MinValue; public DateTimeOffset ToDate { get; set; } = DateTimeOffset.MaxValue; public override string ToString() { var from = (FromDate == DateTimeOffset.MinValue) ? "" : ("-" + FromDate.ToString("yyyy-MM-dd")); var to = (ToDate == DateTimeOffset.MaxValue) ? "" : ("-" + ToDate.ToString("yyyy-MM-dd")); return $"{from}{to}"; } public static Expression> Conditional(Expression> dateAcessor, DateTimeOffsetFrame frame) { return e => dateAcessor.Compile()(e) >= frame.FromDate && dateAcessor.Compile()(e) <= frame.ToDate; } public DateOnlyFrame ToDateOnlyFrame() { return new DateOnlyFrame(FromDate.ToDateOnly(), ToDate.ToDateOnly()); } public bool Equals(DateTimeOffsetFrame? other) { if (other is null) return false; return this.FromDate == other.FromDate && this.ToDate == other.ToDate; } public override int GetHashCode() => HashCode.Combine(FromDate, ToDate); public static bool operator ==(DateTimeOffsetFrame? left, DateTimeOffsetFrame? right) => left?.Equals(right) ?? right is null; public static bool operator !=(DateTimeOffsetFrame? left, DateTimeOffsetFrame? right) => !(left?.Equals(right) ?? right is null); }