using Application.Abstractions.Data;
using Application.Helpers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Infrastructure.Forum;
///
/// 기동 시 상단 네비가 참조하는 핵심 게시판(고객지원/장전시황/수익인증)을 멱등 provisioning 한다.
/// 재빌드된 빈 DB 에서 /board/notice·briefing·proof 가 404 나던 문제 방지 — BoardSeeder 재사용(존재하면 no-op).
/// Web.Api 전용(AddApiInfrastructure 등록). 실패해도 기동은 계속한다.
///
internal sealed class BoardBootstrapSeeder(IServiceScopeFactory scopeFactory, ILogger logger) : IHostedService
{
public async Task StartAsync(CancellationToken ct)
{
try
{
using var scope = scopeFactory.CreateScope();
var db = scope.ServiceProvider.GetRequiredService();
await BoardSeeder.ResolveNoticeBoardIDAsync(db, ct);
await BoardSeeder.ResolveBriefingBoardIDAsync(db, ct);
await BoardSeeder.ResolveProofBoardIDAsync(db, ct);
await BoardSeeder.ResolveFeedBoardIDAsync(db, ct);
logger.LogInformation("[BoardBootstrap] 핵심 게시판(notice/briefing/proof/feed) 확인·시드 완료");
}
catch (Exception ex)
{
logger.LogError(ex, "[BoardBootstrap] 게시판 시드 실패 — 기동은 계속");
}
}
public Task StopAsync(CancellationToken ct) => Task.CompletedTask;
}