using Microsoft.EntityFrameworkCore; using System.Linq; using System.Collections.Generic; using System.IO; using System.Runtime.CompilerServices; using System.Text.Json; using SZUAbsolventenverein.Module.AdminModules.Models; using Oqtane.Modules; namespace SZUAbsolventenverein.Module.AdminModules.Repository { /// /// Repository to manage admin settings in the database. /// public interface IAdminSettingsRepository { /// /// Retrieves the administrative settings entry from the Database. /// /// An object containing the settings for the specified module. Returns if the module is not found. Models.AdminSetting GetAdminSetting(); /// /// Updates the administrative settings with the specified values. /// /// The new administrative settings to apply. Cannot be null. /// The updated object reflecting the applied changes. Models.AdminSetting SetAdminSettings(Models.AdminSetting adminSetting); } /// /// Implementation of the interface for managing admin settings in the database. /// public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService { public AdminSettingsRepository() { } public AdminSetting GetAdminSetting() { return AdminSettingsExtensions.LoadSettings(); } public AdminSetting SetAdminSettings(AdminSetting adminSetting) { return adminSetting.SaveChanges(); } } /// /// Extension methods for saving and loading admin settings to/from a JSON file. /// public static class AdminSettingsExtensions { /// /// Path to the JSON file where admin settings are stored. /// private static string path = "AdminSettings.json"; /// /// Saves the adminSettingsObject to a JSON file. /// /// Settings to save /// The same AdminSettings object for chaining of Operations public static AdminSetting SaveChanges(this AdminSetting adminSetting) { string res = JsonSerializer.Serialize(adminSetting); File.WriteAllText(path, res); return adminSetting; } /// /// Loads the admin settings from the JSON file. If the file does not exist, returns a new AdminSetting object with default (0) values. /// /// public static AdminSetting LoadSettings() { if (File.Exists(path)) { string json = File.ReadAllText(path); return JsonSerializer.Deserialize(json); } return new AdminSetting(); } } }