69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Mirea.Api.Endpoint.Configuration.Validation.Attributes;
 | |
| using Mirea.Api.Endpoint.Configuration.Validation.Interfaces;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| 
 | |
| namespace Mirea.Api.Endpoint.Configuration.Model.GeneralSettings;
 | |
| 
 | |
| [RequiredSettings]
 | |
| public class ScheduleSettings : IIsConfigured
 | |
| {
 | |
|     public struct PairPeriodTime
 | |
|     {
 | |
|         public TimeOnly Start { get; set; }
 | |
|         public TimeOnly End { get; set; }
 | |
| 
 | |
|         public PairPeriodTime(TimeOnly t1, TimeOnly t2)
 | |
|         {
 | |
|             if (t1 > t2)
 | |
|             {
 | |
|                 Start = t2;
 | |
|                 End = t1;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Start = t1;
 | |
|                 End = t2;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public PairPeriodTime(Dto.Common.PairPeriodTime time) : this(time.Start, time.End) { }
 | |
|     }
 | |
| 
 | |
|     public record struct CronUpdateSkip
 | |
|     {
 | |
|         public DateOnly? Start { get; set; }
 | |
|         public DateOnly? End { get; set; }
 | |
|         public DateOnly? Date { get; set; }
 | |
| 
 | |
|         public CronUpdateSkip(DateOnly d1, DateOnly d2)
 | |
|         {
 | |
|             if (d1 > d2)
 | |
|             {
 | |
|                 Start = d2;
 | |
|                 End = d1;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Start = d1;
 | |
|                 End = d2;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public CronUpdateSkip(DateOnly d1) => Date = d1;
 | |
|     }
 | |
| 
 | |
|     public required string CronUpdateSchedule { get; set; }
 | |
|     public DateOnly StartTerm { get; set; }
 | |
|     public required IDictionary<int, PairPeriodTime> PairPeriod { get; set; }
 | |
|     public List<CronUpdateSkip> CronUpdateSkipDateList { get; set; } = [];
 | |
| 
 | |
|     public bool IsConfigured()
 | |
|     {
 | |
|         return !string.IsNullOrEmpty(CronUpdateSchedule) &&
 | |
|                StartTerm != default &&
 | |
|                PairPeriod.Count != 0 &&
 | |
|                PairPeriod.Any();
 | |
|     }
 | |
| } |