(null)
/* -------- Timers / open window -------- */
- // ⚠️ Wichtig: hier keine Date.now()-abhängigen Ausgaben im SSR!
-
- // stabile Basiszeit aus Props (SSR-safe; kein Date.now())
const matchBaseTs = useMemo(() => {
const raw = match.matchDate ?? match.demoDate ?? null
return raw ? new Date(raw).getTime() : null
}, [match.matchDate, match.demoDate])
- // vom Server geliefertes opensAt (hat Vorrang)
const opensAtTsFromServer = useMemo(() => {
return state?.opensAt ? new Date(state.opensAt).getTime() : null
}, [state?.opensAt])
@@ -72,14 +68,11 @@ export default function MapVotePanel({ match }: Props) {
return matchBaseTs != null ? matchBaseTs - 60 * 60 * 1000 : null
}, [matchBaseTs])
- // Reihenfolge: SSE-Override → Server-Stand → Fallback
const openTs = opensAtOverrideTs ?? opensAtTsFromServer ?? fallbackOpensAtTs ?? null
- // Mount-Flag, damit wir den Countdown erst clientseitig laufen lassen
const [mounted, setMounted] = useState(false)
useEffect(() => { setMounted(true) }, [])
- // Countdown-State (nur nach Mount updaten, sekundensynchron)
const [msLeft, setMsLeft] = useState(0)
useEffect(() => {
if (!mounted) return
@@ -88,7 +81,6 @@ export default function MapVotePanel({ match }: Props) {
const update = () => setMsLeft(Math.max(openTs - Date.now(), 0))
update()
- // an Sekundengrenze koppeln
const drift = 1000 - (Date.now() % 1000)
let intervalId: number | null = null
const timeoutId = window.setTimeout(() => {
@@ -112,7 +104,6 @@ export default function MapVotePanel({ match }: Props) {
if (overlayOpen && overlayIsForThisMatch) setOverlayShownOnce(true)
}, [overlayOpen, overlayIsForThisMatch])
- // Auf „match-ready“ reagieren → Overlay nach 3s öffnen
useEffect(() => {
if (!lastEvent) return
if (lastEvent.type !== 'match-ready') return
@@ -122,7 +113,7 @@ export default function MapVotePanel({ match }: Props) {
showWithDelay({
matchId: match.id,
mapLabel: fm?.label ?? 'Erste Map',
- mapBg: fm?.bg ?? '/assets/img/maps/cs2.webp',
+ mapBg: fm?.bg ?? '/assets/img/maps/lobby_mapveto_png.webp',
nextHref: `/match-details/${match.id}/radar`,
}, 3000)
}, [lastEvent, match.id, showWithDelay])
@@ -150,18 +141,15 @@ export default function MapVotePanel({ match }: Props) {
useEffect(() => { load() }, [load])
- // 🔔 Reagiere auf alle relevanten Match-Events (inkl. match-updated)
useEffect(() => {
if (!lastEvent) return
- // robustes Unwrapping (doppelte payload)
const unwrap = (e: any) => e?.payload?.payload ?? e?.payload ?? e
const evt = unwrap(lastEvent)
const type = lastEvent.type ?? evt?.type
if (evt?.matchId !== match.id) return
- // ⬅️ Nur noch map-vote-updated für Counter/opensAt
if (type === 'map-vote-updated') {
const { opensAt, leadMinutes } = evt ?? {}
if (opensAt) {
@@ -175,14 +163,10 @@ export default function MapVotePanel({ match }: Props) {
}
}
- // ⬅️ Nur Map-Vote-Events triggern ein Reload (kein match-updated mehr)
const MAPVOTE_REFRESH = new Set(['map-vote-updated', 'map-vote-reset', 'map-vote-admin-edit'])
- if (MAPVOTE_REFRESH.has(type)) {
- load()
- }
+ if (MAPVOTE_REFRESH.has(type)) load()
}, [lastEvent, match.id, load, matchBaseTs])
-
/* -------- Admin-Edit Mirror -------- */
const adminEditingBy = state?.adminEdit?.by ?? null
const adminEditingEnabled = !!state?.adminEdit?.enabled
@@ -226,11 +210,9 @@ export default function MapVotePanel({ match }: Props) {
const fmt = (k: string) => state?.mapVisuals?.[k]?.label ?? k
- // Statusleiste (locked): Spinner solange Overlay noch nicht (für dieses Match) gezeigt, dann ✅
const showDone = !!state?.locked && (overlayShownOnce || !overlayIsForThisMatch)
const showLockedSpinner = !!state?.locked && !showDone
- // Page-level Loading/Error
const showPageLoading = isLoading && !state
const showError = !!error && !state
@@ -261,7 +243,6 @@ export default function MapVotePanel({ match }: Props) {
alert(j.message ?? 'Aktion fehlgeschlagen')
return
}
- // Optimistisches Update
setState(prev =>
prev
? {
@@ -337,7 +318,8 @@ export default function MapVotePanel({ match }: Props) {
}
if (holdMapRef.current === map) {
resetHold()
- setProgressByMap(prev => ({ ...prev, [map]: 0 }))}
+ setProgressByMap(prev => ({ ...prev, [map]: 0 }))
+ }
}, [progressByMap, resetHold, finishAndSubmit])
const onTouchStart = (map: string, allowed: boolean) => (e: React.TouchEvent) => {
@@ -427,7 +409,11 @@ export default function MapVotePanel({ match }: Props) {
[playersB]
)
- /* -------- Left/Right selection -------- */
+ const amInTeamA = !!mySteamId && playersA.some(p => p.user?.steamId === mySteamId)
+ const amInTeamB = !!mySteamId && playersB.some(p => p.user?.steamId === mySteamId)
+ const myTeamId = amInTeamA ? match.teamA?.id : amInTeamB ? match.teamB?.id : null
+
+ // Links/Rechts anhand des eigenen Teams
let teamLeftKey: 'teamA' | 'teamB' = 'teamA'
let teamRightKey: 'teamA' | 'teamB' = 'teamB'
if (mySteamId && playersB.some(p => p.user?.steamId === mySteamId)) {
@@ -435,21 +421,24 @@ export default function MapVotePanel({ match }: Props) {
teamRightKey = 'teamA'
}
- const teamLeft = match[teamLeftKey]
- const teamRight = match[teamRightKey]
+ const teamLeft = (match as any)[teamLeftKey]
+ const teamRight = (match as any)[teamRightKey]
const playersLeft = teamLeftKey === 'teamA' ? playersA : playersB
const playersRight = teamRightKey === 'teamA' ? playersA : playersB
const rankLeft = teamLeftKey === 'teamA' ? teamAPlayersForRank : teamBPlayersForRank
const rankRight = teamRightKey === 'teamA' ? teamAPlayersForRank : teamBPlayersForRank
+ const leftTeamId = state?.teams?.[teamLeftKey]?.id ?? teamLeft?.id
+ const rightTeamId = state?.teams?.[teamRightKey]?.id ?? teamRight?.id
+
const leftIsActiveTurn =
!!currentStep?.teamId &&
- currentStep.teamId === (state?.teams?.[teamLeftKey]?.id ?? teamLeft?.id) &&
+ currentStep.teamId === leftTeamId &&
!state?.locked
const rightIsActiveTurn =
!!currentStep?.teamId &&
- currentStep.teamId === (state?.teams?.[teamRightKey]?.id ?? teamRight?.id) &&
+ currentStep.teamId === rightTeamId &&
!state?.locked
/* -------- Sorted map pool -------- */
@@ -568,12 +557,40 @@ export default function MapVotePanel({ match }: Props) {
})()}
) : (
-
- {currentStep?.action === 'ban'
- ? '🚫 Dein Team darf bannen'
- : currentStep?.action === 'pick'
- ? '✅ Dein Team darf picken'
- : 'Du bist dran'}
+
+ {(() => {
+ if (!currentStep) return 'Warte auf nächsten Schritt'
+
+ const tId = currentStep.teamId
+ const tName =
+ tId === state?.teams?.teamA?.id ? state?.teams?.teamA?.name ?? match.teamA?.name :
+ tId === state?.teams?.teamB?.id ? state?.teams?.teamB?.name ?? match.teamB?.name :
+ 'Unbekanntes Team'
+
+ if (isMyTurn) {
+ return currentStep.action === 'ban'
+ ? '🚫 Dein Team darf bannen'
+ : currentStep.action === 'pick'
+ ? '✅ Dein Team darf picken'
+ : 'Du bist dran'
+ }
+
+ // ⬇️ Icon vor den Text packen
+ return (
+ <>
+ {(currentStep.action === 'ban' || currentStep.action === 'pick') && (
+ ⏳
+ )}
+ {currentStep.action === 'ban'
+ ? `${tName} bannt`
+ : currentStep.action === 'pick'
+ ? `${tName} pickt`
+ : `${tName} ist dran`}
+ >
+ )
+ })()}
)
) : (
@@ -600,34 +617,41 @@ export default function MapVotePanel({ match }: Props) {
{/* Hauptbereich */}
{state && (
- {/* Linke Spalte */}
-
+ {/* Linke Spalte (immer dein Team) */}
+
-
})
-
-
{match.teamA?.name ?? 'Team'}
+
})
+
+
{teamLeft?.name ?? 'Team'}
-
({ premierRank: p.stats?.rankNew ?? 0 })) as any} />
+
- {playersA.map((p: MatchPlayer) => (
+ {playersLeft.map((p: MatchPlayer) => (
router.push(`/profile/${p.user.steamId}`)}
- isLeader={(state?.teams?.teamA?.leader?.steamId ?? match.teamA?.leader?.steamId) === p.user.steamId}
- isActiveTurn={!!currentStep?.teamId && currentStep.teamId === (state?.teams?.teamA?.id ?? match.teamA?.id) && !state.locked}
+ isLeader={(state?.teams?.[teamLeftKey]?.leader?.steamId ?? teamLeft?.leader?.steamId) === p.user.steamId}
+ isActiveTurn={leftIsActiveTurn}
/>
))}
@@ -662,7 +686,7 @@ export default function MapVotePanel({ match }: Props) {
const visualDisabled = `bg-white dark:bg-neutral-900 border-neutral-300 dark:border-neutral-700 cursor-not-allowed ${isFrozenByAdmin ? 'opacity-60' : ''}`
const visualClasses = taken ? visualTaken : isAvailable ? visualAvailable : visualDisabled
- // für DECIDER den „Chooser“ ermitteln (letztes Ban davor)
+ // DECIDER-Chooser (letztes Ban davor)
const steps = state?.steps ?? []
const decIdx = steps.findIndex(s => s.action === 'decider')
let deciderChooserTeamId: string | null = null
@@ -676,12 +700,11 @@ export default function MapVotePanel({ match }: Props) {
const effectiveTeamId =
status === 'decider' ? deciderChooserTeamId : decision?.teamId ?? null
- const pickedByLeft = (status === 'pick' || status === 'decider') && effectiveTeamId === match.teamA?.id
- const pickedByRight = (status === 'pick' || status === 'decider') && effectiveTeamId === match.teamB?.id
+ const pickedByLeft = (status === 'pick' || status === 'decider') && effectiveTeamId === leftTeamId
+ const pickedByRight = (status === 'pick' || status === 'decider') && effectiveTeamId === rightTeamId
- const bg = state?.mapVisuals?.[map]?.bg ?? `/assets/img/maps/${map}/1.jpg`
+ const bg = state?.mapVisuals?.[map]?.bg ?? `/assets/img/maps/${map}/${map}_1_png.webp`
- // ⬇️ Fortschritt aus den TOP-LEVEL Hooks nutzen
const progress = progressByMap[map] ?? 0
const showProgress = isAvailable && progress > 0 && progress < 1
@@ -692,7 +715,11 @@ export default function MapVotePanel({ match }: Props) {
return (
{pickedByLeft ? (
-
+
) : }
{pickedByRight ? (
-
+
) : }
)
@@ -757,34 +788,41 @@ export default function MapVotePanel({ match }: Props) {
- {/* Rechte Spalte */}
-
+ {/* Rechte Spalte (Gegner) */}
+
-
({ premierRank: p.stats?.rankNew ?? 0 })) as any} />
+
-
{match.teamB?.name ?? 'Team'}
+
{teamRight?.name ?? 'Team'}
-
+
- {playersB.map((p: MatchPlayer) => (
+ {playersRight.map((p: MatchPlayer) => (
router.push(`/profile/${p.user.steamId}`)}
- isLeader={(state?.teams?.teamB?.leader?.steamId ?? match.teamB?.leader?.steamId) === p.user.steamId}
- isActiveTurn={!!currentStep?.teamId && currentStep.teamId === (state?.teams?.teamB?.id ?? match.teamB?.id) && !state.locked}
+ isLeader={(state?.teams?.[teamRightKey]?.leader?.steamId ?? teamRight?.leader?.steamId) === p.user.steamId}
+ isActiveTurn={rightIsActiveTurn}
/>
))}
@@ -801,7 +839,8 @@ export default function MapVotePanel({ match }: Props) {
const chosenSteps = (state.steps ?? []).filter(
s => (s.action === 'pick' || s.action === 'decider') && s.map
)
- // ermitteln, wer beim DECIDER "zählt"
+
+ // wer „entscheidet“ beim Decider (letztes Ban davor)
const steps = state?.steps ?? []
const decIdx = steps.findIndex(s => s.action === 'decider')
let chooserTeamId: string | null = null
@@ -812,8 +851,8 @@ export default function MapVotePanel({ match }: Props) {
}
}
- const teamLeftLogo = getTeamLogo(match.teamA?.logo)
- const teamRightLogo = getTeamLogo(match.teamB?.logo)
+ const teamLeftLogo = getTeamLogo(teamLeft?.logo)
+ const teamRightLogo = getTeamLogo(teamRight?.logo)
return (
@@ -823,13 +862,29 @@ export default function MapVotePanel({ match }: Props) {
const action = step?.action as ('pick' | 'decider') | undefined
const mapKey = step?.map
const label = mapKey ? fmt(mapKey) : '?'
- const bg = mapKey ? (state.mapVisuals?.[mapKey]?.bg ?? `/assets/img/maps/${mapKey}/1.jpg`) : null
- const pickTeamId = action === 'pick' ? (step?.teamId ?? null)
- : action === 'decider' ? chooserTeamId
- : null
- const pickedByLeft = pickTeamId && pickTeamId === match.teamA?.id
- const pickedByRight = pickTeamId && pickTeamId === match.teamB?.id
- const sideLogo = pickedByLeft ? teamLeftLogo : pickedByRight ? teamRightLogo : null
+ const visuals = mapKey ? state.mapVisuals?.[mapKey] : undefined
+ const bg = visuals?.bg ?? (mapKey ? `/assets/img/maps/${mapKey}/${mapKey}_1_png.webp` : null)
+ const mapLogo = mapKey
+ ? (MAP_OPTIONS.find(o => o.key === mapKey)?.icon
+ ?? `/assets/img/mapicons/map_icon_${mapKey}.svg`) // Fallback
+ : null
+
+ const pickTeamId =
+ action === 'pick' ? (step?.teamId ?? null)
+ : action === 'decider' ? chooserTeamId
+ : null
+
+ // Nummer des Picks: zähle nur vorherige Picks
+ const pickNumber =
+ action === 'pick'
+ ? chosenSteps.slice(0, idx).filter(s => s.action === 'pick').length + 1
+ : null
+
+ const pickedByLeft = (action === 'pick' || action === 'decider') && pickTeamId === leftTeamId
+ const pickedByRight = (action === 'pick' || action === 'decider') && pickTeamId === rightTeamId
+ const cornerLogo = pickedByLeft ? teamLeftLogo : pickedByRight ? teamRightLogo : null
+ const cornerPos = 'right-2 top-2'
+
const frameClasses =
action === 'pick' ? 'ring-2 ring-green-500'
: action === 'decider' ? 'ring-2 ring-blue-500'
@@ -849,14 +904,55 @@ export default function MapVotePanel({ match }: Props) {
'bg-neutral-200 dark:bg-neutral-800'
].join(' ')}
>
- {bg && (
)}
-
-
-
- {label}
+ {/* Hintergrundbild */}
+ {bg && (
+
+ )}
+
+
+ {/* Team-Logo in der Ecke (Picker) */}
+ {cornerLogo && (
+
+ )}
+
+ {/* Pick-Nummer oben links (nur für Picks) */}
+ {typeof pickNumber === 'number' && (
+
+ {pickNumber}
- {sideLogo && (
-
+ )}
+
+ {/* Map-Logo zentriert (Fallback: Label) */}
+
+ {mapLogo ? (
+ <>
+

+
+ {label}
+
+ >
+ ) : (
+
+ {label}
+
)}
diff --git a/src/app/components/MatchReadyOverlay.tsx b/src/app/components/MatchReadyOverlay.tsx
index d9e997b..4e21464 100644
--- a/src/app/components/MatchReadyOverlay.tsx
+++ b/src/app/components/MatchReadyOverlay.tsx
@@ -1,18 +1,28 @@
+// MatchReadyOverlay.tsx
'use client'
-import { useEffect, useMemo, useRef, useState } from 'react'
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { sound } from '@/app/lib/soundManager'
+import { useSSEStore } from '@/app/lib/useSSEStore'
+import { useSession } from 'next-auth/react'
+import LoadingSpinner from './LoadingSpinner'
+import { MAP_OPTIONS } from '../lib/mapOptions'
+import type { MapOption } from '../lib/mapOptions'
type Props = {
open: boolean
+ matchId: string
mapLabel: string
mapBg: string
onAccept: () => void | Promise
deadlineAt?: number
onTimeout?: () => void
forceGif?: boolean
+ connectHref?: string
}
+type Presence = 'online' | 'away' | 'offline'
+
function fmt(ms: number) {
const sec = Math.max(0, Math.ceil(ms / 1000))
const m = Math.floor(sec / 60)
@@ -22,26 +32,162 @@ function fmt(ms: number) {
export default function MatchReadyOverlay({
open,
+ matchId,
mapLabel,
mapBg,
onAccept,
deadlineAt,
onTimeout,
forceGif,
+ connectHref = 'steam://connect/cs2.ironieopen.de:27015/ironie',
}: Props) {
+ const { data: session } = useSession()
+ const mySteamId = session?.user?.steamId
+ const { lastEvent } = useSSEStore()
+
const [now, setNow] = useState(() => Date.now())
const [startedAt] = useState(() => Date.now())
- const fallbackDeadline = useMemo(() => startedAt + 30_000, [startedAt])
+ const fallbackDeadline = useMemo(() => startedAt + 20_000, [startedAt])
const effectiveDeadline = deadlineAt ?? fallbackDeadline
const rest = Math.max(0, effectiveDeadline - now)
+ // UI-States
+ const [accepted, setAccepted] = useState(false)
+ const [finished, setFinished] = useState(false)
+ const [showWaitHint, setShowWaitHint] = useState(false)
+ const [connecting, setConnecting] = useState(false)
+ const isVisible = open || accepted || showWaitHint
+
+ const [showBackdrop, setShowBackdrop] = useState(false)
+ const [showContent, setShowContent] = useState(false)
+
+ // Ready-Listen-Status
+ type Participant = { steamId: string; name: string; avatar: string; team: 'A' | 'B' | null }
+ const [participants, setParticipants] = useState([])
+ const [readyMap, setReadyMap] = useState>({})
+ const [total, setTotal] = useState(0)
+ const [countReady, setCountReady] = useState(0)
+
+ // Presence-Map (SSE)
+ const [statusMap, setStatusMap] = useState>({})
+
+ const prevCountReadyRef = useRef(0)
+ const ignoreNextIncreaseRef = useRef(false)
+
+ // ----- AUDIO -----
+ const beepsRef = useRef | null>(null)
+ const audioStartedRef = useRef(false)
+
+ const stopBeeps = () => { if (beepsRef.current) { clearInterval(beepsRef.current); beepsRef.current = null } }
+
+ const ensureAudioUnlocked = async () => {
+ try {
+ if (typeof (sound as any).ensureUnlocked === 'function') { await (sound as any).ensureUnlocked(); return true }
+ if (typeof (sound as any).unlock === 'function') { await (sound as any).unlock(); return true }
+ const ctx = (sound as any).ctx || (sound as any).audioContext
+ if (ctx && typeof ctx.resume === 'function' && ctx.state !== 'running') await ctx.resume()
+ return true
+ } catch { return false }
+ }
+
+ const startBeeps = () => {
+ try { sound.play('ready') } catch {}
+ stopBeeps()
+ beepsRef.current = setInterval(() => { try { sound.play('beep') } catch {} }, 1000)
+ }
+
+ const playMenuAccept = () => {
+ try { (sound as any).play?.('menu_accept') } catch {}
+ try { new Audio('/assets/sounds/menu_accept.wav').play() } catch {}
+ }
+
+ // NUR nach Acceptance laden/aktualisieren
+ const loadReady = useCallback(async () => {
+ try {
+ const r = await fetch(`/api/matches/${matchId}/ready`, { cache: 'no-store' })
+ if (!r.ok) return
+ const j = await r.json()
+ setParticipants(j.participants ?? [])
+ setReadyMap(j.ready ?? {})
+ setTotal(j.total ?? 0)
+ setCountReady(j.countReady ?? 0)
+ } catch {}
+ }, [matchId])
+
+ // ---- Accept-Handling ----
+ const postingRef = useRef(false)
+
+ const onAcceptClick = async () => {
+ if (postingRef.current) return
+ postingRef.current = true
+ try {
+ stopBeeps()
+ playMenuAccept()
+
+ const res = await fetch(`/api/matches/${matchId}/ready`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json', 'X-Ready-Accept': '1' },
+ cache: 'no-store',
+ body: JSON.stringify({ intent: 'accept' }),
+ })
+ if (!res.ok) return
+
+ setAccepted(true)
+ try { await onAccept() } catch {}
+ await loadReady()
+ } finally {
+ postingRef.current = false
+ }
+ }
+
+ // Backdrop zuerst faden, dann Content
+ useEffect(() => {
+ if (!isVisible) { setShowBackdrop(false); setShowContent(false); return }
+ setShowBackdrop(true)
+ const id = setTimeout(() => setShowContent(true), 2000)
+ return () => clearTimeout(id)
+ }, [isVisible])
+
+ if (!isVisible) return null
+
+ // Nach Accept ein kurzer Refresh
+ useEffect(() => {
+ if (!accepted) return
+ const id = setTimeout(loadReady, 250)
+ return () => clearTimeout(id)
+ }, [accepted, loadReady])
+
+ // SSE
+ useEffect(() => {
+ if (!lastEvent) return
+ const type = (lastEvent as any).type ?? (lastEvent as any)?.payload?.type
+ const payload = (lastEvent as any).payload?.payload ?? (lastEvent as any).payload ?? lastEvent
+
+ if (type === 'ready-updated' && payload?.matchId === matchId) {
+ if (accepted) {
+ const otherSteamId = payload?.steamId as string | undefined
+ if (otherSteamId && otherSteamId !== mySteamId) playMenuAccept()
+ }
+ loadReady()
+ return
+ }
+
+ if (type === 'user-status-updated') {
+ const steamId: string | undefined = payload?.steamId ?? payload?.user?.steamId
+ const status = payload?.status as Presence | undefined
+ if (steamId && (status === 'online' || status === 'away' || status === 'offline')) {
+ setStatusMap(prev => (prev[steamId] === status ? prev : { ...prev, [steamId]: status }))
+ }
+ }
+ }, [accepted, lastEvent, matchId, mySteamId, loadReady])
+
// ----- simple mount animation flags -----
const [fadeIn, setFadeIn] = useState(false)
useEffect(() => {
- if (!open) { setFadeIn(false); return }
+ if (!isVisible) { setFadeIn(false); return }
const id = requestAnimationFrame(() => setFadeIn(true))
return () => cancelAnimationFrame(id)
- }, [open])
+ }, [isVisible])
// ----- motion layer (video/gif) -----
const prefersReducedMotion = useMemo(
@@ -49,18 +195,16 @@ export default function MatchReadyOverlay({
[]
)
const videoRef = useRef(null)
- const [useGif, setUseGif] = useState(!!forceGif || !!prefersReducedMotion)
+ const [useGif, setUseGif] = useState(() => !!forceGif || !!prefersReducedMotion)
useEffect(() => {
- if (!open) return
+ if (!isVisible) return
if (forceGif || prefersReducedMotion) { setUseGif(true); return }
const tryPlay = async () => {
const v = videoRef.current
if (!v) return
- try {
- await v.play()
- setUseGif(false)
- } catch {
+ try { await v.play(); setUseGif(false) }
+ catch {
setUseGif(true)
const once = async () => {
try { await v.play(); setUseGif(false) } catch {}
@@ -73,212 +217,255 @@ export default function MatchReadyOverlay({
}
const id = setTimeout(tryPlay, 0)
return () => clearTimeout(id)
- }, [open, forceGif, prefersReducedMotion])
+ }, [isVisible, forceGif, prefersReducedMotion])
useEffect(() => {
- if (!open) {
- const v = videoRef.current
- if (v) {
- try { v.pause() } catch {}
- v.removeAttribute('src')
- while (v.firstChild) v.removeChild(v.firstChild)
- }
+ if (isVisible) return
+ const v = videoRef.current
+ if (v) {
+ try { v.pause() } catch {}
+ v.removeAttribute('src')
+ while (v.firstChild) v.removeChild(v.firstChild)
}
- }, [open])
-
- // ----- AUDIO -----
- const beepsRef = useRef | null>(null)
- const audioStartedRef = useRef(false)
-
- const stopBeeps = () => {
- if (beepsRef.current) {
- clearInterval(beepsRef.current)
- beepsRef.current = null
- }
- }
-
- // Versuche den AudioContext zu entsperren – robust gegen unterschiedliche soundManager-Implementationen
- const ensureAudioUnlocked = async () => {
- try {
- // bevorzugt eigene API des soundManagers
- if (typeof (sound as any).ensureUnlocked === 'function') {
- await (sound as any).ensureUnlocked()
- return true
- }
- if (typeof (sound as any).unlock === 'function') {
- await (sound as any).unlock()
- return true
- }
- // generischer Fallback
- const ctx = (sound as any).ctx || (sound as any).audioContext
- if (ctx && typeof ctx.resume === 'function' && ctx.state !== 'running') {
- await ctx.resume()
- }
- return !ctx || ctx.state === 'running'
- } catch {
- return false
- }
- }
-
- // Beeps starten (1x ready + Intervall)
- const startBeeps = () => {
- try { sound.play('ready') } catch {}
- stopBeeps()
- beepsRef.current = setInterval(() => {
- try { sound.play('beep') } catch {}
- }, 1000)
- }
+ }, [isVisible])
+ // ----- AUDIO: Beeps starten/stoppen -----
useEffect(() => {
- if (!open) {
- stopBeeps()
- audioStartedRef.current = false
- return
- }
+ if (!isVisible) { stopBeeps(); audioStartedRef.current = false; return }
if (audioStartedRef.current) return
-
- let cleanupListener = () => {}
-
+ let cleanup = () => {}
;(async () => {
const ok = await ensureAudioUnlocked()
- if (ok) {
- audioStartedRef.current = true
- startBeeps()
- return
- }
- // Fallback: auf erste Geste warten und dann starten
- const onFirstGesture = async () => {
+ if (ok) { audioStartedRef.current = true; startBeeps(); return }
+ const onGesture = async () => {
const ok2 = await ensureAudioUnlocked()
- if (ok2) {
- audioStartedRef.current = true
- startBeeps()
- }
- window.removeEventListener('pointerdown', onFirstGesture)
- window.removeEventListener('keydown', onFirstGesture)
+ if (ok2) { audioStartedRef.current = true; startBeeps() }
+ window.removeEventListener('pointerdown', onGesture)
+ window.removeEventListener('keydown', onGesture)
}
- window.addEventListener('pointerdown', onFirstGesture, { once: true })
- window.addEventListener('keydown', onFirstGesture, { once: true })
- cleanupListener = () => {
- window.removeEventListener('pointerdown', onFirstGesture)
- window.removeEventListener('keydown', onFirstGesture)
+ window.addEventListener('pointerdown', onGesture, { once: true })
+ window.addEventListener('keydown', onGesture, { once: true })
+ cleanup = () => {
+ window.removeEventListener('pointerdown', onGesture)
+ window.removeEventListener('keydown', onGesture)
}
})()
-
- return () => { cleanupListener(); stopBeeps() }
- }, [open])
+ return () => { cleanup(); stopBeeps() }
+ }, [isVisible])
// ----- countdown / timeout -----
const rafRef = useRef(null)
useEffect(() => {
- if (!open) return
+ if (!isVisible) return
const step = () => {
const t = Date.now()
setNow(t)
- if (effectiveDeadline - t <= 0) {
+ if (effectiveDeadline - t <= 0 && !finished) {
stopBeeps()
- onTimeout?.()
+ setFinished(true)
+
+ if (accepted) {
+ setConnecting(true)
+ try { sound.play('loading') } catch {}
+
+ const doConnect = () => {
+ try { window.location.href = connectHref }
+ catch {
+ try {
+ const a = document.createElement('a')
+ a.href = connectHref
+ document.body.appendChild(a)
+ a.click()
+ a.remove()
+ } catch {}
+ }
+ try { onTimeout?.() } catch {}
+ }
+ setTimeout(doConnect, 2000)
+ } else {
+ setShowWaitHint(true)
+ }
return
}
rafRef.current = requestAnimationFrame(step)
}
rafRef.current = requestAnimationFrame(step)
return () => { if (rafRef.current) cancelAnimationFrame(rafRef.current) }
- }, [open, effectiveDeadline, onTimeout])
+ }, [isVisible, effectiveDeadline, accepted, finished, connectHref, onTimeout])
- if (!open) return null
+ // ---- Präsenz → Rahmenfarbe ----
+ const borderByPresence = (s: Presence | undefined): string => {
+ switch (s) {
+ case 'online': return 'border-[#2ecc71]'
+ case 'away': return 'border-yellow-400'
+ case 'offline':
+ default: return 'border-white/20'
+ }
+ }
- return (
-
- {/* Backdrop mit Fade-In */}
-
+ // 🔎 Map-Icon aus MAP_OPTIONS ermitteln
+ const mapIconUrl = useMemo(() => {
+ const norm = (s?: string | null) => (s ?? '').trim().toLowerCase()
+ const keyFromBg = /\/maps\/([^/]+)\//.exec(mapBg ?? '')?.[1]
- {/* Content-Frame mit kleinem Scale/Fade */}
-
- {/* Map im Frame */}
-

+ const byKey = keyFromBg ? MAP_OPTIONS.find(o => o.key === keyFromBg) : undefined
+ const byLabel = mapLabel ? MAP_OPTIONS.find(o => norm(o.label) === norm(mapLabel)) : undefined
+ const byImage = mapBg ? MAP_OPTIONS.find(o => o.images.includes(mapBg)) : undefined
- {/* Deko-Layer: Video oder GIF */}
- {useGif ? (
-
-

-
-
- ) : (
-
- )}
+ const opt = byKey ?? byLabel ?? byImage
+ return opt?.icon ?? '/assets/img/mapicons/map_icon_lobby_mapveto.svg'
+ }, [mapBg, mapLabel])
- {/* Inhalt */}
-
-
- IHR SPIEL IST BEREIT!
-
-
+ // --- UI Helpers ---
+ const ReadyRow = () => (
+
+
+
+ {Array.from({ length: Math.max(total, 10) }, (_, i) => {
+ const p = participants[i]
+ const isReady = p ? !!readyMap[p.steamId] : false
+ const presence: Presence = (p && statusMap[p.steamId]) || 'offline'
+ const borderCls = borderByPresence(presence)
-
-

-
- {mapLabel}
-
-
-
-
-
-
- {fmt(rest)}
-
+ return (
+
+ {p ? (
+ <>
+

+ {!isReady &&
}
+ >
+ ) : (
+
+ )}
+
+ )
+ })}
+
+ {countReady} / {total} Spieler bereit
+
+
+ )
+
+ return (
+
+ {/* Backdrop: 2s-Fade */}
+
+
+ {/* Content erst nach Backdrop-Delay */}
+ {showContent && (
+
+ {/* Map */}
+

+
+ {/* Deko-Layer */}
+ {useGif ? (
+
+

+
+
+ ) : (
+
+ )}
+
+ {/* Inhalt */}
+
+
+ DEIN SPIEL IST BEREIT!
+
+
+
+ {/* ⬇️ Icon aus MAP_OPTIONS + Label */}
+
+

+
{mapLabel}
+
+
+ {/* Accept / ReadyRow / WaitHint */}
+ {accepted ? (
+
+
+
+ ) : showWaitHint ? (
+
+ ) : (
+
+ )}
+
+ {/* Countdown oder Verbinde-Status */}
+
+ {connecting ? (
+
+
+ Verbinde…
+
+ ) : (
+ {fmt(rest)}
+ )}
+
+
+
+ )}
)
}
diff --git a/src/app/components/ReadyOverlayHost.tsx b/src/app/components/ReadyOverlayHost.tsx
index 73fe4b5..b662a65 100644
--- a/src/app/components/ReadyOverlayHost.tsx
+++ b/src/app/components/ReadyOverlayHost.tsx
@@ -77,13 +77,12 @@ export default function ReadyOverlayHost() {
const label = lastEvent.payload?.firstMap?.label ?? '?'
const bg = lastEvent.payload?.firstMap?.bg ?? '/assets/img/maps/cs2.webp'
- // 3s Delay + Zielroute mitgeben:
showWithDelay(
{
matchId: m,
mapLabel: label,
mapBg: bg,
- nextHref: `/match-details/${m}/radar`, // <- WICHTIG
+ nextHref: `/match-details/${m}/radar`,
},
3000
)
@@ -101,7 +100,7 @@ export default function ReadyOverlayHost() {
matchId: m,
mapLabel: firstMap.label,
mapBg: firstMap.bg,
- nextHref: `/match-details/${m}/radar`, // <- WICHTIG
+ nextHref: `/match-details/${m}/radar`,
},
3000
)
@@ -125,14 +124,17 @@ export default function ReadyOverlayHost() {
return (
{
- // optional: Backend informieren
+ // Backend optional informieren (Overlay bleibt offen!)
// await fetch(`/api/matches/${data.matchId}/ready-accept`, { method: 'POST' }).catch(() => {})
markAccepted(data.matchId)
- hide()
- router.push(data.nextHref ?? `/match-details/${data.matchId}/radar`) // <- WICHTIG
+
+ // ❌ NICHT mehr schließen oder navigieren
+ // hide()
+ // router.push(data.nextHref ?? `/match-details/${data.matchId}/radar`)
}}
/>
)
diff --git a/src/app/components/UserActivityTracker.tsx b/src/app/components/UserActivityTracker.tsx
index e2531e6..8fa7fd2 100644
--- a/src/app/components/UserActivityTracker.tsx
+++ b/src/app/components/UserActivityTracker.tsx
@@ -1,3 +1,5 @@
+// UserActivityTracker.tsx
+
'use client'
import { useEffect, useRef } from 'react'
diff --git a/src/app/components/UserAvatarWithStatus.tsx b/src/app/components/UserAvatarWithStatus.tsx
index 4df1edc..0f1825f 100644
--- a/src/app/components/UserAvatarWithStatus.tsx
+++ b/src/app/components/UserAvatarWithStatus.tsx
@@ -85,7 +85,7 @@ export default function UserAvatarWithStatus({
className={clsx(
'flex items-center justify-center rounded-full transition',
showStatus
- ? ['ring-2 ring-offset-1 ring-offset-white dark:ring-offset-neutral-900', statusRing]
+ ? ['ring-1 ring-offset-1 ring-offset-white dark:ring-offset-neutral-900', statusRing]
: null
)}
style={{ width: size, height: size }}
diff --git a/src/app/lib/mapOptions.ts b/src/app/lib/mapOptions.ts
index bbd29b9..1d0b566 100644
--- a/src/app/lib/mapOptions.ts
+++ b/src/app/lib/mapOptions.ts
@@ -1,164 +1,162 @@
-// src/lib/mapOptions.ts
export type MapOption = {
key: string
label: string
active: boolean
images: string[]
+ icon?: string // ⬅️ neu
}
+// Helper
+const mapImgs = (key: string, files: string[]) =>
+ files.map(name => `/assets/img/maps/${key}/${name}`)
+
+const iconFor = (key: string) =>
+ `/assets/img/mapicons/map_icon_${key}.svg`
+
export const MAP_OPTIONS: MapOption[] = [
{
key: 'de_train',
label: 'Train',
active: true,
- images: [
- '/assets/img/maps/de_train/1.webp',
- '/assets/img/maps/de_train/2.webp',
- '/assets/img/maps/de_train/3.webp',
- '/assets/img/maps/de_train/4.webp',
- '/assets/img/maps/de_train/5.webp',
- '/assets/img/maps/de_train/6.webp',
- ],
+ images: mapImgs('de_train', [
+ 'de_train_1_png.webp',
+ 'de_train_2_png.webp',
+ 'de_train_3_png.webp',
+ 'de_train_4_png.webp',
+ 'de_train_png.webp',
+ ]),
+ icon: iconFor('de_train'),
},
{
key: 'de_dust2',
label: 'Dust 2',
active: true,
- images: [
- '/assets/img/maps/de_dust2/1.webp',
- '/assets/img/maps/de_dust2/2.webp',
- '/assets/img/maps/de_dust2/3.webp',
- '/assets/img/maps/de_dust2/4.webp',
- ],
+ images: mapImgs('de_dust2', [
+ 'de_dust2_1_png.webp',
+ 'de_dust2_2_png.webp',
+ 'de_dust2_3_png.webp',
+ 'de_dust2_4_png.webp',
+ 'de_dust2_png.webp',
+ ]),
+ icon: iconFor('de_dust2'),
},
{
key: 'de_mirage',
label: 'Mirage',
active: true,
- images: [
- '/assets/img/maps/de_mirage/1.webp',
- '/assets/img/maps/de_mirage/2.webp',
- '/assets/img/maps/de_mirage/3.webp',
- '/assets/img/maps/de_mirage/4.webp',
- '/assets/img/maps/de_mirage/5.webp',
- '/assets/img/maps/de_mirage/6.webp',
- ],
+ images: mapImgs('de_mirage', [
+ 'de_mirage_1_png.webp',
+ 'de_mirage_2_png.webp',
+ 'de_mirage_3_png.webp',
+ 'de_mirage_4_png.webp',
+ ]),
+ icon: iconFor('de_mirage'),
},
{
key: 'de_nuke',
label: 'Nuke',
active: true,
- images: [
- '/assets/img/maps/de_nuke/1.webp',
- '/assets/img/maps/de_nuke/2.webp',
- '/assets/img/maps/de_nuke/3.webp',
- '/assets/img/maps/de_nuke/4.webp',
- '/assets/img/maps/de_nuke/5.webp',
- '/assets/img/maps/de_nuke/6.webp',
- ],
+ images: mapImgs('de_nuke', [
+ 'de_nuke_1_png.webp',
+ 'de_nuke_2_png.webp',
+ 'de_nuke_3_png.webp',
+ 'de_nuke_4_png.webp',
+ 'de_nuke_png.webp',
+ ]),
+ icon: iconFor('de_nuke'),
},
{
key: 'de_ancient',
label: 'Ancient',
active: true,
- images: [
- '/assets/img/maps/de_ancient/1.webp',
- '/assets/img/maps/de_ancient/2.webp',
- '/assets/img/maps/de_ancient/3.webp',
- '/assets/img/maps/de_ancient/4.webp',
- '/assets/img/maps/de_ancient/5.webp',
- '/assets/img/maps/de_ancient/6.webp',
- ],
+ images: mapImgs('de_ancient', [
+ 'de_ancient_1_png.webp',
+ 'de_ancient_2_png.webp',
+ 'de_ancient_3_png.webp',
+ 'de_ancient_4_png.webp',
+ ]),
+ icon: iconFor('de_ancient'),
},
{
key: 'de_inferno',
label: 'Inferno',
active: true,
- images: [
- '/assets/img/maps/de_inferno/1.webp',
- '/assets/img/maps/de_inferno/2.webp',
- '/assets/img/maps/de_inferno/3.webp',
- '/assets/img/maps/de_inferno/4.webp',
- '/assets/img/maps/de_inferno/5.webp',
- '/assets/img/maps/de_inferno/6.webp',
- ],
+ images: mapImgs('de_inferno', [
+ 'de_inferno_1_png.webp',
+ 'de_inferno_2_png.webp',
+ 'de_inferno_3_png.webp',
+ ]),
+ icon: iconFor('de_inferno'),
},
{
key: 'de_overpass',
label: 'Overpass',
active: true,
- images: [
- '/assets/img/maps/de_overpass/1.webp',
- '/assets/img/maps/de_overpass/2.webp',
- '/assets/img/maps/de_overpass/3.webp',
- '/assets/img/maps/de_overpass/4.webp',
- '/assets/img/maps/de_overpass/5.webp',
- '/assets/img/maps/de_overpass/6.webp',
- '/assets/img/maps/de_overpass/7.webp',
- '/assets/img/maps/de_overpass/8.webp',
- ],
+ images: mapImgs('de_overpass', [
+ 'de_overpass_1_png.webp',
+ 'de_overpass_2_png.webp',
+ 'de_overpass_3_png.webp',
+ 'de_overpass_4_png.webp',
+ 'de_overpass_5_png.webp',
+ 'de_overpass_png.webp',
+ ]),
+ icon: iconFor('de_overpass'),
},
{
key: 'de_anubis',
label: 'Anubis',
active: false,
- images: [
- '/assets/img/maps/de_anubis/1.webp',
- '/assets/img/maps/de_anubis/2.webp',
- '/assets/img/maps/de_anubis/3.webp',
- '/assets/img/maps/de_anubis/4.webp',
- '/assets/img/maps/de_anubis/5.webp',
- '/assets/img/maps/de_anubis/6.webp',
- ],
+ images: mapImgs('de_anubis', [
+ 'de_anubis_1_png.webp',
+ 'de_anubis_2_png.webp',
+ 'de_anubis_3_png.webp',
+ 'de_anubis_4_png.webp',
+ 'de_anubis_5_png.webp',
+ ]),
+ icon: iconFor('de_anubis'),
},
{
key: 'de_grail',
label: 'Grail',
active: false,
- images: [
- '/assets/img/maps/de_grail/1.webp',
- '/assets/img/maps/de_grail/2.webp',
- '/assets/img/maps/de_grail/3.webp',
- '/assets/img/maps/de_grail/4.webp',
- '/assets/img/maps/de_grail/5.webp',
- '/assets/img/maps/de_grail/6.webp',
- ],
+ images: mapImgs('de_grail', [
+ 'de_grail_1_png.webp',
+ 'de_grail_2_png.webp',
+ 'de_grail_3_png.webp',
+ 'de_grail_4_png.webp',
+ ]),
+ icon: iconFor('de_grail'),
},
{
key: 'de_jura',
label: 'Jura',
active: false,
- images: [
- '/assets/img/maps/de_jura/1.webp',
- '/assets/img/maps/de_jura/2.webp',
- '/assets/img/maps/de_jura/3.webp',
- '/assets/img/maps/de_jura/4.webp',
- '/assets/img/maps/de_jura/5.webp',
- '/assets/img/maps/de_jura/6.webp',
- '/assets/img/maps/de_jura/7.webp',
- '/assets/img/maps/de_jura/8.webp',
- ],
+ images: mapImgs('de_jura', [
+ 'de_jura_1_png.webp',
+ 'de_jura_2_png.webp',
+ 'de_jura_3_png.webp',
+ 'de_jura_4_png.webp',
+ ]),
+ icon: iconFor('de_jura'),
},
{
key: 'de_vertigo',
label: 'Vertigo',
active: false,
- images: [
- '/assets/img/maps/de_vertigo/1.webp',
- '/assets/img/maps/de_vertigo/2.webp',
- '/assets/img/maps/de_vertigo/3.webp',
- '/assets/img/maps/de_vertigo/4.webp',
- '/assets/img/maps/de_vertigo/5.webp',
- '/assets/img/maps/de_vertigo/6.webp',
- ],
+ images: mapImgs('de_vertigo', [
+ 'de_vertigo_1_png.webp',
+ 'de_vertigo_2_png.webp',
+ 'de_vertigo_3_png.webp',
+ 'de_vertigo_4_png.webp',
+ 'de_vertigo_png.webp',
+ ]),
+ icon: iconFor('de_vertigo'),
},
{
key: 'lobby_mapvote',
label: 'Pick/Ban',
active: true,
- images: [
- '/assets/img/maps/lobby_mapvote/1.webp',
- '/assets/img/maps/lobby_mapvote/2.webp',
- ],
+ images: ['/assets/img/maps/lobby_mapveto_png.webp'],
+ icon: '/assets/img/mapicons/map_icon_lobby_mapveto.svg',
},
]
diff --git a/src/app/lib/sseEvents.ts b/src/app/lib/sseEvents.ts
index 58c2170..4340cf4 100644
--- a/src/app/lib/sseEvents.ts
+++ b/src/app/lib/sseEvents.ts
@@ -31,6 +31,7 @@ export const SSE_EVENT_TYPES = [
'user-status-updated',
'match-ready',
'map-vote-reset',
+ 'ready-updated',
] as const;
export type SSEEventType = typeof SSE_EVENT_TYPES[number];
@@ -84,6 +85,7 @@ export const MATCH_EVENTS = makeEventSet([
'map-vote-admin-edit',
'match-ready',
'map-vote-reset',
+ 'ready-updated',
] as const);
// Events, die das NotificationCenter betreffen
diff --git a/src/generated/prisma/edge.js b/src/generated/prisma/edge.js
index b454172..e755d8a 100644
--- a/src/generated/prisma/edge.js
+++ b/src/generated/prisma/edge.js
@@ -35,12 +35,12 @@ exports.Prisma = Prisma
exports.$Enums = {}
/**
- * Prisma Client JS version: 6.14.0
- * Query Engine version: 717184b7b35ea05dfa71a3236b7af656013e1e49
+ * Prisma Client JS version: 6.15.0
+ * Query Engine version: 85179d7826409ee107a6ba334b5e305ae3fba9fb
*/
Prisma.prismaVersion = {
- client: "6.14.0",
- engine: "717184b7b35ea05dfa71a3236b7af656013e1e49"
+ client: "6.15.0",
+ engine: "85179d7826409ee107a6ba334b5e305ae3fba9fb"
}
Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;
@@ -276,6 +276,12 @@ exports.Prisma.MapVoteStepScalarFieldEnum = {
chosenBy: 'chosenBy'
};
+exports.Prisma.MatchReadyScalarFieldEnum = {
+ matchId: 'matchId',
+ steamId: 'steamId',
+ acceptedAt: 'acceptedAt'
+};
+
exports.Prisma.SortOrder = {
asc: 'asc',
desc: 'desc'
@@ -334,7 +340,8 @@ exports.Prisma.ModelName = {
DemoFile: 'DemoFile',
ServerRequest: 'ServerRequest',
MapVote: 'MapVote',
- MapVoteStep: 'MapVoteStep'
+ MapVoteStep: 'MapVoteStep',
+ MatchReady: 'MatchReady'
};
/**
* Create the Client
@@ -369,8 +376,8 @@ const config = {
"schemaEnvPath": "../../../.env"
},
"relativePath": "../../../prisma",
- "clientVersion": "6.14.0",
- "engineVersion": "717184b7b35ea05dfa71a3236b7af656013e1e49",
+ "clientVersion": "6.15.0",
+ "engineVersion": "85179d7826409ee107a6ba334b5e305ae3fba9fb",
"datasourceNames": [
"db"
],
@@ -383,13 +390,13 @@ const config = {
}
}
},
- "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\n//\n// ──────────────────────────────────────────────\n// 🧑 Benutzer, Teams & Verwaltung\n// ──────────────────────────────────────────────\n//\n\nmodel User {\n steamId String @id\n name String?\n avatar String?\n location String?\n isAdmin Boolean @default(false)\n\n teamId String?\n team Team? @relation(\"UserTeam\", fields: [teamId], references: [id])\n ledTeam Team? @relation(\"TeamLeader\")\n\n matchesAsTeamA Match[] @relation(\"TeamAPlayers\")\n matchesAsTeamB Match[] @relation(\"TeamBPlayers\")\n\n premierRank Int?\n authCode String?\n lastKnownShareCode String?\n lastKnownShareCodeDate DateTime?\n createdAt DateTime @default(now())\n\n invites TeamInvite[] @relation(\"UserInvitations\")\n notifications Notification[]\n matchPlayers MatchPlayer[]\n serverRequests ServerRequest[] @relation(\"MatchRequests\")\n rankHistory RankHistory[] @relation(\"UserRankHistory\")\n demoFiles DemoFile[]\n\n createdSchedules Schedule[] @relation(\"CreatedSchedules\")\n confirmedSchedules Schedule[] @relation(\"ConfirmedSchedules\")\n\n mapVoteChoices MapVoteStep[] @relation(\"VoteStepChooser\")\n\n status UserStatus @default(offline) // 👈 neu\n lastActiveAt DateTime? // optional: wann zuletzt aktiv\n}\n\nenum UserStatus {\n online\n away\n offline\n}\n\nmodel Team {\n id String @id @default(uuid())\n name String @unique\n logo String?\n leaderId String? @unique\n createdAt DateTime @default(now())\n\n activePlayers String[]\n inactivePlayers String[]\n\n leader User? @relation(\"TeamLeader\", fields: [leaderId], references: [steamId])\n members User[] @relation(\"UserTeam\")\n invites TeamInvite[]\n matchPlayers MatchPlayer[]\n\n matchesAsTeamA Match[] @relation(\"MatchTeamA\")\n matchesAsTeamB Match[] @relation(\"MatchTeamB\")\n\n schedulesAsTeamA Schedule[] @relation(\"ScheduleTeamA\")\n schedulesAsTeamB Schedule[] @relation(\"ScheduleTeamB\")\n\n mapVoteSteps MapVoteStep[] @relation(\"VoteStepTeam\")\n}\n\nmodel TeamInvite {\n id String @id @default(uuid())\n steamId String\n teamId String\n type String\n createdAt DateTime @default(now())\n\n user User @relation(\"UserInvitations\", fields: [steamId], references: [steamId])\n team Team @relation(fields: [teamId], references: [id])\n}\n\nmodel Notification {\n id String @id @default(uuid())\n steamId String\n title String?\n message String\n read Boolean @default(false)\n persistent Boolean @default(false)\n actionType String?\n actionData String?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [steamId], references: [steamId])\n}\n\n//\n// ──────────────────────────────────────────────\n// 🎮 Matches & Spieler\n// ──────────────────────────────────────────────\n//\n\n// ──────────────────────────────────────────────\n// 🎮 Matches\n// ──────────────────────────────────────────────\n\nmodel Match {\n id String @id @default(uuid())\n title String\n matchType String @default(\"community\")\n map String?\n description String?\n scoreA Int?\n scoreB Int?\n\n teamAId String?\n teamA Team? @relation(\"MatchTeamA\", fields: [teamAId], references: [id])\n\n teamBId String?\n teamB Team? @relation(\"MatchTeamB\", fields: [teamBId], references: [id])\n\n teamAUsers User[] @relation(\"TeamAPlayers\")\n teamBUsers User[] @relation(\"TeamBPlayers\")\n\n filePath String?\n demoFile DemoFile?\n demoDate DateTime?\n demoData Json?\n\n players MatchPlayer[]\n rankUpdates RankHistory[] @relation(\"MatchRankHistory\")\n\n roundCount Int?\n roundHistory Json?\n winnerTeam String?\n\n bestOf Int @default(3) // 1 | 3 | 5 – app-seitig validieren\n matchDate DateTime? // geplante Startzeit (separat von demoDate)\n mapVote MapVote?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n schedule Schedule?\n}\n\nmodel MatchPlayer {\n id String @id @default(uuid())\n steamId String\n matchId String\n teamId String?\n team Team? @relation(fields: [teamId], references: [id])\n\n match Match @relation(fields: [matchId], references: [id])\n user User @relation(fields: [steamId], references: [steamId])\n\n stats PlayerStats?\n\n createdAt DateTime @default(now())\n\n @@unique([matchId, steamId])\n}\n\nmodel PlayerStats {\n id String @id @default(uuid())\n matchId String\n steamId String\n\n kills Int\n assists Int\n deaths Int\n headshotPct Float\n\n totalDamage Float @default(0)\n utilityDamage Int @default(0)\n flashAssists Int @default(0)\n mvps Int @default(0)\n mvpEliminations Int @default(0)\n mvpDefuse Int @default(0)\n mvpPlant Int @default(0)\n knifeKills Int @default(0)\n zeusKills Int @default(0)\n wallbangKills Int @default(0)\n smokeKills Int @default(0)\n headshots Int @default(0)\n noScopes Int @default(0)\n blindKills Int @default(0)\n\n aim Int @default(0)\n\n oneK Int @default(0)\n twoK Int @default(0)\n threeK Int @default(0)\n fourK Int @default(0)\n fiveK Int @default(0)\n\n rankOld Int?\n rankNew Int?\n rankChange Int?\n winCount Int?\n\n matchPlayer MatchPlayer @relation(fields: [matchId, steamId], references: [matchId, steamId])\n\n @@unique([matchId, steamId])\n}\n\nmodel RankHistory {\n id String @id @default(uuid())\n steamId String\n matchId String?\n\n rankOld Int\n rankNew Int\n delta Int\n winCount Int\n\n createdAt DateTime @default(now())\n\n user User @relation(\"UserRankHistory\", fields: [steamId], references: [steamId])\n match Match? @relation(\"MatchRankHistory\", fields: [matchId], references: [id])\n}\n\nmodel Schedule {\n id String @id @default(uuid())\n title String\n description String?\n map String?\n date DateTime\n status ScheduleStatus @default(PENDING)\n\n teamAId String?\n teamA Team? @relation(\"ScheduleTeamA\", fields: [teamAId], references: [id])\n\n teamBId String?\n teamB Team? @relation(\"ScheduleTeamB\", fields: [teamBId], references: [id])\n\n createdById String\n createdBy User @relation(\"CreatedSchedules\", fields: [createdById], references: [steamId])\n\n confirmedById String?\n confirmedBy User? @relation(\"ConfirmedSchedules\", fields: [confirmedById], references: [steamId])\n\n linkedMatchId String? @unique\n linkedMatch Match? @relation(fields: [linkedMatchId], references: [id])\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum ScheduleStatus {\n PENDING\n CONFIRMED\n DECLINED\n CANCELLED\n COMPLETED\n}\n\n//\n// ──────────────────────────────────────────────\n// 📦 Demo-Dateien & CS2 Requests\n// ──────────────────────────────────────────────\n//\n\nmodel DemoFile {\n id String @id @default(uuid())\n matchId String @unique\n steamId String\n fileName String @unique\n filePath String\n parsed Boolean @default(false)\n\n createdAt DateTime @default(now())\n\n match Match @relation(fields: [matchId], references: [id])\n user User @relation(fields: [steamId], references: [steamId])\n}\n\nmodel ServerRequest {\n id String @id @default(uuid())\n steamId String\n matchId String\n reservationId BigInt\n tvPort BigInt\n processed Boolean @default(false)\n failed Boolean @default(false)\n\n createdAt DateTime @default(now())\n\n user User @relation(\"MatchRequests\", fields: [steamId], references: [steamId])\n\n @@unique([steamId, matchId])\n}\n\n// ──────────────────────────────────────────────\n// 🗺️ Map-Vote\n// ──────────────────────────────────────────────\n\nenum MapVoteAction {\n BAN\n PICK\n DECIDER\n}\n\nmodel MapVote {\n id String @id @default(uuid())\n matchId String @unique\n match Match @relation(fields: [matchId], references: [id])\n\n bestOf Int @default(3)\n mapPool String[]\n currentIdx Int @default(0)\n locked Boolean @default(false)\n opensAt DateTime?\n\n leadMinutes Int @default(60)\n\n adminEditingBy String?\n adminEditingSince DateTime?\n\n steps MapVoteStep[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel MapVoteStep {\n id String @id @default(uuid())\n voteId String\n order Int\n action MapVoteAction\n\n teamId String?\n team Team? @relation(\"VoteStepTeam\", fields: [teamId], references: [id])\n\n map String?\n chosenAt DateTime?\n chosenBy String?\n chooser User? @relation(\"VoteStepChooser\", fields: [chosenBy], references: [steamId])\n\n vote MapVote @relation(fields: [voteId], references: [id])\n\n @@unique([voteId, order])\n @@index([teamId])\n @@index([chosenBy])\n}\n",
- "inlineSchemaHash": "1e05457b6d67e4b38fde40329269fe298cd7d9a74bfe85d0b981e8ab739a8f28",
+ "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\n//\n// ──────────────────────────────────────────────\n// 🧑 Benutzer, Teams & Verwaltung\n// ──────────────────────────────────────────────\n//\n\nmodel User {\n steamId String @id\n name String?\n avatar String?\n location String?\n isAdmin Boolean @default(false)\n\n teamId String?\n team Team? @relation(\"UserTeam\", fields: [teamId], references: [id])\n ledTeam Team? @relation(\"TeamLeader\")\n\n matchesAsTeamA Match[] @relation(\"TeamAPlayers\")\n matchesAsTeamB Match[] @relation(\"TeamBPlayers\")\n\n premierRank Int?\n authCode String?\n lastKnownShareCode String?\n lastKnownShareCodeDate DateTime?\n createdAt DateTime @default(now())\n\n invites TeamInvite[] @relation(\"UserInvitations\")\n notifications Notification[]\n matchPlayers MatchPlayer[]\n serverRequests ServerRequest[] @relation(\"MatchRequests\")\n rankHistory RankHistory[] @relation(\"UserRankHistory\")\n demoFiles DemoFile[]\n\n createdSchedules Schedule[] @relation(\"CreatedSchedules\")\n confirmedSchedules Schedule[] @relation(\"ConfirmedSchedules\")\n\n mapVoteChoices MapVoteStep[] @relation(\"VoteStepChooser\")\n\n status UserStatus @default(offline) // 👈 neu\n lastActiveAt DateTime? // optional: wann zuletzt aktiv\n\n readyAcceptances MatchReady[] @relation(\"MatchReadyUser\")\n}\n\nenum UserStatus {\n online\n away\n offline\n}\n\nmodel Team {\n id String @id @default(uuid())\n name String @unique\n logo String?\n leaderId String? @unique\n createdAt DateTime @default(now())\n\n activePlayers String[]\n inactivePlayers String[]\n\n leader User? @relation(\"TeamLeader\", fields: [leaderId], references: [steamId])\n members User[] @relation(\"UserTeam\")\n invites TeamInvite[]\n matchPlayers MatchPlayer[]\n\n matchesAsTeamA Match[] @relation(\"MatchTeamA\")\n matchesAsTeamB Match[] @relation(\"MatchTeamB\")\n\n schedulesAsTeamA Schedule[] @relation(\"ScheduleTeamA\")\n schedulesAsTeamB Schedule[] @relation(\"ScheduleTeamB\")\n\n mapVoteSteps MapVoteStep[] @relation(\"VoteStepTeam\")\n}\n\nmodel TeamInvite {\n id String @id @default(uuid())\n steamId String\n teamId String\n type String\n createdAt DateTime @default(now())\n\n user User @relation(\"UserInvitations\", fields: [steamId], references: [steamId])\n team Team @relation(fields: [teamId], references: [id])\n}\n\nmodel Notification {\n id String @id @default(uuid())\n steamId String\n title String?\n message String\n read Boolean @default(false)\n persistent Boolean @default(false)\n actionType String?\n actionData String?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [steamId], references: [steamId])\n}\n\n//\n// ──────────────────────────────────────────────\n// 🎮 Matches & Spieler\n// ──────────────────────────────────────────────\n//\n\n// ──────────────────────────────────────────────\n// 🎮 Matches\n// ──────────────────────────────────────────────\n\nmodel Match {\n id String @id @default(uuid())\n title String\n matchType String @default(\"community\")\n map String?\n description String?\n scoreA Int?\n scoreB Int?\n\n teamAId String?\n teamA Team? @relation(\"MatchTeamA\", fields: [teamAId], references: [id])\n\n teamBId String?\n teamB Team? @relation(\"MatchTeamB\", fields: [teamBId], references: [id])\n\n teamAUsers User[] @relation(\"TeamAPlayers\")\n teamBUsers User[] @relation(\"TeamBPlayers\")\n\n filePath String?\n demoFile DemoFile?\n demoDate DateTime?\n demoData Json?\n\n players MatchPlayer[]\n rankUpdates RankHistory[] @relation(\"MatchRankHistory\")\n\n roundCount Int?\n roundHistory Json?\n winnerTeam String?\n\n bestOf Int @default(3) // 1 | 3 | 5 – app-seitig validieren\n matchDate DateTime? // geplante Startzeit (separat von demoDate)\n mapVote MapVote?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n schedule Schedule?\n\n readyAcceptances MatchReady[] @relation(\"MatchReadyMatch\")\n}\n\nmodel MatchPlayer {\n id String @id @default(uuid())\n steamId String\n matchId String\n teamId String?\n team Team? @relation(fields: [teamId], references: [id])\n\n match Match @relation(fields: [matchId], references: [id])\n user User @relation(fields: [steamId], references: [steamId])\n\n stats PlayerStats?\n\n createdAt DateTime @default(now())\n\n @@unique([matchId, steamId])\n}\n\nmodel PlayerStats {\n id String @id @default(uuid())\n matchId String\n steamId String\n\n kills Int\n assists Int\n deaths Int\n headshotPct Float\n\n totalDamage Float @default(0)\n utilityDamage Int @default(0)\n flashAssists Int @default(0)\n mvps Int @default(0)\n mvpEliminations Int @default(0)\n mvpDefuse Int @default(0)\n mvpPlant Int @default(0)\n knifeKills Int @default(0)\n zeusKills Int @default(0)\n wallbangKills Int @default(0)\n smokeKills Int @default(0)\n headshots Int @default(0)\n noScopes Int @default(0)\n blindKills Int @default(0)\n\n aim Int @default(0)\n\n oneK Int @default(0)\n twoK Int @default(0)\n threeK Int @default(0)\n fourK Int @default(0)\n fiveK Int @default(0)\n\n rankOld Int?\n rankNew Int?\n rankChange Int?\n winCount Int?\n\n matchPlayer MatchPlayer @relation(fields: [matchId, steamId], references: [matchId, steamId])\n\n @@unique([matchId, steamId])\n}\n\nmodel RankHistory {\n id String @id @default(uuid())\n steamId String\n matchId String?\n\n rankOld Int\n rankNew Int\n delta Int\n winCount Int\n\n createdAt DateTime @default(now())\n\n user User @relation(\"UserRankHistory\", fields: [steamId], references: [steamId])\n match Match? @relation(\"MatchRankHistory\", fields: [matchId], references: [id])\n}\n\nmodel Schedule {\n id String @id @default(uuid())\n title String\n description String?\n map String?\n date DateTime\n status ScheduleStatus @default(PENDING)\n\n teamAId String?\n teamA Team? @relation(\"ScheduleTeamA\", fields: [teamAId], references: [id])\n\n teamBId String?\n teamB Team? @relation(\"ScheduleTeamB\", fields: [teamBId], references: [id])\n\n createdById String\n createdBy User @relation(\"CreatedSchedules\", fields: [createdById], references: [steamId])\n\n confirmedById String?\n confirmedBy User? @relation(\"ConfirmedSchedules\", fields: [confirmedById], references: [steamId])\n\n linkedMatchId String? @unique\n linkedMatch Match? @relation(fields: [linkedMatchId], references: [id])\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum ScheduleStatus {\n PENDING\n CONFIRMED\n DECLINED\n CANCELLED\n COMPLETED\n}\n\n//\n// ──────────────────────────────────────────────\n// 📦 Demo-Dateien & CS2 Requests\n// ──────────────────────────────────────────────\n//\n\nmodel DemoFile {\n id String @id @default(uuid())\n matchId String @unique\n steamId String\n fileName String @unique\n filePath String\n parsed Boolean @default(false)\n\n createdAt DateTime @default(now())\n\n match Match @relation(fields: [matchId], references: [id])\n user User @relation(fields: [steamId], references: [steamId])\n}\n\nmodel ServerRequest {\n id String @id @default(uuid())\n steamId String\n matchId String\n reservationId BigInt\n tvPort BigInt\n processed Boolean @default(false)\n failed Boolean @default(false)\n\n createdAt DateTime @default(now())\n\n user User @relation(\"MatchRequests\", fields: [steamId], references: [steamId])\n\n @@unique([steamId, matchId])\n}\n\n// ──────────────────────────────────────────────\n// 🗺️ Map-Vote\n// ──────────────────────────────────────────────\n\nenum MapVoteAction {\n BAN\n PICK\n DECIDER\n}\n\nmodel MapVote {\n id String @id @default(uuid())\n matchId String @unique\n match Match @relation(fields: [matchId], references: [id])\n\n bestOf Int @default(3)\n mapPool String[]\n currentIdx Int @default(0)\n locked Boolean @default(false)\n opensAt DateTime?\n\n leadMinutes Int @default(60)\n\n adminEditingBy String?\n adminEditingSince DateTime?\n\n steps MapVoteStep[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel MapVoteStep {\n id String @id @default(uuid())\n voteId String\n order Int\n action MapVoteAction\n\n teamId String?\n team Team? @relation(\"VoteStepTeam\", fields: [teamId], references: [id])\n\n map String?\n chosenAt DateTime?\n chosenBy String?\n chooser User? @relation(\"VoteStepChooser\", fields: [chosenBy], references: [steamId])\n\n vote MapVote @relation(fields: [voteId], references: [id])\n\n @@unique([voteId, order])\n @@index([teamId])\n @@index([chosenBy])\n}\n\nmodel MatchReady {\n matchId String\n steamId String\n acceptedAt DateTime @default(now())\n\n match Match @relation(\"MatchReadyMatch\", fields: [matchId], references: [id])\n user User @relation(\"MatchReadyUser\", fields: [steamId], references: [steamId])\n\n @@id([matchId, steamId])\n @@index([steamId])\n}\n",
+ "inlineSchemaHash": "262382781db09c76873c9b1ff3d732b74b3425d84159b0d7a1939ca346cd7c0f",
"copyEngine": true
}
config.dirname = '/'
-config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"avatar\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"location\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"UserTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ledTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamLeader\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"TeamAPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"TeamBPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"premierRank\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"authCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastKnownShareCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastKnownShareCodeDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"invites\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamInvite\",\"nativeType\":null,\"relationName\":\"UserInvitations\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"notifications\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Notification\",\"nativeType\":null,\"relationName\":\"NotificationToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"serverRequests\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ServerRequest\",\"nativeType\":null,\"relationName\":\"MatchRequests\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankHistory\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"RankHistory\",\"nativeType\":null,\"relationName\":\"UserRankHistory\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoFiles\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DemoFile\",\"nativeType\":null,\"relationName\":\"DemoFileToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdSchedules\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"CreatedSchedules\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedSchedules\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ConfirmedSchedules\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVoteChoices\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"VoteStepChooser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"UserStatus\",\"nativeType\":null,\"default\":\"offline\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastActiveAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Team\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"logo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leaderId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"activePlayers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"inactivePlayers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leader\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamLeader\",\"relationFromFields\":[\"leaderId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"members\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"invites\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamInvite\",\"nativeType\":null,\"relationName\":\"TeamToTeamInvite\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchTeamA\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchTeamB\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"schedulesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ScheduleTeamA\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"schedulesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ScheduleTeamB\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVoteSteps\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"VoteStepTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TeamInvite\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserInvitations\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToTeamInvite\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Notification\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"message\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"read\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"persistent\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actionType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actionData\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"NotificationToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Match\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"community\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scoreA\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scoreB\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamA\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchTeamA\",\"relationFromFields\":[\"teamAId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamB\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchTeamB\",\"relationFromFields\":[\"teamBId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAUsers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamAPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBUsers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamBPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"filePath\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoFile\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DemoFile\",\"nativeType\":null,\"relationName\":\"DemoFileToMatch\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoData\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchToMatchPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankUpdates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"RankHistory\",\"nativeType\":null,\"relationName\":\"MatchRankHistory\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundHistory\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winnerTeam\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestOf\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":3,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVote\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVote\",\"nativeType\":null,\"relationName\":\"MapVoteToMatch\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"schedule\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"MatchToSchedule\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchPlayer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchPlayerToTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchPlayer\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"MatchPlayerToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stats\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerStats\",\"nativeType\":null,\"relationName\":\"MatchPlayerToPlayerStats\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"matchId\",\"steamId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"matchId\",\"steamId\"]}],\"isGenerated\":false},\"PlayerStats\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"kills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deaths\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"headshotPct\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalDamage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"utilityDamage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flashAssists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvps\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpEliminations\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpDefuse\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpPlant\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"knifeKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"zeusKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wallbangKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"smokeKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"headshots\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"noScopes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"blindKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aim\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oneK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"twoK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"threeK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fourK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fiveK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankOld\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankNew\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankChange\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToPlayerStats\",\"relationFromFields\":[\"matchId\",\"steamId\"],\"relationToFields\":[\"matchId\",\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"matchId\",\"steamId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"matchId\",\"steamId\"]}],\"isGenerated\":false},\"RankHistory\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankOld\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankNew\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"delta\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserRankHistory\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchRankHistory\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Schedule\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"date\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ScheduleStatus\",\"nativeType\":null,\"default\":\"PENDING\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamA\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"ScheduleTeamA\",\"relationFromFields\":[\"teamAId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamB\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"ScheduleTeamB\",\"relationFromFields\":[\"teamBId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdById\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"CreatedSchedules\",\"relationFromFields\":[\"createdById\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedById\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedBy\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"ConfirmedSchedules\",\"relationFromFields\":[\"confirmedById\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"linkedMatchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"linkedMatch\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToSchedule\",\"relationFromFields\":[\"linkedMatchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DemoFile\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"filePath\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"parsed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"DemoFileToMatch\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"DemoFileToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ServerRequest\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reservationId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"BigInt\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tvPort\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"BigInt\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"processed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"failed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"MatchRequests\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"steamId\",\"matchId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"steamId\",\"matchId\"]}],\"isGenerated\":false},\"MapVote\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MapVoteToMatch\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestOf\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":3,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapPool\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentIdx\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"locked\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opensAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leadMinutes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":60,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"adminEditingBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"adminEditingSince\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steps\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"MapVoteToMapVoteStep\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MapVoteStep\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"voteId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"order\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"action\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteAction\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"VoteStepTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chosenAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chosenBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chooser\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"VoteStepChooser\",\"relationFromFields\":[\"chosenBy\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"vote\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVote\",\"nativeType\":null,\"relationName\":\"MapVoteToMapVoteStep\",\"relationFromFields\":[\"voteId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"voteId\",\"order\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"voteId\",\"order\"]}],\"isGenerated\":false}},\"enums\":{\"UserStatus\":{\"values\":[{\"name\":\"online\",\"dbName\":null},{\"name\":\"away\",\"dbName\":null},{\"name\":\"offline\",\"dbName\":null}],\"dbName\":null},\"ScheduleStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"CONFIRMED\",\"dbName\":null},{\"name\":\"DECLINED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null}],\"dbName\":null},\"MapVoteAction\":{\"values\":[{\"name\":\"BAN\",\"dbName\":null},{\"name\":\"PICK\",\"dbName\":null},{\"name\":\"DECIDER\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}")
+config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"avatar\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"location\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"UserTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ledTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamLeader\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"TeamAPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"TeamBPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"premierRank\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"authCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastKnownShareCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastKnownShareCodeDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"invites\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamInvite\",\"nativeType\":null,\"relationName\":\"UserInvitations\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"notifications\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Notification\",\"nativeType\":null,\"relationName\":\"NotificationToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"serverRequests\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ServerRequest\",\"nativeType\":null,\"relationName\":\"MatchRequests\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankHistory\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"RankHistory\",\"nativeType\":null,\"relationName\":\"UserRankHistory\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoFiles\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DemoFile\",\"nativeType\":null,\"relationName\":\"DemoFileToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdSchedules\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"CreatedSchedules\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedSchedules\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ConfirmedSchedules\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVoteChoices\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"VoteStepChooser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"UserStatus\",\"nativeType\":null,\"default\":\"offline\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lastActiveAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"readyAcceptances\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchReady\",\"nativeType\":null,\"relationName\":\"MatchReadyUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Team\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"logo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leaderId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"activePlayers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"inactivePlayers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leader\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamLeader\",\"relationFromFields\":[\"leaderId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"members\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"invites\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamInvite\",\"nativeType\":null,\"relationName\":\"TeamToTeamInvite\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchTeamA\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchTeamB\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"schedulesAsTeamA\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ScheduleTeamA\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"schedulesAsTeamB\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"ScheduleTeamB\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVoteSteps\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"VoteStepTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TeamInvite\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserInvitations\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToTeamInvite\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Notification\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"message\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"read\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"persistent\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actionType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actionData\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"NotificationToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Match\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"community\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scoreA\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scoreB\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamA\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchTeamA\",\"relationFromFields\":[\"teamAId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamB\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchTeamB\",\"relationFromFields\":[\"teamBId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAUsers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamAPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBUsers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamBPlayers\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"filePath\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoFile\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DemoFile\",\"nativeType\":null,\"relationName\":\"DemoFileToMatch\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"demoData\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchToMatchPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankUpdates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"RankHistory\",\"nativeType\":null,\"relationName\":\"MatchRankHistory\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundHistory\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winnerTeam\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestOf\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":3,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapVote\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVote\",\"nativeType\":null,\"relationName\":\"MapVoteToMatch\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"schedule\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Schedule\",\"nativeType\":null,\"relationName\":\"MatchToSchedule\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"readyAcceptances\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchReady\",\"nativeType\":null,\"relationName\":\"MatchReadyMatch\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchPlayer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"MatchPlayerToTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchPlayer\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"MatchPlayerToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stats\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerStats\",\"nativeType\":null,\"relationName\":\"MatchPlayerToPlayerStats\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"matchId\",\"steamId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"matchId\",\"steamId\"]}],\"isGenerated\":false},\"PlayerStats\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"kills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deaths\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"headshotPct\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalDamage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"utilityDamage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flashAssists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvps\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpEliminations\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpDefuse\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mvpPlant\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"knifeKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"zeusKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wallbangKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"smokeKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"headshots\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"noScopes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"blindKills\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aim\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oneK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"twoK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"threeK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fourK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fiveK\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankOld\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankNew\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankChange\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchPlayer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchPlayer\",\"nativeType\":null,\"relationName\":\"MatchPlayerToPlayerStats\",\"relationFromFields\":[\"matchId\",\"steamId\"],\"relationToFields\":[\"matchId\",\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"matchId\",\"steamId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"matchId\",\"steamId\"]}],\"isGenerated\":false},\"RankHistory\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankOld\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"rankNew\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"delta\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"UserRankHistory\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchRankHistory\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Schedule\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"date\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ScheduleStatus\",\"nativeType\":null,\"default\":\"PENDING\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamAId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamA\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"ScheduleTeamA\",\"relationFromFields\":[\"teamAId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamBId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamB\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"ScheduleTeamB\",\"relationFromFields\":[\"teamBId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdById\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"CreatedSchedules\",\"relationFromFields\":[\"createdById\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedById\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confirmedBy\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"ConfirmedSchedules\",\"relationFromFields\":[\"confirmedById\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"linkedMatchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"linkedMatch\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToSchedule\",\"relationFromFields\":[\"linkedMatchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DemoFile\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"filePath\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"parsed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"DemoFileToMatch\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"DemoFileToUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ServerRequest\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reservationId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"BigInt\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tvPort\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"BigInt\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"processed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"failed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"MatchRequests\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"steamId\",\"matchId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"steamId\",\"matchId\"]}],\"isGenerated\":false},\"MapVote\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MapVoteToMatch\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestOf\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":3,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"mapPool\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentIdx\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"locked\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opensAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"leadMinutes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":60,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"adminEditingBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"adminEditingSince\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steps\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteStep\",\"nativeType\":null,\"relationName\":\"MapVoteToMapVoteStep\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MapVoteStep\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"voteId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"order\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"action\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVoteAction\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"VoteStepTeam\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"map\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chosenAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chosenBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"chooser\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"VoteStepChooser\",\"relationFromFields\":[\"chosenBy\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"vote\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MapVote\",\"nativeType\":null,\"relationName\":\"MapVoteToMapVoteStep\",\"relationFromFields\":[\"voteId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"voteId\",\"order\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"voteId\",\"order\"]}],\"isGenerated\":false},\"MatchReady\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"steamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"acceptedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchReadyMatch\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"MatchReadyUser\",\"relationFromFields\":[\"steamId\"],\"relationToFields\":[\"steamId\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":{\"name\":null,\"fields\":[\"matchId\",\"steamId\"]},\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"UserStatus\":{\"values\":[{\"name\":\"online\",\"dbName\":null},{\"name\":\"away\",\"dbName\":null},{\"name\":\"offline\",\"dbName\":null}],\"dbName\":null},\"ScheduleStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"CONFIRMED\",\"dbName\":null},{\"name\":\"DECLINED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null}],\"dbName\":null},\"MapVoteAction\":{\"values\":[{\"name\":\"BAN\",\"dbName\":null},{\"name\":\"PICK\",\"dbName\":null},{\"name\":\"DECIDER\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}")
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
config.engineWasm = undefined
config.compilerWasm = undefined
diff --git a/src/generated/prisma/index-browser.js b/src/generated/prisma/index-browser.js
index bc8f3c3..e4be08d 100644
--- a/src/generated/prisma/index-browser.js
+++ b/src/generated/prisma/index-browser.js
@@ -20,12 +20,12 @@ exports.Prisma = Prisma
exports.$Enums = {}
/**
- * Prisma Client JS version: 6.14.0
- * Query Engine version: 717184b7b35ea05dfa71a3236b7af656013e1e49
+ * Prisma Client JS version: 6.15.0
+ * Query Engine version: 85179d7826409ee107a6ba334b5e305ae3fba9fb
*/
Prisma.prismaVersion = {
- client: "6.14.0",
- engine: "717184b7b35ea05dfa71a3236b7af656013e1e49"
+ client: "6.15.0",
+ engine: "85179d7826409ee107a6ba334b5e305ae3fba9fb"
}
Prisma.PrismaClientKnownRequestError = () => {
@@ -304,6 +304,12 @@ exports.Prisma.MapVoteStepScalarFieldEnum = {
chosenBy: 'chosenBy'
};
+exports.Prisma.MatchReadyScalarFieldEnum = {
+ matchId: 'matchId',
+ steamId: 'steamId',
+ acceptedAt: 'acceptedAt'
+};
+
exports.Prisma.SortOrder = {
asc: 'asc',
desc: 'desc'
@@ -362,7 +368,8 @@ exports.Prisma.ModelName = {
DemoFile: 'DemoFile',
ServerRequest: 'ServerRequest',
MapVote: 'MapVote',
- MapVoteStep: 'MapVoteStep'
+ MapVoteStep: 'MapVoteStep',
+ MatchReady: 'MatchReady'
};
/**
diff --git a/src/generated/prisma/index.d.ts b/src/generated/prisma/index.d.ts
index 95f5980..b89bdf2 100644
--- a/src/generated/prisma/index.d.ts
+++ b/src/generated/prisma/index.d.ts
@@ -78,6 +78,11 @@ export type MapVote = $Result.DefaultSelection
*
*/
export type MapVoteStep = $Result.DefaultSelection
+/**
+ * Model MatchReady
+ *
+ */
+export type MatchReady = $Result.DefaultSelection
/**
* Enums
@@ -372,6 +377,16 @@ export class PrismaClient<
* ```
*/
get mapVoteStep(): Prisma.MapVoteStepDelegate;
+
+ /**
+ * `prisma.matchReady`: Exposes CRUD operations for the **MatchReady** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MatchReadies
+ * const matchReadies = await prisma.matchReady.findMany()
+ * ```
+ */
+ get matchReady(): Prisma.MatchReadyDelegate;
}
export namespace Prisma {
@@ -430,8 +445,8 @@ export namespace Prisma {
export import Exact = $Public.Exact
/**
- * Prisma Client JS version: 6.14.0
- * Query Engine version: 717184b7b35ea05dfa71a3236b7af656013e1e49
+ * Prisma Client JS version: 6.15.0
+ * Query Engine version: 85179d7826409ee107a6ba334b5e305ae3fba9fb
*/
export type PrismaVersion = {
client: string
@@ -824,7 +839,8 @@ export namespace Prisma {
DemoFile: 'DemoFile',
ServerRequest: 'ServerRequest',
MapVote: 'MapVote',
- MapVoteStep: 'MapVoteStep'
+ MapVoteStep: 'MapVoteStep',
+ MatchReady: 'MatchReady'
};
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
@@ -843,7 +859,7 @@ export namespace Prisma {
omit: GlobalOmitOptions
}
meta: {
- modelProps: "user" | "team" | "teamInvite" | "notification" | "match" | "matchPlayer" | "playerStats" | "rankHistory" | "schedule" | "demoFile" | "serverRequest" | "mapVote" | "mapVoteStep"
+ modelProps: "user" | "team" | "teamInvite" | "notification" | "match" | "matchPlayer" | "playerStats" | "rankHistory" | "schedule" | "demoFile" | "serverRequest" | "mapVote" | "mapVoteStep" | "matchReady"
txIsolationLevel: Prisma.TransactionIsolationLevel
}
model: {
@@ -1809,6 +1825,80 @@ export namespace Prisma {
}
}
}
+ MatchReady: {
+ payload: Prisma.$MatchReadyPayload
+ fields: Prisma.MatchReadyFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MatchReadyFindUniqueArgs
+ result: $Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MatchReadyFindUniqueOrThrowArgs
+ result: $Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MatchReadyFindFirstArgs
+ result: $Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MatchReadyFindFirstOrThrowArgs
+ result: $Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MatchReadyFindManyArgs
+ result: $Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MatchReadyCreateArgs
+ result: $Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MatchReadyCreateManyArgs
+ result: BatchPayload
+ }
+ createManyAndReturn: {
+ args: Prisma.MatchReadyCreateManyAndReturnArgs
+ result: $Utils.PayloadToResult[]
+ }
+ delete: {
+ args: Prisma.MatchReadyDeleteArgs
+ result: $Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MatchReadyUpdateArgs
+ result: $Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MatchReadyDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MatchReadyUpdateManyArgs
+ result: BatchPayload
+ }
+ updateManyAndReturn: {
+ args: Prisma.MatchReadyUpdateManyAndReturnArgs
+ result: $Utils.PayloadToResult[]
+ }
+ upsert: {
+ args: Prisma.MatchReadyUpsertArgs
+ result: $Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MatchReadyAggregateArgs
+ result: $Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MatchReadyGroupByArgs
+ result: $Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MatchReadyCountArgs
+ result: $Utils.Optional | number
+ }
+ }
+ }
}
} & {
other: {
@@ -1914,6 +2004,7 @@ export namespace Prisma {
serverRequest?: ServerRequestOmit
mapVote?: MapVoteOmit
mapVoteStep?: MapVoteStepOmit
+ matchReady?: MatchReadyOmit
}
/* Types for Logging */
@@ -2005,6 +2096,7 @@ export namespace Prisma {
createdSchedules: number
confirmedSchedules: number
mapVoteChoices: number
+ readyAcceptances: number
}
export type UserCountOutputTypeSelect = {
@@ -2019,6 +2111,7 @@ export namespace Prisma {
createdSchedules?: boolean | UserCountOutputTypeCountCreatedSchedulesArgs
confirmedSchedules?: boolean | UserCountOutputTypeCountConfirmedSchedulesArgs
mapVoteChoices?: boolean | UserCountOutputTypeCountMapVoteChoicesArgs
+ readyAcceptances?: boolean | UserCountOutputTypeCountReadyAcceptancesArgs
}
// Custom InputTypes
@@ -2109,6 +2202,13 @@ export namespace Prisma {
where?: MapVoteStepWhereInput
}
+ /**
+ * UserCountOutputType without action
+ */
+ export type UserCountOutputTypeCountReadyAcceptancesArgs = {
+ where?: MatchReadyWhereInput
+ }
+
/**
* Count Type TeamCountOutputType
@@ -2213,6 +2313,7 @@ export namespace Prisma {
teamBUsers: number
players: number
rankUpdates: number
+ readyAcceptances: number
}
export type MatchCountOutputTypeSelect = {
@@ -2220,6 +2321,7 @@ export namespace Prisma {
teamBUsers?: boolean | MatchCountOutputTypeCountTeamBUsersArgs
players?: boolean | MatchCountOutputTypeCountPlayersArgs
rankUpdates?: boolean | MatchCountOutputTypeCountRankUpdatesArgs
+ readyAcceptances?: boolean | MatchCountOutputTypeCountReadyAcceptancesArgs
}
// Custom InputTypes
@@ -2261,6 +2363,13 @@ export namespace Prisma {
where?: RankHistoryWhereInput
}
+ /**
+ * MatchCountOutputType without action
+ */
+ export type MatchCountOutputTypeCountReadyAcceptancesArgs = {
+ where?: MatchReadyWhereInput
+ }
+
/**
* Count Type MapVoteCountOutputType
@@ -2572,6 +2681,7 @@ export namespace Prisma {
createdSchedules?: boolean | User$createdSchedulesArgs
confirmedSchedules?: boolean | User$confirmedSchedulesArgs
mapVoteChoices?: boolean | User$mapVoteChoicesArgs
+ readyAcceptances?: boolean | User$readyAcceptancesArgs
_count?: boolean | UserCountOutputTypeDefaultArgs
}, ExtArgs["result"]["user"]>
@@ -2640,6 +2750,7 @@ export namespace Prisma {
createdSchedules?: boolean | User$createdSchedulesArgs
confirmedSchedules?: boolean | User$confirmedSchedulesArgs
mapVoteChoices?: boolean | User$mapVoteChoicesArgs
+ readyAcceptances?: boolean | User$readyAcceptancesArgs
_count?: boolean | UserCountOutputTypeDefaultArgs
}
export type UserIncludeCreateManyAndReturn = {
@@ -2665,6 +2776,7 @@ export namespace Prisma {
createdSchedules: Prisma.$SchedulePayload[]
confirmedSchedules: Prisma.$SchedulePayload[]
mapVoteChoices: Prisma.$MapVoteStepPayload[]
+ readyAcceptances: Prisma.$MatchReadyPayload[]
}
scalars: $Extensions.GetPayloadResult<{
steamId: string
@@ -3087,6 +3199,7 @@ export namespace Prisma {
createdSchedules = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
confirmedSchedules = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
mapVoteChoices = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
+ readyAcceptances = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
/**
* Attaches callbacks for the resolution and/or rejection of the Promise.
* @param onfulfilled The callback to execute when the Promise is resolved.
@@ -3826,6 +3939,30 @@ export namespace Prisma {
distinct?: MapVoteStepScalarFieldEnum | MapVoteStepScalarFieldEnum[]
}
+ /**
+ * User.readyAcceptances
+ */
+ export type User$readyAcceptancesArgs = {
+ /**
+ * Select specific fields to fetch from the MatchReady
+ */
+ select?: MatchReadySelect | null
+ /**
+ * Omit specific fields from the MatchReady
+ */
+ omit?: MatchReadyOmit | null
+ /**
+ * Choose, which related nodes to fetch as well
+ */
+ include?: MatchReadyInclude | null
+ where?: MatchReadyWhereInput
+ orderBy?: MatchReadyOrderByWithRelationInput | MatchReadyOrderByWithRelationInput[]
+ cursor?: MatchReadyWhereUniqueInput
+ take?: number
+ skip?: number
+ distinct?: MatchReadyScalarFieldEnum | MatchReadyScalarFieldEnum[]
+ }
+
/**
* User without action
*/
@@ -7665,6 +7802,7 @@ export namespace Prisma {
rankUpdates?: boolean | Match$rankUpdatesArgs
mapVote?: boolean | Match$mapVoteArgs
schedule?: boolean | Match$scheduleArgs
+ readyAcceptances?: boolean | Match$readyAcceptancesArgs
_count?: boolean | MatchCountOutputTypeDefaultArgs
}, ExtArgs["result"]["match"]>
@@ -7749,6 +7887,7 @@ export namespace Prisma {
rankUpdates?: boolean | Match$rankUpdatesArgs
mapVote?: boolean | Match$mapVoteArgs
schedule?: boolean | Match$scheduleArgs
+ readyAcceptances?: boolean | Match$readyAcceptancesArgs
_count?: boolean | MatchCountOutputTypeDefaultArgs
}
export type MatchIncludeCreateManyAndReturn = {
@@ -7772,6 +7911,7 @@ export namespace Prisma {
rankUpdates: Prisma.$RankHistoryPayload[]
mapVote: Prisma.$MapVotePayload | null
schedule: Prisma.$SchedulePayload | null
+ readyAcceptances: Prisma.$MatchReadyPayload[]
}
scalars: $Extensions.GetPayloadResult<{
id: string
@@ -8196,6 +8336,7 @@ export namespace Prisma {
rankUpdates = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
mapVote = {}>(args?: Subset>): Prisma__MapVoteClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
schedule = {}>(args?: Subset>): Prisma__ScheduleClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
+ readyAcceptances = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null>
/**
* Attaches callbacks for the resolution and/or rejection of the Promise.
* @param onfulfilled The callback to execute when the Promise is resolved.
@@ -8830,6 +8971,30 @@ export namespace Prisma {
where?: ScheduleWhereInput
}
+ /**
+ * Match.readyAcceptances
+ */
+ export type Match$readyAcceptancesArgs = {
+ /**
+ * Select specific fields to fetch from the MatchReady
+ */
+ select?: MatchReadySelect | null
+ /**
+ * Omit specific fields from the MatchReady
+ */
+ omit?: MatchReadyOmit | null
+ /**
+ * Choose, which related nodes to fetch as well
+ */
+ include?: MatchReadyInclude | null
+ where?: MatchReadyWhereInput
+ orderBy?: MatchReadyOrderByWithRelationInput | MatchReadyOrderByWithRelationInput[]
+ cursor?: MatchReadyWhereUniqueInput
+ take?: number
+ skip?: number
+ distinct?: MatchReadyScalarFieldEnum | MatchReadyScalarFieldEnum[]
+ }
+
/**
* Match without action
*/
@@ -18572,6 +18737,1046 @@ export namespace Prisma {
}
+ /**
+ * Model MatchReady
+ */
+
+ export type AggregateMatchReady = {
+ _count: MatchReadyCountAggregateOutputType | null
+ _min: MatchReadyMinAggregateOutputType | null
+ _max: MatchReadyMaxAggregateOutputType | null
+ }
+
+ export type MatchReadyMinAggregateOutputType = {
+ matchId: string | null
+ steamId: string | null
+ acceptedAt: Date | null
+ }
+
+ export type MatchReadyMaxAggregateOutputType = {
+ matchId: string | null
+ steamId: string | null
+ acceptedAt: Date | null
+ }
+
+ export type MatchReadyCountAggregateOutputType = {
+ matchId: number
+ steamId: number
+ acceptedAt: number
+ _all: number
+ }
+
+
+ export type MatchReadyMinAggregateInputType = {
+ matchId?: true
+ steamId?: true
+ acceptedAt?: true
+ }
+
+ export type MatchReadyMaxAggregateInputType = {
+ matchId?: true
+ steamId?: true
+ acceptedAt?: true
+ }
+
+ export type MatchReadyCountAggregateInputType = {
+ matchId?: true
+ steamId?: true
+ acceptedAt?: true
+ _all?: true
+ }
+
+ export type MatchReadyAggregateArgs = {
+ /**
+ * Filter which MatchReady to aggregate.
+ */
+ where?: MatchReadyWhereInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
+ *
+ * Determine the order of MatchReadies to fetch.
+ */
+ orderBy?: MatchReadyOrderByWithRelationInput | MatchReadyOrderByWithRelationInput[]
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
+ *
+ * Sets the start position
+ */
+ cursor?: MatchReadyWhereUniqueInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Take `±n` MatchReadies from the position of the cursor.
+ */
+ take?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Skip the first `n` MatchReadies.
+ */
+ skip?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Count returned MatchReadies
+ **/
+ _count?: true | MatchReadyCountAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to find the minimum value
+ **/
+ _min?: MatchReadyMinAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to find the maximum value
+ **/
+ _max?: MatchReadyMaxAggregateInputType
+ }
+
+ export type GetMatchReadyAggregateType = {
+ [P in keyof T & keyof AggregateMatchReady]: P extends '_count' | 'count'
+ ? T[P] extends true
+ ? number
+ : GetScalarType
+ : GetScalarType
+ }
+
+
+
+
+ export type MatchReadyGroupByArgs = {
+ where?: MatchReadyWhereInput
+ orderBy?: MatchReadyOrderByWithAggregationInput | MatchReadyOrderByWithAggregationInput[]
+ by: MatchReadyScalarFieldEnum[] | MatchReadyScalarFieldEnum
+ having?: MatchReadyScalarWhereWithAggregatesInput
+ take?: number
+ skip?: number
+ _count?: MatchReadyCountAggregateInputType | true
+ _min?: MatchReadyMinAggregateInputType
+ _max?: MatchReadyMaxAggregateInputType
+ }
+
+ export type MatchReadyGroupByOutputType = {
+ matchId: string
+ steamId: string
+ acceptedAt: Date
+ _count: MatchReadyCountAggregateOutputType | null
+ _min: MatchReadyMinAggregateOutputType | null
+ _max: MatchReadyMaxAggregateOutputType | null
+ }
+
+ type GetMatchReadyGroupByPayload = Prisma.PrismaPromise<
+ Array<
+ PickEnumerable &
+ {
+ [P in ((keyof T) & (keyof MatchReadyGroupByOutputType))]: P extends '_count'
+ ? T[P] extends boolean
+ ? number
+ : GetScalarType
+ : GetScalarType
+ }
+ >
+ >
+
+
+ export type MatchReadySelect = $Extensions.GetSelect<{
+ matchId?: boolean
+ steamId?: boolean
+ acceptedAt?: boolean
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }, ExtArgs["result"]["matchReady"]>
+
+ export type MatchReadySelectCreateManyAndReturn = $Extensions.GetSelect<{
+ matchId?: boolean
+ steamId?: boolean
+ acceptedAt?: boolean
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }, ExtArgs["result"]["matchReady"]>
+
+ export type MatchReadySelectUpdateManyAndReturn = $Extensions.GetSelect<{
+ matchId?: boolean
+ steamId?: boolean
+ acceptedAt?: boolean
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }, ExtArgs["result"]["matchReady"]>
+
+ export type MatchReadySelectScalar = {
+ matchId?: boolean
+ steamId?: boolean
+ acceptedAt?: boolean
+ }
+
+ export type MatchReadyOmit = $Extensions.GetOmit<"matchId" | "steamId" | "acceptedAt", ExtArgs["result"]["matchReady"]>
+ export type MatchReadyInclude = {
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }
+ export type MatchReadyIncludeCreateManyAndReturn = {
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }
+ export type MatchReadyIncludeUpdateManyAndReturn = {
+ match?: boolean | MatchDefaultArgs
+ user?: boolean | UserDefaultArgs
+ }
+
+ export type $MatchReadyPayload = {
+ name: "MatchReady"
+ objects: {
+ match: Prisma.$MatchPayload
+ user: Prisma.$UserPayload
+ }
+ scalars: $Extensions.GetPayloadResult<{
+ matchId: string
+ steamId: string
+ acceptedAt: Date
+ }, ExtArgs["result"]["matchReady"]>
+ composites: {}
+ }
+
+ type MatchReadyGetPayload = $Result.GetResult
+
+ type MatchReadyCountArgs =
+ Omit & {
+ select?: MatchReadyCountAggregateInputType | true
+ }
+
+ export interface MatchReadyDelegate {
+ [K: symbol]: { types: Prisma.TypeMap['model']['MatchReady'], meta: { name: 'MatchReady' } }
+ /**
+ * Find zero or one MatchReady that matches the filter.
+ * @param {MatchReadyFindUniqueArgs} args - Arguments to find a MatchReady
+ * @example
+ * // Get one MatchReady
+ * const matchReady = await prisma.matchReady.findUnique({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findUnique(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find one MatchReady that matches the filter or throw an error with `error.code='P2025'`
+ * if no matches were found.
+ * @param {MatchReadyFindUniqueOrThrowArgs} args - Arguments to find a MatchReady
+ * @example
+ * // Get one MatchReady
+ * const matchReady = await prisma.matchReady.findUniqueOrThrow({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findUniqueOrThrow(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find the first MatchReady that matches the filter.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyFindFirstArgs} args - Arguments to find a MatchReady
+ * @example
+ * // Get one MatchReady
+ * const matchReady = await prisma.matchReady.findFirst({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findFirst(args?: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find the first MatchReady that matches the filter or
+ * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyFindFirstOrThrowArgs} args - Arguments to find a MatchReady
+ * @example
+ * // Get one MatchReady
+ * const matchReady = await prisma.matchReady.findFirstOrThrow({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findFirstOrThrow(args?: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find zero or more MatchReadies that matches the filter.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyFindManyArgs} args - Arguments to filter and select certain fields only.
+ * @example
+ * // Get all MatchReadies
+ * const matchReadies = await prisma.matchReady.findMany()
+ *
+ * // Get first 10 MatchReadies
+ * const matchReadies = await prisma.matchReady.findMany({ take: 10 })
+ *
+ * // Only select the `matchId`
+ * const matchReadyWithMatchIdOnly = await prisma.matchReady.findMany({ select: { matchId: true } })
+ *
+ */
+ findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>>
+
+ /**
+ * Create a MatchReady.
+ * @param {MatchReadyCreateArgs} args - Arguments to create a MatchReady.
+ * @example
+ * // Create one MatchReady
+ * const MatchReady = await prisma.matchReady.create({
+ * data: {
+ * // ... data to create a MatchReady
+ * }
+ * })
+ *
+ */
+ create(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Create many MatchReadies.
+ * @param {MatchReadyCreateManyArgs} args - Arguments to create many MatchReadies.
+ * @example
+ * // Create many MatchReadies
+ * const matchReady = await prisma.matchReady.createMany({
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ *
+ */
+ createMany(args?: SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Create many MatchReadies and returns the data saved in the database.
+ * @param {MatchReadyCreateManyAndReturnArgs} args - Arguments to create many MatchReadies.
+ * @example
+ * // Create many MatchReadies
+ * const matchReady = await prisma.matchReady.createManyAndReturn({
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ *
+ * // Create many MatchReadies and only return the `matchId`
+ * const matchReadyWithMatchIdOnly = await prisma.matchReady.createManyAndReturn({
+ * select: { matchId: true },
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ *
+ */
+ createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>>
+
+ /**
+ * Delete a MatchReady.
+ * @param {MatchReadyDeleteArgs} args - Arguments to delete one MatchReady.
+ * @example
+ * // Delete one MatchReady
+ * const MatchReady = await prisma.matchReady.delete({
+ * where: {
+ * // ... filter to delete one MatchReady
+ * }
+ * })
+ *
+ */
+ delete(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Update one MatchReady.
+ * @param {MatchReadyUpdateArgs} args - Arguments to update one MatchReady.
+ * @example
+ * // Update one MatchReady
+ * const matchReady = await prisma.matchReady.update({
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: {
+ * // ... provide data here
+ * }
+ * })
+ *
+ */
+ update(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Delete zero or more MatchReadies.
+ * @param {MatchReadyDeleteManyArgs} args - Arguments to filter MatchReadies to delete.
+ * @example
+ * // Delete a few MatchReadies
+ * const { count } = await prisma.matchReady.deleteMany({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ *
+ */
+ deleteMany(args?: SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Update zero or more MatchReadies.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyUpdateManyArgs} args - Arguments to update one or more rows.
+ * @example
+ * // Update many MatchReadies
+ * const matchReady = await prisma.matchReady.updateMany({
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: {
+ * // ... provide data here
+ * }
+ * })
+ *
+ */
+ updateMany(args: SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Update zero or more MatchReadies and returns the data updated in the database.
+ * @param {MatchReadyUpdateManyAndReturnArgs} args - Arguments to update many MatchReadies.
+ * @example
+ * // Update many MatchReadies
+ * const matchReady = await prisma.matchReady.updateManyAndReturn({
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ *
+ * // Update zero or more MatchReadies and only return the `matchId`
+ * const matchReadyWithMatchIdOnly = await prisma.matchReady.updateManyAndReturn({
+ * select: { matchId: true },
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ *
+ */
+ updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>>
+
+ /**
+ * Create or update one MatchReady.
+ * @param {MatchReadyUpsertArgs} args - Arguments to update or create a MatchReady.
+ * @example
+ * // Update or create a MatchReady
+ * const matchReady = await prisma.matchReady.upsert({
+ * create: {
+ * // ... data to create a MatchReady
+ * },
+ * update: {
+ * // ... in case it already exists, update
+ * },
+ * where: {
+ * // ... the filter for the MatchReady we want to update
+ * }
+ * })
+ */
+ upsert(args: SelectSubset>): Prisma__MatchReadyClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+
+ /**
+ * Count the number of MatchReadies.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyCountArgs} args - Arguments to filter MatchReadies to count.
+ * @example
+ * // Count the number of MatchReadies
+ * const count = await prisma.matchReady.count({
+ * where: {
+ * // ... the filter for the MatchReadies we want to count
+ * }
+ * })
+ **/
+ count(
+ args?: Subset,
+ ): Prisma.PrismaPromise<
+ T extends $Utils.Record<'select', any>
+ ? T['select'] extends true
+ ? number
+ : GetScalarType
+ : number
+ >
+
+ /**
+ * Allows you to perform aggregations operations on a MatchReady.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
+ * @example
+ * // Ordered by age ascending
+ * // Where email contains prisma.io
+ * // Limited to the 10 users
+ * const aggregations = await prisma.user.aggregate({
+ * _avg: {
+ * age: true,
+ * },
+ * where: {
+ * email: {
+ * contains: "prisma.io",
+ * },
+ * },
+ * orderBy: {
+ * age: "asc",
+ * },
+ * take: 10,
+ * })
+ **/
+ aggregate(args: Subset): Prisma.PrismaPromise>
+
+ /**
+ * Group by MatchReady.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MatchReadyGroupByArgs} args - Group by arguments.
+ * @example
+ * // Group by city, order by createdAt, get count
+ * const result = await prisma.user.groupBy({
+ * by: ['city', 'createdAt'],
+ * orderBy: {
+ * createdAt: true
+ * },
+ * _count: {
+ * _all: true
+ * },
+ * })
+ *
+ **/
+ groupBy<
+ T extends MatchReadyGroupByArgs,
+ HasSelectOrTake extends Or<
+ Extends<'skip', Keys>,
+ Extends<'take', Keys>
+ >,
+ OrderByArg extends True extends HasSelectOrTake
+ ? { orderBy: MatchReadyGroupByArgs['orderBy'] }
+ : { orderBy?: MatchReadyGroupByArgs['orderBy'] },
+ OrderFields extends ExcludeUnderscoreKeys>>,
+ ByFields extends MaybeTupleToUnion,
+ ByValid extends Has,
+ HavingFields extends GetHavingFields,
+ HavingValid extends Has,
+ ByEmpty extends T['by'] extends never[] ? True : False,
+ InputErrors extends ByEmpty extends True
+ ? `Error: "by" must not be empty.`
+ : HavingValid extends False
+ ? {
+ [P in HavingFields]: P extends ByFields
+ ? never
+ : P extends string
+ ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
+ : [
+ Error,
+ 'Field ',
+ P,
+ ` in "having" needs to be provided in "by"`,
+ ]
+ }[HavingFields]
+ : 'take' extends Keys
+ ? 'orderBy' extends Keys
+ ? ByValid extends True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ : 'Error: If you provide "take", you also need to provide "orderBy"'
+ : 'skip' extends Keys
+ ? 'orderBy' extends Keys
+ ? ByValid extends True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ : 'Error: If you provide "skip", you also need to provide "orderBy"'
+ : ByValid extends True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ >(args: SubsetIntersection & InputErrors): {} extends InputErrors ? GetMatchReadyGroupByPayload : Prisma.PrismaPromise
+ /**
+ * Fields of the MatchReady model
+ */
+ readonly fields: MatchReadyFieldRefs;
+ }
+
+ /**
+ * The delegate class that acts as a "Promise-like" for MatchReady.
+ * Why is this prefixed with `Prisma__`?
+ * Because we want to prevent naming conflicts as mentioned in
+ * https://github.com/prisma/prisma-client-js/issues/707
+ */
+ export interface Prisma__MatchReadyClient extends Prisma.PrismaPromise {
+ readonly [Symbol.toStringTag]: "PrismaPromise"
+ match = {}>(args?: Subset>): Prisma__MatchClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
+ user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
+ /**
+ * Attaches callbacks for the resolution and/or rejection of the Promise.
+ * @param onfulfilled The callback to execute when the Promise is resolved.
+ * @param onrejected The callback to execute when the Promise is rejected.
+ * @returns A Promise for the completion of which ever callback is executed.
+ */
+ then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise
+ /**
+ * Attaches a callback for only the rejection of the Promise.
+ * @param onrejected The callback to execute when the Promise is rejected.
+ * @returns A Promise for the completion of the callback.
+ */
+ catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise
+ /**
+ * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
+ * resolved value cannot be modified from the callback.
+ * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
+ * @returns A Promise for the completion of the callback.
+ */
+ finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise
+ }
+
+
+
+
+ /**
+ * Fields of the MatchReady model
+ */
+ interface MatchReadyFieldRefs {
+ readonly matchId: FieldRef<"MatchReady", 'String'>
+ readonly steamId: FieldRef<"MatchReady", 'String'>
+ readonly acceptedAt: FieldRef<"MatchReady", 'DateTime'>
+ }
+
+
+ // Custom InputTypes
+ /**
+ * MatchReady findUnique
+ */
+ export type MatchReadyFindUniqueArgs = {
+ /**
+ * Select specific fields to fetch from the MatchReady
+ */
+ select?: MatchReadySelect | null
+ /**
+ * Omit specific fields from the MatchReady
+ */
+ omit?: MatchReadyOmit | null
+ /**
+ * Choose, which related nodes to fetch as well
+ */
+ include?: MatchReadyInclude