import { SignupWithEmailUseCase } from '@core/identity/application/use-cases/SignupWithEmailUseCase'; import { CreateAchievementUseCase } from '@core/identity/application/use-cases/achievement/CreateAchievementUseCase'; import type { Logger } from '@core/shared/application'; import { DRIVER_ACHIEVEMENTS, STEWARD_ACHIEVEMENTS, ADMIN_ACHIEVEMENTS, COMMUNITY_ACHIEVEMENTS, } from '@core/identity/domain/AchievementConstants'; export class EnsureInitialData { constructor( private readonly signupUseCase: SignupWithEmailUseCase, private readonly createAchievementUseCase: CreateAchievementUseCase, private readonly logger: Logger, ) {} async execute(): Promise { // Ensure initial admin user exists try { await this.signupUseCase.execute({ email: 'admin@gridpilot.local', password: 'admin123', displayName: 'Admin', }); this.logger.info('[Bootstrap] Initial admin user created'); } catch (error) { if (error instanceof Error && error.message === 'An account with this email already exists') { // User already exists, nothing to do this.logger.info('[Bootstrap] Admin user already exists'); } else { // Re-throw other errors throw error; } } // Ensure initial achievements exist const allAchievements = [ ...DRIVER_ACHIEVEMENTS, ...STEWARD_ACHIEVEMENTS, ...ADMIN_ACHIEVEMENTS, ...COMMUNITY_ACHIEVEMENTS, ]; let createdCount = 0; let existingCount = 0; for (const achievementProps of allAchievements) { try { await this.createAchievementUseCase.execute(achievementProps); createdCount++; } catch { // If achievement already exists, that's fine existingCount++; } } this.logger.info(`[Bootstrap] Achievements: ${createdCount} created, ${existingCount} already exist`); } }