53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using Nager.Holiday;
|
|
using NodaTime;
|
|
|
|
namespace DysonNetwork.Pass.Account;
|
|
|
|
/// <summary>
|
|
/// Reference from Nager.Holiday
|
|
/// </summary>
|
|
public enum NotableHolidayType
|
|
{
|
|
/// <summary>Public holiday</summary>
|
|
Public,
|
|
/// <summary>Bank holiday, banks and offices are closed</summary>
|
|
Bank,
|
|
/// <summary>School holiday, schools are closed</summary>
|
|
School,
|
|
/// <summary>Authorities are closed</summary>
|
|
Authorities,
|
|
/// <summary>Majority of people take a day off</summary>
|
|
Optional,
|
|
/// <summary>Optional festivity, no paid day off</summary>
|
|
Observance,
|
|
}
|
|
|
|
|
|
public class NotableDay
|
|
{
|
|
public Instant Date { get; set; }
|
|
public string? LocalName { get; set; }
|
|
public string? GlobalName { get; set; }
|
|
public string? CountryCode { get; set; }
|
|
public NotableHolidayType[] Holidays { get; set; } = [];
|
|
|
|
public static NotableDay FromNagerHoliday(PublicHoliday holiday)
|
|
{
|
|
return new NotableDay()
|
|
{
|
|
Date = Instant.FromDateTimeUtc(holiday.Date.ToUniversalTime()),
|
|
LocalName = holiday.LocalName,
|
|
GlobalName = holiday.Name,
|
|
CountryCode = holiday.CountryCode,
|
|
Holidays = holiday.Types?.Select(x => x switch
|
|
{
|
|
PublicHolidayType.Public => NotableHolidayType.Public,
|
|
PublicHolidayType.Bank => NotableHolidayType.Bank,
|
|
PublicHolidayType.School => NotableHolidayType.School,
|
|
PublicHolidayType.Authorities => NotableHolidayType.Authorities,
|
|
PublicHolidayType.Optional => NotableHolidayType.Optional,
|
|
_ => NotableHolidayType.Observance
|
|
}).ToArray() ?? [],
|
|
};
|
|
}
|
|
} |