Files
gridpilot.gg/core/racing/domain/services/SkillLevelService.ts
2025-12-16 11:52:26 +01:00

35 lines
1.1 KiB
TypeScript

import type { IDomainService } from '@core/shared/domain';
export type SkillLevel = 'beginner' | 'intermediate' | 'advanced' | 'pro';
/**
* Domain service for determining skill level based on rating.
* This encapsulates the business rule for skill tier classification.
*/
export class SkillLevelService implements IDomainService {
readonly serviceName = 'SkillLevelService';
/**
* Map driver rating to skill level band.
* Business rule: iRating thresholds determine skill tiers.
*/
static getSkillLevel(rating: number): SkillLevel {
if (rating >= 3000) return 'pro';
if (rating >= 2500) return 'advanced';
if (rating >= 1800) return 'intermediate';
return 'beginner';
}
/**
* Map average team rating to performance level.
* Business rule: Team ratings use higher thresholds than individual drivers.
*/
static getTeamPerformanceLevel(averageRating: number | null): SkillLevel {
if (averageRating === null) {
return 'beginner';
}
if (averageRating >= 4500) return 'pro';
if (averageRating >= 3000) return 'advanced';
if (averageRating >= 2000) return 'intermediate';
return 'beginner';
}
}