fix(ci): build shared packages before tests and fix formatting

- Add build:packages step to all test.yml jobs (fixes @manacore/shared-nestjs-auth not found)
- Handle missing coverage artifacts gracefully in test-coverage.yml
- Update .prettierignore to exclude apps-archived/ and problematic files
- Format all source files to pass CI checks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Wuesteon 2025-12-01 23:15:00 +01:00
parent 5282f5545b
commit 0ebfde0851
163 changed files with 15247 additions and 14677 deletions

View file

@ -1,71 +1,71 @@
import { statsService } from '../services/statsService';
export interface GameMessage {
type: 'GAME_EVENT' | 'GAME_LOADED' | 'GAME_ENDED';
gameId: string;
event?: string;
data?: any;
type: 'GAME_EVENT' | 'GAME_LOADED' | 'GAME_ENDED';
gameId: string;
event?: string;
data?: any;
}
export function initGameCommunication(gameSlug: string) {
let gameStartTime: number | null = null;
window.addEventListener('message', (event) => {
if (event.origin !== window.location.origin) return;
const message = event.data as GameMessage;
if (!message.type || message.gameId !== gameSlug) return;
switch (message.type) {
case 'GAME_LOADED':
gameStartTime = Date.now();
statsService.incrementGamesPlayed(gameSlug);
break;
case 'GAME_EVENT':
handleGameEvent(gameSlug, message.event!, message.data);
break;
case 'GAME_ENDED':
if (gameStartTime) {
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
statsService.addPlayTime(gameSlug, playTime);
gameStartTime = null;
}
break;
}
});
window.addEventListener('beforeunload', () => {
if (gameStartTime) {
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
statsService.addPlayTime(gameSlug, playTime);
}
});
let gameStartTime: number | null = null;
window.addEventListener('message', (event) => {
if (event.origin !== window.location.origin) return;
const message = event.data as GameMessage;
if (!message.type || message.gameId !== gameSlug) return;
switch (message.type) {
case 'GAME_LOADED':
gameStartTime = Date.now();
statsService.incrementGamesPlayed(gameSlug);
break;
case 'GAME_EVENT':
handleGameEvent(gameSlug, message.event!, message.data);
break;
case 'GAME_ENDED':
if (gameStartTime) {
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
statsService.addPlayTime(gameSlug, playTime);
gameStartTime = null;
}
break;
}
});
window.addEventListener('beforeunload', () => {
if (gameStartTime) {
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
statsService.addPlayTime(gameSlug, playTime);
}
});
}
function handleGameEvent(gameId: string, event: string, data: any) {
switch (event) {
case 'SCORE_UPDATE':
if (data.score) {
statsService.updateStats(gameId, {
lastScore: data.score
});
}
break;
case 'ACHIEVEMENT_UNLOCKED':
if (data.achievement) {
statsService.unlockAchievement(gameId, data.achievement);
}
break;
case 'GAME_OVER':
if (data.score) {
statsService.updateStats(gameId, {
lastScore: data.score
});
}
break;
}
}
switch (event) {
case 'SCORE_UPDATE':
if (data.score) {
statsService.updateStats(gameId, {
lastScore: data.score,
});
}
break;
case 'ACHIEVEMENT_UNLOCKED':
if (data.achievement) {
statsService.unlockAchievement(gameId, data.achievement);
}
break;
case 'GAME_OVER':
if (data.score) {
statsService.updateStats(gameId, {
lastScore: data.score,
});
}
break;
}
}

View file

@ -6,57 +6,72 @@ const GAME_ID = 'dein-spiel-slug';
// 2. Beim Spielstart senden
window.addEventListener('load', () => {
window.parent.postMessage({
type: 'GAME_LOADED',
gameId: GAME_ID
}, '*');
window.parent.postMessage(
{
type: 'GAME_LOADED',
gameId: GAME_ID,
},
'*'
);
});
// 3. Bei Score-Updates senden
function updateScore(newScore) {
score = newScore;
// UI Update...
window.parent.postMessage({
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'SCORE_UPDATE',
data: { score: score }
}, '*');
score = newScore;
// UI Update...
window.parent.postMessage(
{
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'SCORE_UPDATE',
data: { score: score },
},
'*'
);
}
// 4. Bei Game Over senden
function gameOver() {
// Game Over Logik...
window.parent.postMessage({
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'GAME_OVER',
data: { score: finalScore }
}, '*');
// Achievement Beispiele
if (score >= 100) {
window.parent.postMessage({
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'ACHIEVEMENT_UNLOCKED',
data: {
achievement: {
id: 'first-100',
name: 'Erste 100',
description: '100 Punkte erreicht!'
}
}
}, '*');
}
// Game Over Logik...
window.parent.postMessage(
{
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'GAME_OVER',
data: { score: finalScore },
},
'*'
);
// Achievement Beispiele
if (score >= 100) {
window.parent.postMessage(
{
type: 'GAME_EVENT',
gameId: GAME_ID,
event: 'ACHIEVEMENT_UNLOCKED',
data: {
achievement: {
id: 'first-100',
name: 'Erste 100',
description: '100 Punkte erreicht!',
},
},
},
'*'
);
}
}
// 5. Optional: Bei Spielende/Verlassen
window.addEventListener('beforeunload', () => {
window.parent.postMessage({
type: 'GAME_ENDED',
gameId: GAME_ID
}, '*');
});
window.parent.postMessage(
{
type: 'GAME_ENDED',
gameId: GAME_ID,
},
'*'
);
});