108 lines
2.8 KiB
TypeScript
108 lines
2.8 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 ??
|
||
// @ts-ignore – falls du optional noch ein „date“-Feld hast
|
||
(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 },
|
||
)
|
||
}
|
||
}
|