refactor
This commit is contained in:
@@ -1,13 +1,19 @@
|
||||
import { SignupWithEmailUseCase } from '@core/identity/application/use-cases/SignupWithEmailUseCase';
|
||||
|
||||
/**
|
||||
* EnsureInitialData - Bootstrap script to ensure initial data exists.
|
||||
* Idempotent: Can be run multiple times without issues.
|
||||
* Calls core use cases to create initial admin user if not exists.
|
||||
*/
|
||||
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/Logger';
|
||||
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<void> {
|
||||
@@ -18,17 +24,38 @@ export class EnsureInitialData {
|
||||
password: 'admin123',
|
||||
displayName: 'Admin',
|
||||
});
|
||||
// User created successfully
|
||||
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
|
||||
return;
|
||||
this.logger.info('[Bootstrap] Admin user already exists');
|
||||
} else {
|
||||
// Re-throw other errors
|
||||
throw error;
|
||||
}
|
||||
// Re-throw other errors
|
||||
throw error;
|
||||
}
|
||||
|
||||
// Future: Add more initial data creation here
|
||||
// e.g., create default league, config, etc.
|
||||
// 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`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user