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