Files
lxc-songlist/Services/SiteSettingsService.cs
T
2026-06-03 20:24:57 -07:00

54 lines
1.8 KiB
C#

using lxc_songlist.Data;
using lxc_songlist.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
namespace lxc_songlist.Services;
public sealed class SiteSettingsService(
IDbContextFactory<SongListDbContext> dbFactory,
IOptions<SiteOptions> options)
{
public const string RequestTemplateKey = "request_template";
public async Task<string> GetRequestTemplateAsync(CancellationToken cancellationToken = default)
{
await using var db = await dbFactory.CreateDbContextAsync(cancellationToken);
var setting = await db.SiteSettings.FindAsync([RequestTemplateKey], cancellationToken);
return string.IsNullOrWhiteSpace(setting?.Value)
? options.Value.RequestTemplate
: setting.Value;
}
public async Task SaveRequestTemplateAsync(string template, CancellationToken cancellationToken = default)
{
var cleanTemplate = string.IsNullOrWhiteSpace(template)
? options.Value.RequestTemplate
: template.Trim();
await using var db = await dbFactory.CreateDbContextAsync(cancellationToken);
var setting = await db.SiteSettings.FindAsync([RequestTemplateKey], cancellationToken);
if (setting is null)
{
db.SiteSettings.Add(new SiteSetting
{
Key = RequestTemplateKey,
Value = cleanTemplate,
UpdatedAt = DateTimeOffset.UtcNow
});
}
else
{
setting.Value = cleanTemplate;
setting.UpdatedAt = DateTimeOffset.UtcNow;
}
await db.SaveChangesAsync(cancellationToken);
}
public static string FormatRequest(string template, string title)
{
return template.Replace("{title}", title, StringComparison.OrdinalIgnoreCase);
}
}