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();
}
}
}