2025-10-14 15:30:11 +02:00

107 lines
2.7 KiB
TypeScript

// /src/app/api/schedule/route.ts
'use server'
import { NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
// Helper: Prisma-User -> Player
const toPlayer = (u: any) => ({
steamId : u?.steamId ?? '',
name : u?.name ?? 'Unbekannt',
avatar : u?.avatar ?? null,
location : u?.location ?? undefined,
premierRank: u?.premierRank ?? undefined,
isAdmin : u?.isAdmin ?? undefined,
})
// Helper: Prisma-MatchPlayer -> MatchPlayer
const toMatchPlayer = (p: any) => ({
user : toPlayer(p.user),
stats: p.stats ?? undefined,
})
export async function GET() {
try {
const matches = await prisma.match.findMany({
where : { matchType: 'community' },
orderBy: { demoDate: 'desc' },
include: {
teamA: {
include: { leader: true },
},
teamB: {
include: { leader: true },
},
players: {
include: {
user : true,
stats: true,
team : true,
},
},
},
})
const formatted = matches.map(m => {
const matchDate =
m.demoDate ??
(m as any).date ??
m.createdAt
const teamAId = m.teamA?.id ?? null
const teamBId = m.teamB?.id ?? null
const teamAPlayers = m.players
.filter(p => (p.teamId ?? p.team?.id) === teamAId)
.map(toMatchPlayer)
const teamBPlayers = m.players
.filter(p => (p.teamId ?? p.team?.id) === teamBId)
.map(toMatchPlayer)
return {
id : m.id,
title : m.title,
map : m.map ?? null,
matchType : 'community',
matchDate : matchDate.toISOString(),
scoreA : m.scoreA,
scoreB : m.scoreB,
winnerTeam: m.winnerTeam ?? null,
teamA: {
id : m.teamA?.id ?? null,
name : m.teamA?.name ?? 'CT',
logo : m.teamA?.logo ?? null,
score : m.scoreA,
leader : m.teamA?.leader ? toPlayer(m.teamA.leader) : undefined,
// -> neu:
players: teamAPlayers,
},
teamB: {
id : m.teamB?.id ?? null,
name : m.teamB?.name ?? 'T',
logo : m.teamB?.logo ?? null,
score : m.scoreB,
leader : m.teamB?.leader ? toPlayer(m.teamB.leader) : undefined,
// -> neu:
players: teamBPlayers,
},
// -> Top-Level "players" wurde entfernt
}
})
return NextResponse.json({ matches: formatted })
} catch (err) {
console.error('❌ Fehler beim Abrufen der Community-Matches:', err)
return NextResponse.json(
{ error: 'Serverfehler beim Laden der Community-Matches' },
{ status: 500 },
)
}
}