d1736c5991
continuous-integration/drone/push Build is passing
- Implemented comprehensive audit logging for Tasks, Users, Settings, Goals, Labels, AI Chat, and Rewards. - Added Admin UI for MCP Server settings and Audit Logs. - Created docker-compose-production.yml with Traefik configuration. - Fixed backend bugs (missing storage methods, route closure). - Added Audit Logging Guidelines.
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
export const LEVEL_THRESHOLDS = [
|
|
0, // Level 1: 0-99
|
|
100, // Level 2: 100-249
|
|
250, // Level 3: 250-499
|
|
500, // Level 4: 500-999
|
|
1000, // Level 5: 1000-1999
|
|
2000, // Level 6: 2000-3499
|
|
3500, // Level 7: 3500-4999
|
|
5000, // Level 8: 5000-7499
|
|
7500, // Level 9: 7500-9999
|
|
10000 // Level 10: 10000+
|
|
];
|
|
|
|
export function getLevelFromXP(xp: number): number {
|
|
for (let i = LEVEL_THRESHOLDS.length - 1; i >= 0; i--) {
|
|
if (xp >= LEVEL_THRESHOLDS[i]) {
|
|
return i + 1;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
export function getNextLevelXP(level: number): number {
|
|
if (level >= LEVEL_THRESHOLDS.length) {
|
|
return LEVEL_THRESHOLDS[LEVEL_THRESHOLDS.length - 1] * 1.5; // Scale indefinitely
|
|
}
|
|
return LEVEL_THRESHOLDS[level];
|
|
}
|
|
|
|
export function getLevelProgress(xp: number): number {
|
|
const currentLevel = getLevelFromXP(xp);
|
|
const currentLevelStart = LEVEL_THRESHOLDS[currentLevel - 1];
|
|
const nextLevelStart = getNextLevelXP(currentLevel);
|
|
|
|
if (xp >= nextLevelStart) return 100;
|
|
|
|
const progress = ((xp - currentLevelStart) / (nextLevelStart - currentLevelStart)) * 100;
|
|
return Math.min(100, Math.max(0, progress));
|
|
}
|
|
|
|
export const RANK_KEYS = [
|
|
'novice', // Level 1
|
|
'apprentice', // Level 2
|
|
'journeyman', // Level 3
|
|
'artisan', // Level 4
|
|
'expert', // Level 5
|
|
'master', // Level 6
|
|
'grandmaster', // Level 7
|
|
'virtuoso', // Level 8
|
|
'legend', // Level 9
|
|
'mythic' // Level 10
|
|
];
|
|
|
|
export function getRankKey(level: number): string {
|
|
if (level <= 0) return 'novice';
|
|
if (level > RANK_KEYS.length) return RANK_KEYS[RANK_KEYS.length - 1];
|
|
return RANK_KEYS[level - 1];
|
|
}
|