using PARR.BLL.Services.Interfaces; namespace PARR.BLL.Services.Implementations { public delegate Task> GetWeekendsDelegate(DateOnly start, DateOnly end); internal class CalendarService : ICalendarService { private DateOnly GetEndPeriodDate(DateOnly startPeriod, TimeSpan distributionPeriod) { return startPeriod.AddDays(distributionPeriod.Days).AddDays(-1); } public async Task> GetWorkDatesForPeriodAsync(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends) { var endPeriod = GetEndPeriodDate(startPeriod, distributionPeriod); var weekends = await getWeekends.Invoke(startPeriod, endPeriod); //TODO: logic!!! //временно сделаем список руками рабочих дней var workDates = new List(); return workDates; } } public class Test { private readonly ICalendarService calendarService; public Test(ICalendarService calendarService) { this.calendarService = calendarService; } public async void Ttt() { var tService = new TestService(); // var endPeriod = calendarService.GetEndPeriodDate(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00")); var workDays = await calendarService.GetWorkDatesForPeriodAsync(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00"), tService.GetWeekendsAsync); } } public class TestService { public async Task> GetWeekendsAsync(DateOnly start, DateOnly end) { await Task.Delay(1000); return new List { new DateOnly(2024, 1, 12) }; } } }