107 lines
2.7 KiB
TypeScript
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 },
|
|
)
|
|
}
|
|
}
|