92 lines
3.2 KiB
C#
92 lines
3.2 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Repository to manage admin settings in the database.
|
|
/// </summary>
|
|
public interface IAdminSettingsRepository
|
|
{
|
|
/// <summary>
|
|
/// Retrieves the administrative settings entry from the Database.
|
|
/// </summary>
|
|
/// <returns>An <see cref="Models.AdminSetting"/> object containing the settings for the specified module. Returns <see
|
|
/// langword="null"/> if the module is not found.</returns>
|
|
Models.AdminSetting GetAdminSetting();
|
|
|
|
/// <summary>
|
|
/// Updates the administrative settings with the specified values.
|
|
/// </summary>
|
|
/// <param name="adminSetting">The new administrative settings to apply. Cannot be null.</param>
|
|
/// <returns>The updated <see cref="Models.AdminSetting"/> object reflecting the applied changes.</returns>
|
|
Models.AdminSetting SetAdminSettings(Models.AdminSetting adminSetting);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Implementation of the <see cref="IAdminSettingsRepository"/> interface for managing admin settings in the database.
|
|
/// </summary>
|
|
public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService
|
|
{
|
|
public AdminSettingsRepository()
|
|
{
|
|
}
|
|
|
|
public AdminSetting GetAdminSetting()
|
|
{
|
|
return AdminSettingsExtensions.LoadSettings();
|
|
}
|
|
|
|
public AdminSetting SetAdminSettings(AdminSetting adminSetting)
|
|
{
|
|
return adminSetting.SaveChanges();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Extension methods for saving and loading admin settings to/from a JSON file.
|
|
/// </summary>
|
|
public static class AdminSettingsExtensions
|
|
{
|
|
/// <summary>
|
|
/// Path to the JSON file where admin settings are stored.
|
|
/// </summary>
|
|
private static string path = "AdminSettings.json";
|
|
|
|
/// <summary>
|
|
/// Saves the adminSettingsObject to a JSON file.
|
|
/// </summary>
|
|
/// <param name="adminSetting">Settings to save</param>
|
|
/// <returns>The same AdminSettings object for chaining of Operations</returns>
|
|
public static AdminSetting SaveChanges(this AdminSetting adminSetting)
|
|
{
|
|
string res = JsonSerializer.Serialize(adminSetting);
|
|
|
|
File.WriteAllText(path, res);
|
|
|
|
return adminSetting;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads the admin settings from the JSON file. If the file does not exist, returns a new AdminSetting object with default (0) values.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static AdminSetting LoadSettings()
|
|
{
|
|
if (File.Exists(path))
|
|
{
|
|
string json = File.ReadAllText(path);
|
|
return JsonSerializer.Deserialize<AdminSetting>(json);
|
|
}
|
|
|
|
return new AdminSetting();
|
|
}
|
|
}
|
|
}
|