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