From 266e66a35c7ed05fe09ba34ef70116b53e46af85 Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Tue, 28 May 2024 06:38:24 +0300 Subject: [PATCH] feat: expand the configuration functionality --- .../Configuration/General/GeneralConfig.cs | 14 ++++++ .../General/Settings/CacheSettings.cs | 23 ++++++++++ .../General/Settings/DbSettings.cs | 22 +++++++++ .../General/Settings/EmailSettings.cs | 23 ++++++++++ .../General/Settings/LogSettings.cs | 19 ++++++++ .../General/Settings/ScheduleSettings.cs | 45 +++++++++++++++++++ Endpoint/Properties/Settings.cs | 36 --------------- 7 files changed, 146 insertions(+), 36 deletions(-) create mode 100644 Endpoint/Configuration/General/GeneralConfig.cs create mode 100644 Endpoint/Configuration/General/Settings/CacheSettings.cs create mode 100644 Endpoint/Configuration/General/Settings/DbSettings.cs create mode 100644 Endpoint/Configuration/General/Settings/EmailSettings.cs create mode 100644 Endpoint/Configuration/General/Settings/LogSettings.cs create mode 100644 Endpoint/Configuration/General/Settings/ScheduleSettings.cs delete mode 100644 Endpoint/Properties/Settings.cs diff --git a/Endpoint/Configuration/General/GeneralConfig.cs b/Endpoint/Configuration/General/GeneralConfig.cs new file mode 100644 index 0000000..60f98a1 --- /dev/null +++ b/Endpoint/Configuration/General/GeneralConfig.cs @@ -0,0 +1,14 @@ +using Mirea.Api.Endpoint.Configuration.General.Settings; + +namespace Mirea.Api.Endpoint.Configuration.General; + +public class GeneralConfig +{ + public const string FilePath = "Settings.json"; + + public DbSettings? DbSettings { get; set; } + public CacheSettings? CacheSettings { get; set; } + public ScheduleSettings? ScheduleSettings { get; set; } + public EmailSettings? EmailSettings { get; set; } + public LogSettings? LogSettings { get; set; } +} \ No newline at end of file diff --git a/Endpoint/Configuration/General/Settings/CacheSettings.cs b/Endpoint/Configuration/General/Settings/CacheSettings.cs new file mode 100644 index 0000000..a0a7802 --- /dev/null +++ b/Endpoint/Configuration/General/Settings/CacheSettings.cs @@ -0,0 +1,23 @@ +using Mirea.Api.Endpoint.Configuration.General.Attributes; +using Mirea.Api.Endpoint.Configuration.General.Interfaces; + +namespace Mirea.Api.Endpoint.Configuration.General.Settings; + +[RequiredSettings] +public class CacheSettings : IIsConfigured +{ + public enum CacheEnum + { + Memcached, + Redis + } + + public CacheEnum TypeDatabase { get; set; } + public string? ConnectionString { get; set; } + + public bool IsConfigured() + { + return TypeDatabase == CacheEnum.Memcached || + !string.IsNullOrEmpty(ConnectionString); + } +} \ No newline at end of file diff --git a/Endpoint/Configuration/General/Settings/DbSettings.cs b/Endpoint/Configuration/General/Settings/DbSettings.cs new file mode 100644 index 0000000..f8ae35e --- /dev/null +++ b/Endpoint/Configuration/General/Settings/DbSettings.cs @@ -0,0 +1,22 @@ +using Mirea.Api.Endpoint.Configuration.General.Attributes; +using Mirea.Api.Endpoint.Configuration.General.Interfaces; + +namespace Mirea.Api.Endpoint.Configuration.General.Settings; + +[RequiredSettings] +public class DbSettings : IIsConfigured +{ + public enum DatabaseEnum + { + Mysql, + Sqlite, + PostgresSql + } + public DatabaseEnum TypeDatabase { get; set; } + public required string ConnectionStringSql { get; set; } + + public bool IsConfigured() + { + return !string.IsNullOrEmpty(ConnectionStringSql); + } +} \ No newline at end of file diff --git a/Endpoint/Configuration/General/Settings/EmailSettings.cs b/Endpoint/Configuration/General/Settings/EmailSettings.cs new file mode 100644 index 0000000..bdd5179 --- /dev/null +++ b/Endpoint/Configuration/General/Settings/EmailSettings.cs @@ -0,0 +1,23 @@ +using Mirea.Api.Endpoint.Configuration.General.Interfaces; + +namespace Mirea.Api.Endpoint.Configuration.General.Settings; + +public class EmailSettings : IIsConfigured +{ + public string? Server { get; set; } + public string? User { get; set; } + public string? Password { get; set; } + public string? From { get; set; } + public int? Port { get; set; } + public bool? Ssl { get; set; } + + public bool IsConfigured() + { + return !string.IsNullOrEmpty(Server) && + !string.IsNullOrEmpty(User) && + !string.IsNullOrEmpty(Password) && + !string.IsNullOrEmpty(From) && + Port.HasValue && + Ssl.HasValue; + } +} \ No newline at end of file diff --git a/Endpoint/Configuration/General/Settings/LogSettings.cs b/Endpoint/Configuration/General/Settings/LogSettings.cs new file mode 100644 index 0000000..4a42d28 --- /dev/null +++ b/Endpoint/Configuration/General/Settings/LogSettings.cs @@ -0,0 +1,19 @@ +using Mirea.Api.Endpoint.Configuration.General.Attributes; +using Mirea.Api.Endpoint.Configuration.General.Interfaces; + +namespace Mirea.Api.Endpoint.Configuration.General.Settings; + +[RequiredSettings] +public class LogSettings : IIsConfigured +{ + public bool EnableLogToFile { get; set; } + public string? LogFilePath { get; set; } + public string? LogFileName { get; set; } + + public bool IsConfigured() + { + return !EnableLogToFile || + !string.IsNullOrEmpty(LogFilePath) && + !string.IsNullOrEmpty(LogFileName); + } +} \ No newline at end of file diff --git a/Endpoint/Configuration/General/Settings/ScheduleSettings.cs b/Endpoint/Configuration/General/Settings/ScheduleSettings.cs new file mode 100644 index 0000000..a45b41f --- /dev/null +++ b/Endpoint/Configuration/General/Settings/ScheduleSettings.cs @@ -0,0 +1,45 @@ +using Mirea.Api.Endpoint.Configuration.General.Attributes; +using Mirea.Api.Endpoint.Configuration.General.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Mirea.Api.Endpoint.Configuration.General.Settings; + +[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 required string CronUpdateSchedule { get; set; } + public DateOnly StartTerm { get; set; } + public required IDictionary PairPeriod { get; set; } + + public bool IsConfigured() + { + return !string.IsNullOrEmpty(CronUpdateSchedule) && + StartTerm != default && + PairPeriod.Count != 0 && + PairPeriod.Any(); + } +} \ No newline at end of file diff --git a/Endpoint/Properties/Settings.cs b/Endpoint/Properties/Settings.cs deleted file mode 100644 index 1bee892..0000000 --- a/Endpoint/Properties/Settings.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Mirea.Api.DataAccess.Persistence.Properties; - -namespace Mirea.Api.Endpoint.Properties; - -public class EmailSettings -{ - public string? Server { get; set; } - public string? User { get; set; } - public string? Password { get; set; } - public string? From { get; set; } - public int? Port { get; set; } - public bool? Ssl { get; set; } -} - -public class LogSettings -{ - public bool EnableLogToFile { get; set; } - public string? LogFilePath { get; set; } - public string? LogFileName { get; set; } -} - -public class ScheduleSettings -{ - // Every 6 hours - public string CronUpdateSchedule { get; set; } = "0 0 0/6 * * *"; -} - -public class Settings -{ - public const string FilePath = "Settings.json"; - - public EmailSettings? EmailSettings { get; set; } - public LogSettings? LogSettings { get; set; } - public DbSettings? DbSettings { get; set; } - public ScheduleSettings? ScheduleSettings { get; set; } -} \ No newline at end of file