This commit is contained in:
Linrador 2025-10-10 13:51:20 +02:00
parent c4c714e5ca
commit b2d718738e
18 changed files with 603 additions and 151 deletions

View File

@ -113,6 +113,11 @@ model FaceitGameStat {
@@index([game, elo]) @@index([game, elo])
} }
enum TeamJoinPolicy {
REQUEST
INVITE_ONLY
}
model Team { model Team {
id String @id @default(uuid()) id String @id @default(uuid())
name String @unique name String @unique
@ -137,6 +142,9 @@ model Team {
schedulesAsTeamB Schedule[] @relation("ScheduleTeamB") schedulesAsTeamB Schedule[] @relation("ScheduleTeamB")
mapVoteSteps MapVoteStep[] @relation("VoteStepTeam") mapVoteSteps MapVoteStep[] @relation("VoteStepTeam")
// Default bleibt REQUEST
joinPolicy TeamJoinPolicy @default(REQUEST)
} }
model TeamInvite { model TeamInvite {

View File

@ -1,3 +1,5 @@
// /src/app/[locale]/components/NoTeamView.tsx
'use client' 'use client'
import { useEffect, useMemo, useState } from 'react' import { useEffect, useMemo, useState } from 'react'
@ -24,6 +26,7 @@ const eqTeam = (a: Team, b: Team) => {
if ((a.name ?? '') !== (b.name ?? '')) return false if ((a.name ?? '') !== (b.name ?? '')) return false
if ((a.logo ?? '') !== (b.logo ?? '')) return false if ((a.logo ?? '') !== (b.logo ?? '')) return false
if ((a.leader as any) !== (b.leader as any)) return false if ((a.leader as any) !== (b.leader as any)) return false
if (a.joinPolicy !== b.joinPolicy) return false
return ( return (
eqPlayers(sortPlayers(a.activePlayers), sortPlayers(b.activePlayers)) && eqPlayers(sortPlayers(a.activePlayers), sortPlayers(b.activePlayers)) &&
eqPlayers(sortPlayers(a.inactivePlayers), sortPlayers(b.inactivePlayers)) eqPlayers(sortPlayers(a.inactivePlayers), sortPlayers(b.inactivePlayers))
@ -47,7 +50,7 @@ function parseTeamsResponse(raw: any): Team[] {
export default function NoTeamView({ initialTeams, initialInvitationMap }: Props) { export default function NoTeamView({ initialTeams, initialInvitationMap }: Props) {
const { data: session } = useSession() const { data: session } = useSession()
const currentSteamId = session?.user?.steamId || '' const currentSteamId = session?.user?.steamId || ''
const { lastEvent } = useSSEStore() const { connect, isConnected, lastEvent } = useSSEStore()
const [teams, setTeams] = useState<Team[]>(initialTeams) const [teams, setTeams] = useState<Team[]>(initialTeams)
const [teamToInvitationId, setTeamToInvitationId] = useState<Record<string, string>>(initialInvitationMap) const [teamToInvitationId, setTeamToInvitationId] = useState<Record<string, string>>(initialInvitationMap)
@ -82,7 +85,12 @@ export default function NoTeamView({ initialTeams, initialInvitationMap }: Props
} }
} }
useEffect(() => {
if (currentSteamId && !isConnected) connect(currentSteamId)
}, [currentSteamId, isConnected, connect])
useEffect(() => { fetchTeamsAndInvitations() }, []) useEffect(() => { fetchTeamsAndInvitations() }, [])
useEffect(() => { useEffect(() => {
if (!lastEvent) return if (!lastEvent) return
const { type, payload } = lastEvent const { type, payload } = lastEvent

View File

@ -1,11 +1,15 @@
// /src/app/components/TeamCard.tsx // /src/app/components/TeamCard.tsx
'use client' 'use client'
import { useState, useMemo } from 'react' import { useState, useMemo, useEffect } from 'react'
import { useRouter } from 'next/navigation' import { useRouter } from 'next/navigation'
import Button from './Button' import Button from './Button'
import TeamPremierRankBadge from './TeamPremierRankBadge' import TeamPremierRankBadge from './TeamPremierRankBadge'
import type { Team } from '../../../types/team' import type { Team, TeamJoinPolicy } from '../../../types/team'
// ⬇️ NEU: SSE-Hooks / Type-Guard
import { useSSEStore } from '@/lib/useSSEStore'
import { isSseEventType } from '@/lib/sseEvents'
type Props = { type Props = {
team: Team team: Team
@ -13,8 +17,6 @@ type Props = {
invitationId?: string invitationId?: string
onUpdateInvitation: (teamId: string, newValue: string | null | 'pending') => void onUpdateInvitation: (teamId: string, newValue: string | null | 'pending') => void
adminMode?: boolean adminMode?: boolean
/** (historisch) Ob Join-Anfragen grundsätzlich erlaubt sind.
* Mehrere Teams sind jetzt erlaubt diese Prop wird nicht mehr zum Sperren verwendet. */
canRequestJoin?: boolean canRequestJoin?: boolean
} }
@ -24,43 +26,84 @@ export default function TeamCard({
invitationId, invitationId,
onUpdateInvitation, onUpdateInvitation,
adminMode = false, adminMode = false,
canRequestJoin = true, // bleibt für Abwärtskompatibilität erhalten, hat aber keinen Einfluss mehr auf disabled canRequestJoin = true,
}: Props) { }: Props) {
const router = useRouter() const router = useRouter()
const [joining, setJoining] = useState(false) const [joining, setJoining] = useState(false)
const isRequested = Boolean(invitationId) // ⬇️ NEU: SSE
const { connect, lastEvent, isConnected } = useSSEStore()
// ⬇️ NEU: lokale, “wirksame” Policy startet mit Prop
const [effectivePolicy, setEffectivePolicy] = useState<TeamJoinPolicy>(team.joinPolicy)
// Wenn sich Props ändern (neues Team oder Server-Refetch), Policy nachziehen
useEffect(() => {
setEffectivePolicy(team.joinPolicy)
}, [team.id, team.joinPolicy])
// SSE-Verbindung herstellen
useEffect(() => {
if (!currentUserSteamId) return
if (!isConnected) connect(currentUserSteamId)
}, [currentUserSteamId, isConnected, connect])
// Auf team-updated hören und ggf. Policy übernehmen
useEffect(() => {
if (!lastEvent || !isSseEventType(lastEvent.type)) return
if (lastEvent.type !== 'team-updated') return
const payload = lastEvent.payload ?? {}
if (payload.teamId !== team.id) return
const jp = payload.joinPolicy as TeamJoinPolicy | undefined
if (jp === 'REQUEST' || jp === 'INVITE_ONLY') {
setEffectivePolicy(jp)
}
}, [lastEvent, team.id])
// ── Stati ableiten (jetzt von effectivePolicy!)
const isInviteOnly = effectivePolicy === 'INVITE_ONLY'
const hasRealInvitation = Boolean(invitationId && invitationId !== 'pending')
const hasPendingRequest = invitationId === 'pending'
const isRequested = hasRealInvitation || hasPendingRequest
// Bin ich bereits in DIESEM Team (Leader, aktiv oder inaktiv)?
const isMemberOfThisTeam = useMemo(() => { const isMemberOfThisTeam = useMemo(() => {
const inActive = (team.activePlayers ?? []).some(p => String(p.steamId) === String(currentUserSteamId)) const inActive = (team.activePlayers ?? []).some(p => String(p.steamId) === String(currentUserSteamId))
const inInactive = (team.inactivePlayers ?? []).some(p => String(p.steamId) === String(currentUserSteamId)) const inInactive = (team.inactivePlayers ?? []).some(p => String(p.steamId) === String(currentUserSteamId))
// robust: leader?.steamId ODER leaderId unterstützen const isLeader = team.leader?.steamId && String(team.leader.steamId) === String(currentUserSteamId)
const leaderSteamId = team.leader?.steamId ?? (team as any).leaderId
const isLeader = leaderSteamId && String(leaderSteamId) === String(currentUserSteamId)
return Boolean(inActive || inInactive || isLeader) return Boolean(inActive || inInactive || isLeader)
}, [team, currentUserSteamId]) }, [team, currentUserSteamId])
// ❗Mehrere Teams erlaubt → NICHT mehr wegen "hat schon Team" blocken const isDisabled =
// Gesperrt nur, wenn bereits Mitglied DIESES Teams oder Request läuft joining ||
const isDisabled = joining || isMemberOfThisTeam isMemberOfThisTeam ||
(isInviteOnly && !hasRealInvitation && !hasPendingRequest)
const handleClick = async () => { const handleClick = async () => {
if (joining || isDisabled) return if (joining || isDisabled) return
setJoining(true) setJoining(true)
try { try {
if (isRequested) { if (hasRealInvitation) {
await fetch('/api/user/invitations/reject', { await fetch('/api/user/invitations/reject', {
method : 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body : JSON.stringify({ invitationId }), body: JSON.stringify({ invitationId }),
})
onUpdateInvitation(team.id, null)
} else if (hasPendingRequest) {
await fetch('/api/user/invitations/revoke', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ teamId: team.id, type: 'team-join-request' }),
}) })
onUpdateInvitation(team.id, null) onUpdateInvitation(team.id, null)
} else { } else {
if (isInviteOnly) return
await fetch('/api/team/request-join', { await fetch('/api/team/request-join', {
method : 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body : JSON.stringify({ teamId: team.id }), body: JSON.stringify({ teamId: team.id }),
}) })
onUpdateInvitation(team.id, 'pending') onUpdateInvitation(team.id, 'pending')
} }
@ -73,26 +116,21 @@ export default function TeamCard({
const targetHref = adminMode ? `/admin/teams/${team.id}` : `/team/${team.id}` const targetHref = adminMode ? `/admin/teams/${team.id}` : `/team/${team.id}`
// Label & Farbe abhängig vom Status const buttonLabel = joining ? (
const buttonLabel = joining <>
? ( <span className="animate-spin inline-block size-4 border-[3px] border-current border-t-transparent rounded-full mr-1" />
<> Lädt
<span </>
className="animate-spin inline-block size-4 border-[3px] border-current border-t-transparent rounded-full mr-1" ) : isMemberOfThisTeam ? 'Schon Mitglied'
role="status" : hasRealInvitation ? 'Einladung ablehnen'
aria-label="loading" : hasPendingRequest ? 'Angefragt (zurückziehen)'
/> : isInviteOnly ? 'Nur Einladungen'
Lädt : 'Beitritt anfragen'
</>
)
: isMemberOfThisTeam
? 'Schon Mitglied'
: isRequested
? 'Angefragt (zurückziehen)'
: 'Beitritt anfragen'
const buttonColor = const buttonColor =
isDisabled ? 'gray' : (isRequested ? 'gray' : 'blue') hasRealInvitation ? 'red' :
isDisabled ? 'gray' :
(isRequested ? 'gray' : 'blue')
return ( return (
<div <div

View File

@ -1,4 +1,4 @@
// TeamMemberView.tsx // /src/app/[locale]/components/TeamMemberView.tsx
'use client' 'use client'
@ -12,14 +12,13 @@ import SortableMiniCard from './SortableMiniCard'
import LeaveTeamModal from './LeaveTeamModal' import LeaveTeamModal from './LeaveTeamModal'
import InvitePlayersModal from './InvitePlayersModal' import InvitePlayersModal from './InvitePlayersModal'
import Modal from './Modal' import Modal from './Modal'
import type { Player, InvitedPlayer } from '@/types/team' import type { Player, InvitedPlayer, Team, TeamJoinPolicy } from '@/types/team'
import { AnimatePresence, motion } from 'framer-motion' import { AnimatePresence, motion } from 'framer-motion'
import { leaveTeam, reloadTeam, renameTeam } from '@/lib/sse-actions' import { leaveTeam, reloadTeam, renameTeam } from '@/lib/sse-actions'
import Button from './Button' import Button from './Button'
import NextImage from 'next/image' import NextImage from 'next/image'
import TeamPremierRankBadge from './TeamPremierRankBadge' import TeamPremierRankBadge from './TeamPremierRankBadge'
import Link from 'next/link' import Link from 'next/link'
import { Team } from '../../../types/team'
import { useTeamStore } from '@/lib/stores' import { useTeamStore } from '@/lib/stores'
import { useSSEStore } from '@/lib/useSSEStore' import { useSSEStore } from '@/lib/useSSEStore'
import { import {
@ -60,6 +59,9 @@ export default function TeamMemberView({
const team = teamProp ?? storeTeam const team = teamProp ?? storeTeam
if (!team) return null if (!team) return null
const teamId = team.id
const teamLeaderSteamId = team.leader?.steamId ?? ''
const RELEVANT: ReadonlySet<SSEEventType> = new Set([...TEAM_EVENTS, ...SELF_EVENTS]) const RELEVANT: ReadonlySet<SSEEventType> = new Set([...TEAM_EVENTS, ...SELF_EVENTS])
const isLeader = currentUserSteamId === team.leader?.steamId const isLeader = currentUserSteamId === team.leader?.steamId
@ -85,6 +87,12 @@ export default function TeamMemberView({
const [editedName, setEditedName] = useState(team.name || '') const [editedName, setEditedName] = useState(team.name || '')
const [saveSuccess, setSaveSuccess] = useState(false) const [saveSuccess, setSaveSuccess] = useState(false)
const [joinPolicy, setJoinPolicy] = useState<TeamJoinPolicy>(
(team as any).joinPolicy ?? 'REQUEST'
)
const [savingPolicy, setSavingPolicy] = useState(false)
const [policySaved, setPolicySaved] = useState(false)
const [inviteKey, setInviteKey] = useState(0) const [inviteKey, setInviteKey] = useState(0)
const openInvite = () => { const openInvite = () => {
setInviteKey(k => k + 1) // erzwingt frischen Mount setInviteKey(k => k + 1) // erzwingt frischen Mount
@ -121,6 +129,10 @@ export default function TeamMemberView({
return aa === bb return aa === bb
} }
useEffect(() => {
setJoinPolicy(((team as any)?.joinPolicy ?? 'REQUEST') as TeamJoinPolicy)
}, [team?.id, (team as any)?.joinPolicy])
// Team-Listen lokal synchronisieren // Team-Listen lokal synchronisieren
useEffect(() => { useEffect(() => {
if (!team) return if (!team) return
@ -148,7 +160,7 @@ export default function TeamMemberView({
// Relevante SSE-Events // Relevante SSE-Events
useEffect(() => { useEffect(() => {
if (!lastEvent || !team?.id) return if (!lastEvent || !teamId) return
if (!isSseEventType(lastEvent.type)) return if (!isSseEventType(lastEvent.type)) return
const payload = lastEvent.payload ?? {} const payload = lastEvent.payload ?? {}
@ -169,7 +181,7 @@ export default function TeamMemberView({
if (payload.teamId && payload.teamId !== team.id) return if (payload.teamId && payload.teamId !== team.id) return
;(async () => { ;(async () => {
const updated = await reloadTeam(team.id) const updated = await reloadTeam(teamId)
if (!updated) return if (!updated) return
setTeam(updated) setTeam(updated)
setEditedName(updated.name || '') setEditedName(updated.name || '')
@ -188,7 +200,7 @@ export default function TeamMemberView({
setInvitedPlayers(nextInvited) setInvitedPlayers(nextInvited)
setRemountKey(k => k + 1) setRemountKey(k => k + 1)
})() })()
}, [lastEvent, team?.id, setTeam]) }, [lastEvent, teamId, setTeam])
const handleDragStart = (event: any) => { const handleDragStart = (event: any) => {
const id = event.active.id as string const id = event.active.id as string
@ -202,6 +214,31 @@ export default function TeamMemberView({
} }
} }
const [showPolicyMenu, setShowPolicyMenu] = useState(false)
const policyMenuRef = useRef<HTMLDivElement>(null)
const applyPolicy = async (p: TeamJoinPolicy) => {
if (p === joinPolicy) { setShowPolicyMenu(false); return }
setJoinPolicy(p) // optimistisch
await saveJoinPolicy(p) // serverseitig speichern
setShowPolicyMenu(false)
}
useEffect(() => {
if (!showPolicyMenu) return
const onDocClick = (e: MouseEvent) => {
if (!policyMenuRef.current) return
if (!policyMenuRef.current.contains(e.target as Node)) setShowPolicyMenu(false)
}
const onEsc = (e: KeyboardEvent) => { if (e.key === 'Escape') setShowPolicyMenu(false) }
document.addEventListener('mousedown', onDocClick)
document.addEventListener('keydown', onEsc)
return () => {
document.removeEventListener('mousedown', onDocClick)
document.removeEventListener('keydown', onEsc)
}
}, [showPolicyMenu])
const updateTeamMembers = async (teamId: string, active: Player[], inactive: Player[]) => { const updateTeamMembers = async (teamId: string, active: Player[], inactive: Player[]) => {
try { try {
const res = await fetch('/api/team/update-players', { const res = await fetch('/api/team/update-players', {
@ -290,7 +327,7 @@ export default function TeamMemberView({
setActivePlayers(nextActive) setActivePlayers(nextActive)
setInactivePlayers(nextInactive) setInactivePlayers(nextInactive)
updateTeamMembers(team.id, nextActive, nextInactive).catch(console.error) updateTeamMembers(teamId, nextActive, nextInactive).catch(console.error)
setSaveSuccess(true) setSaveSuccess(true)
setTimeout(()=>setSaveSuccess(false), 3000) setTimeout(()=>setSaveSuccess(false), 3000)
@ -324,7 +361,7 @@ export default function TeamMemberView({
await fetch('/api/team/kick', { await fetch('/api/team/kick', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ steamId: kickCandidate.steamId, teamId: team.id }), body: JSON.stringify({ steamId: kickCandidate.steamId, teamId }),
}) })
await updateTeamMembers(team.id, newActive, newInactive) await updateTeamMembers(team.id, newActive, newInactive)
setKickCandidate(null) setKickCandidate(null)
@ -335,7 +372,7 @@ export default function TeamMemberView({
const res = await fetch('/api/team/transfer-leader', { const res = await fetch('/api/team/transfer-leader', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ teamId: team.id, newLeaderSteamId: newLeaderId }), body: JSON.stringify({ teamId, newLeaderSteamId: newLeaderId }),
}) })
if (!res.ok) { if (!res.ok) {
const data = await res.json() const data = await res.json()
@ -355,6 +392,36 @@ export default function TeamMemberView({
square?: boolean; // center-crop auf Quadrat square?: boolean; // center-crop auf Quadrat
}; };
async function saveJoinPolicy(next: TeamJoinPolicy = joinPolicy) {
const prev = joinPolicy
try {
setSavingPolicy(true)
const res = await fetch('/api/team/update-join-policy', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'same-origin', // oder 'include' same-origin reicht bei relativer URL
cache: 'no-store',
body: JSON.stringify({ teamId, joinPolicy: next }),
})
if (!res.ok) {
const data = await res.json().catch(() => ({}))
throw new Error(data?.message ?? `Speichern fehlgeschlagen (${res.status})`)
}
setPolicySaved(true)
setTimeout(() => setPolicySaved(false), 2000)
const updated = await reloadTeam(teamId)
if (updated) setTeam(updated)
} catch (e) {
// 🔙 Optimistisches Set zurückrollen
setJoinPolicy(prev)
console.error(e)
alert((e as Error).message || 'Speichern fehlgeschlagen')
} finally {
setSavingPolicy(false)
}
}
async function canEncode(mime: string): Promise<boolean> { async function canEncode(mime: string): Promise<boolean> {
try { try {
// OffscreenCanvas hat die zuverlässigste Blob-API // OffscreenCanvas hat die zuverlässigste Blob-API
@ -480,7 +547,7 @@ export default function TeamMemberView({
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
const formData = new FormData() const formData = new FormData()
formData.append('logo', file) formData.append('logo', file)
formData.append('teamId', team!.id) formData.append('teamId', teamId)
const xhr = new XMLHttpRequest() const xhr = new XMLHttpRequest()
xhr.open('POST', '/api/team/upload-logo') xhr.open('POST', '/api/team/upload-logo')
@ -510,7 +577,7 @@ export default function TeamMemberView({
if (!adminMode && !currentUserSteamId) return null if (!adminMode && !currentUserSteamId) return null
const manageSteam: string = adminMode ? (team.leader?.steamId ?? '') : currentUserSteamId const manageSteam: string = adminMode ? teamLeaderSteamId : currentUserSteamId
const renderMemberList = (players: Player[]) => ( const renderMemberList = (players: Player[]) => (
<AnimatePresence> <AnimatePresence>
@ -533,7 +600,7 @@ export default function TeamMemberView({
onKick={setKickCandidate} onKick={setKickCandidate}
onPromote={() => setPromoteCandidate(player)} onPromote={() => setPromoteCandidate(player)}
currentUserSteamId={manageSteam} currentUserSteamId={manageSteam}
teamLeaderSteamId={team.leader?.steamId} teamLeaderSteamId={teamLeaderSteamId}
isAdmin={adminMode} isAdmin={adminMode}
isDraggingGlobal={isDragging} isDraggingGlobal={isDragging}
hideOverlay={isDragging} hideOverlay={isDragging}
@ -695,20 +762,83 @@ export default function TeamMemberView({
</h2> </h2>
<TeamPremierRankBadge players={activePlayers} /> <TeamPremierRankBadge players={activePlayers} />
</div> </div>
{/* Beitritts-Einstellungen (nur Leader/Admin) */}
{canManage && ( {canManage && (
<Button <>
title="Bearbeiten" <Button
color="blue" title="Bearbeiten"
size="sm" color="blue"
variant="soft" size="sm"
onClick={() => { variant="soft"
setIsEditingName(true) onClick={() => {
setEditedName(team.name || '') setIsEditingName(true)
}} setEditedName(team.name || '')
className="h-[34px] px-3 flex items-center justify-center" }}
> className="h-[34px] px-3 flex items-center justify-center"
Bearbeiten >
</Button> Bearbeiten
</Button>
{/* 🔽 Dezente Policy-Pill */}
<div className="relative" ref={policyMenuRef}>
<button
type="button"
onClick={() => setShowPolicyMenu(v => !v)}
className="h-[32px] px-2.5 rounded-full text-xs border border-gray-300 dark:border-neutral-600
bg-white dark:bg-neutral-800 text-gray-700 dark:text-neutral-200
hover:bg-gray-100 hover:dark:bg-neutral-700 inline-flex items-center gap-1"
title="Beitrittsmodus ändern"
>
{joinPolicy === 'INVITE_ONLY' ? (
<svg className="w-3.5 h-3.5" viewBox="0 0 24 24" fill="currentColor">
<path d="M17 8V7a5 5 0 1 0-10 0v1H5v12h14V8h-2Zm-8 0V7a3 3 0 1 1 6 0v1H9Zm-2 2h10v8H7v-8Z"/>
</svg>
) : (
<svg className="w-3.5 h-3.5" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2a5 5 0 0 0-5 5v1H5v12h14V8h-2V7a5 5 0 0 0-5-5Zm-3 6V7a3 3 0 1 1 6 0v1H9Z"/>
</svg>
)}
<span>{joinPolicy === 'INVITE_ONLY' ? 'Nur Einladung' : 'Mit Genehmigung'}</span>
{savingPolicy && (
<span className="ml-1 inline-block size-3 border-2 border-current border-t-transparent rounded-full animate-spin" />
)}
{policySaved && !savingPolicy && <span className="ml-1 text-green-600"></span>}
</button>
{showPolicyMenu && (
<div className="absolute right-0 z-10 mt-1 w-56 rounded-md border border-gray-200 dark:border-neutral-700
bg-white dark:bg-neutral-800 shadow-lg p-1">
<button
onClick={() => applyPolicy('REQUEST')}
className={`w-full text-left px-2.5 py-2 rounded-md text-sm
${joinPolicy === 'REQUEST'
? 'bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-200'
: 'hover:bg-gray-100 dark:hover:bg-neutral-700 text-gray-800 dark:text-neutral-200'}`}
>
<div className="font-medium">Mit Genehmigung</div>
<div className="text-xs text-gray-500 dark:text-neutral-400">
Spieler stellen eine Anfrage; Leader entscheidet.
</div>
</button>
<button
onClick={() => applyPolicy('INVITE_ONLY')}
className={`w-full text-left px-2.5 py-2 rounded-md text-sm
${joinPolicy === 'INVITE_ONLY'
? 'bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-200'
: 'hover:bg-gray-100 dark:hover:bg-neutral-700 text-gray-800 dark:text-neutral-200'}`}
>
<div className="font-medium">Nur Einladung</div>
<div className="text-xs text-gray-500 dark:text-neutral-400">
Beitritt nur per Einladung.
</div>
</button>
</div>
)}
</div>
{/* 🔼 Ende Policy-Pill */}
</>
)} )}
</> </>
)} )}
@ -738,7 +868,7 @@ export default function TeamMemberView({
</div> </div>
<DndContext <DndContext
key={`dnd-${team.id}-${remountKey}`} key={`dnd-${teamId}-${remountKey}`}
collisionDetection={closestCenter} collisionDetection={closestCenter}
onDragStart={handleDragStart} onDragStart={handleDragStart}
onDragEnd={handleDragEnd} onDragEnd={handleDragEnd}

View File

@ -41,7 +41,7 @@ export default function SettingsLayout({ children }: { children: React.ReactNode
</aside> </aside>
{/* rechte Spalte scrollt */} {/* rechte Spalte scrollt */}
<div ref={scrollRef} className="min-h-0 p-4"> <div ref={scrollRef} className="min-h-0 p-4 overflow-auto">
<main className="min-h-0">{children}</main> <main className="min-h-0">{children}</main>
</div> </div>
</div> </div>

View File

@ -1,7 +1,7 @@
// /src/app/api/team/[teamId]/route.ts // /src/app/api/team/[teamId]/route.ts
import { NextResponse, type NextRequest } from 'next/server' import { NextResponse, type NextRequest } from 'next/server'
import { prisma } from '@/lib/prisma' import { prisma } from '@/lib/prisma'
import type { Player, InvitedPlayer } from '@/types/team' import type { Player, InvitedPlayer, TeamJoinPolicy } from '@/types/team'
export const dynamic = 'force-dynamic' export const dynamic = 'force-dynamic'
export const revalidate = 0 export const revalidate = 0
@ -94,6 +94,7 @@ export async function GET(
logo: team.logo, logo: team.logo,
leader, // ⬅ jetzt Player statt String leader, // ⬅ jetzt Player statt String
createdAt: team.createdAt, createdAt: team.createdAt,
joinPolicy: (team.joinPolicy ?? 'REQUEST') as TeamJoinPolicy,
activePlayers, activePlayers,
inactivePlayers, inactivePlayers,
invitedPlayers, invitedPlayers,

View File

@ -7,78 +7,100 @@ import { sendServerSSEMessage } from '@/lib/sse-server-client'
export async function POST(req: NextRequest) { export async function POST(req: NextRequest) {
try { try {
/* ───────────────── Session prüfen ────────────────────── */ // ── Session ──────────────────────────────────────────────
const session = await getServerSession(authOptions(req)) const session = await getServerSession(authOptions(req))
if (!session?.user?.steamId) { if (!session?.user?.steamId) {
return NextResponse.json({ message: 'Nicht eingeloggt' }, { status: 401 }) return NextResponse.json({ message: 'Nicht eingeloggt' }, { status: 401 })
} }
const requesterSteamId = session.user.steamId const requesterSteamId = session.user.steamId
/* ───────────────── Body validieren ────────────────────── */ // ── Body ────────────────────────────────────────────────
const { teamId } = await req.json() const { teamId } = await req.json()
if (!teamId) { if (!teamId) {
return NextResponse.json({ message: 'teamId fehlt' }, { status: 400 }) return NextResponse.json({ message: 'teamId fehlt' }, { status: 400 })
} }
/* ───────────────── Team holen ─────────────────────────── */ // ── Daten holen ─────────────────────────────────────────
const team = await prisma.team.findUnique({ where: { id: teamId } }) const [team, requester] = await Promise.all([
prisma.team.findUnique({
where: { id: teamId },
select: {
id: true,
name: true,
leaderId: true,
joinPolicy: true,
activePlayers: true,
inactivePlayers: true,
},
}),
prisma.user.findUnique({
where: { steamId: requesterSteamId },
select: { steamId: true, name: true, teamId: true },
}),
])
if (!team) { if (!team) {
return NextResponse.json({ message: 'Team nicht gefunden' }, { status: 404 }) return NextResponse.json({ message: 'Team nicht gefunden' }, { status: 404 })
} }
/* ───────────────── Bereits Mitglied? ──────────────────── */ // ── Bereits in irgendeinem Team? ─────────────────────────
if (requester?.teamId && requester.teamId !== team.id) {
return NextResponse.json({ message: 'Du bist bereits in einem anderen Team' }, { status: 400 })
}
// ── Schon (irgendwie) Mitglied dieses Teams? ────────────
if ( if (
requesterSteamId === team.leaderId || requesterSteamId === team.leaderId ||
team.activePlayers.includes(requesterSteamId) || team.activePlayers.includes(requesterSteamId) ||
team.inactivePlayers.includes(requesterSteamId) team.inactivePlayers.includes(requesterSteamId)
) { ) {
return NextResponse.json({ message: 'Du bist bereits Mitglied' }, { status: 400 }) return NextResponse.json({ message: 'Du bist bereits Mitglied' }, { status: 200 })
} }
/* ───────────────── Doppelte Anfrage vermeiden ─────────── */ // ── Policy Switch ───────────────────────────────────────
if (team.joinPolicy === 'INVITE_ONLY') {
return NextResponse.json(
{ message: 'Dieses Team akzeptiert nur Einladungen' },
{ status: 403 }
)
}
// ── Policy: REQUEST (default) → Anfrage anlegen
const existingInvite = await prisma.teamInvite.findFirst({ const existingInvite = await prisma.teamInvite.findFirst({
where: { where: { steamId: requesterSteamId, teamId, type: 'team-join-request' },
steamId: requesterSteamId, select: { id: true },
teamId,
type : 'team-join-request',
},
}) })
if (existingInvite) { if (existingInvite) {
return NextResponse.json({ message: 'Anfrage läuft bereits' }, { status: 200 }) return NextResponse.json({ message: 'Anfrage läuft bereits' }, { status: 200 })
} }
/* ───────────────── Invitation anlegen ─────────────────── */
const invitation = await prisma.teamInvite.create({ const invitation = await prisma.teamInvite.create({
data: { data: { steamId: requesterSteamId, teamId, type: 'team-join-request' },
steamId: requesterSteamId,
teamId ,
type : 'team-join-request',
},
}) })
/* ───────────────── Leader benachrichtigen ─────────────── */
const notification = await prisma.notification.create({ const notification = await prisma.notification.create({
data: { data: {
steamId : team.leaderId!, // garantiert vorhanden steamId: team.leaderId!,
title : 'Beitrittsanfrage', title: 'Beitrittsanfrage',
message : `${session.user.name ?? 'Ein Spieler'} möchte deinem Team beitreten.`, message: `${session.user.name ?? 'Ein Spieler'} möchte deinem Team beitreten.`,
actionType: 'team-join-request', actionType: 'team-join-request',
actionData: invitation.id, // ← WICHTIG: invitationId actionData: invitation.id,
}, },
}) })
/* ───────────────── SSE Event auslösen ─────────────────── */ // SSE an Leader
await sendServerSSEMessage({ await sendServerSSEMessage({
type : notification.actionType ?? 'notification', type: notification.actionType ?? 'notification',
targetUserIds: [team.leaderId], targetUserIds: [team.leaderId],
message : notification.message, message: notification.message,
id : notification.id, id: notification.id,
actionType : notification.actionType ?? undefined, actionType: notification.actionType ?? undefined,
actionData : notification.actionData ?? undefined, // invitation.id actionData: notification.actionData ?? undefined,
createdAt : notification.createdAt.toISOString(), createdAt: notification.createdAt.toISOString(),
payload: { teamId: team.id },
}) })
return NextResponse.json({ message: 'Anfrage gesendet' }, { status: 200 }) return NextResponse.json({ message: 'Anfrage gesendet' }, { status: 200 })
} catch (err) { } catch (err) {
console.error('POST /api/team/request-join', err) console.error('POST /api/team/request-join', err)
return NextResponse.json({ message: 'Interner Serverfehler' }, { status: 500 }) return NextResponse.json({ message: 'Interner Serverfehler' }, { status: 500 })

View File

@ -0,0 +1,91 @@
// /src/app/api/team/update-join-policy/route.ts
import { NextResponse, type NextRequest } from 'next/server'
import { prisma } from '@/lib/prisma'
import { getServerSession } from 'next-auth'
import { authOptions } from '@/lib/auth'
import { sendServerSSEMessage } from '@/lib/sse-server-client'
import type { TeamJoinPolicy } from '@/types/team'
export const runtime = 'nodejs' // ✅ Prisma-kompatibel
export const dynamic = 'force-dynamic' // (nur Vorsicht, POST ist eh dynamisch)
const ALLOWED = ['REQUEST', 'INVITE_ONLY'] as const
type AllowedPolicy = (typeof ALLOWED)[number]
export async function POST(req: NextRequest) {
try {
// ─ Session ─
const session = await getServerSession(authOptions(req))
const meId = session?.user?.steamId
if (!meId) {
return NextResponse.json({ message: 'Nicht eingeloggt' }, { status: 401 })
}
// ─ Input ─
const body = await req.json().catch(() => ({} as any))
const teamId: string | undefined = body?.teamId
const joinPolicy: TeamJoinPolicy | undefined = body?.joinPolicy
if (!teamId) {
return NextResponse.json({ message: 'teamId fehlt' }, { status: 400 })
}
if (!joinPolicy || !ALLOWED.includes(joinPolicy as AllowedPolicy)) {
return NextResponse.json({ message: 'Ungültige joinPolicy' }, { status: 400 })
}
// ─ Daten ─
const [team, me] = await Promise.all([
prisma.team.findUnique({
where: { id: teamId },
select: {
id: true,
leaderId: true,
joinPolicy: true,
},
}),
prisma.user.findUnique({
where: { steamId: meId },
select: { steamId: true, isAdmin: true },
}),
])
if (!team) {
return NextResponse.json({ message: 'Team nicht gefunden' }, { status: 404 })
}
const isLeader = meId === team.leaderId
const isAdmin = !!me?.isAdmin
if (!isLeader && !isAdmin) {
return NextResponse.json({ message: 'Keine Berechtigung' }, { status: 403 })
}
if (team.joinPolicy === joinPolicy) {
return NextResponse.json({ message: 'Unverändert', joinPolicy }, { status: 200 })
}
const updated = await prisma.team.update({
where: { id: teamId },
data: { joinPolicy },
select: { id: true, joinPolicy: true },
})
// ─ SSE (nicht blockierend!) ─
// Kein await → Request-Antwort wird NICHT aufgehalten
Promise.resolve().then(() =>
sendServerSSEMessage({
type: 'team-updated',
message: 'Beitrittsmodus wurde geändert.',
payload: { teamId: updated.id, joinPolicy: updated.joinPolicy },
}).catch(e => console.warn('SSE send failed (ignored):', e))
)
return NextResponse.json(
{ message: 'Beitrittsmodus aktualisiert', teamId: updated.id, joinPolicy: updated.joinPolicy },
{ status: 200 }
)
} catch (err) {
console.error('POST /api/team/update-join-policy', err)
return NextResponse.json({ message: 'Interner Serverfehler' }, { status: 500 })
}
}

View File

@ -7,7 +7,7 @@ export const dynamic = 'force-dynamic'
export async function GET() { export async function GET() {
try { try {
// 1) Teams laden (ohne leaderId im späteren Response) // 1) Teams laden
const teams = await prisma.team.findMany({ const teams = await prisma.team.findMany({
select: { select: {
id: true, id: true,
@ -16,7 +16,7 @@ export async function GET() {
createdAt: true, createdAt: true,
activePlayers: true, activePlayers: true,
inactivePlayers: true, inactivePlayers: true,
// Leader direkt als User-Objekt laden joinPolicy: true, // 👈 NEU
leader: { leader: {
select: { select: {
steamId: true, steamId: true,
@ -40,13 +40,15 @@ export async function GET() {
const teamIds = teams.map(t => t.id) const teamIds = teams.map(t => t.id)
// 2) Ausstehende Einladungen pro Team holen // 2) Ausstehende Einladungen pro Team holen
// (falls du "revoked/accepted" Flags hast, hier mitfiltern)
const invites = await prisma.teamInvite.findMany({ const invites = await prisma.teamInvite.findMany({
where: { teamId: { in: teamIds } }, where: {
teamId: { in: teamIds },
// OPTIONAL sauberer, falls du auch Join-Requests in dieser Tabelle hast:
// type: 'team-invite',
},
select: { id: true, teamId: true, steamId: true }, select: { id: true, teamId: true, steamId: true },
}) })
// Map: teamId -> [{steamId, invitationId}]
const invitedByTeam = new Map<string, { steamId: string; invitationId: string }[]>() const invitedByTeam = new Map<string, { steamId: string; invitationId: string }[]>()
for (const inv of invites) { for (const inv of invites) {
const arr = invitedByTeam.get(inv.teamId) ?? [] const arr = invitedByTeam.get(inv.teamId) ?? []
@ -54,7 +56,7 @@ export async function GET() {
invitedByTeam.set(inv.teamId, arr) invitedByTeam.set(inv.teamId, arr)
} }
// 3) Alle benötigten SteamIDs sammeln (aktive, inaktive, invited) // 3) Alle benötigten SteamIDs sammeln
const uniqueIds = new Set<string>() const uniqueIds = new Set<string>()
for (const t of teams) { for (const t of teams) {
t.activePlayers.forEach(id => uniqueIds.add(id)) t.activePlayers.forEach(id => uniqueIds.add(id))
@ -62,10 +64,8 @@ export async function GET() {
const invited = invitedByTeam.get(t.id) ?? [] const invited = invitedByTeam.get(t.id) ?? []
invited.forEach(i => uniqueIds.add(i.steamId)) invited.forEach(i => uniqueIds.add(i.steamId))
} }
// Leader müssen nicht in uniqueIds, da oben bereits als Objekt geladen.
// (könnten aber optional dazu; ist hier nicht nötig)
// 4) Nutzer-Daten für alle IDs holen // 4) Nutzer-Daten holen
const users = await prisma.user.findMany({ const users = await prisma.user.findMany({
where: { steamId: { in: [...uniqueIds] } }, where: { steamId: { in: [...uniqueIds] } },
select: { select: {
@ -77,7 +77,6 @@ export async function GET() {
}, },
}) })
// Lookup-Map
const byId: Record<string, Player | undefined> = {} const byId: Record<string, Player | undefined> = {}
const DEFAULT_AVATAR = '/assets/img/avatars/default.png' const DEFAULT_AVATAR = '/assets/img/avatars/default.png'
const UNKNOWN_NAME = 'Unbekannt' const UNKNOWN_NAME = 'Unbekannt'
@ -94,7 +93,6 @@ export async function GET() {
// 5) Ergebnis formen // 5) Ergebnis formen
const result = teams.map(t => { const result = teams.map(t => {
// Leader (bereits komplett geladen); mit Defaults absichern
const leader: Player | undefined = t.leader const leader: Player | undefined = t.leader
? { ? {
steamId: t.leader.steamId, steamId: t.leader.steamId,
@ -105,43 +103,35 @@ export async function GET() {
} }
: undefined : undefined
// Aktive & Inaktive Spieler aus Map befüllen const activePlayers: Player[] = t.activePlayers.map(id => byId[id]).filter(Boolean) as Player[]
const activePlayers: Player[] = t.activePlayers const inactivePlayers: Player[] = t.inactivePlayers.map(id => byId[id]).filter(Boolean) as Player[]
.map(id => byId[id])
.filter(Boolean) as Player[]
const inactivePlayers: Player[] = t.inactivePlayers
.map(id => byId[id])
.filter(Boolean) as Player[]
// Eingeladene Spieler inkl. invitationId
const invitedRaw = invitedByTeam.get(t.id) ?? [] const invitedRaw = invitedByTeam.get(t.id) ?? []
const invitedPlayers: (Player & { invitationId?: string })[] = invitedRaw const invitedPlayers: (Player & { invitationId?: string })[] = invitedRaw.map(({ steamId, invitationId }) => {
.map(({ steamId, invitationId }) => { const base = byId[steamId]
const base = byId[steamId] if (!base) {
// Falls User (noch) nicht existiert, mit Fallbacks liefern return {
if (!base) { steamId,
return { name: UNKNOWN_NAME,
steamId, avatar: DEFAULT_AVATAR,
name: UNKNOWN_NAME, location: '',
avatar: DEFAULT_AVATAR, premierRank: 0,
location: '', invitationId,
premierRank: 0,
invitationId,
}
} }
return { ...base, invitationId } }
}) return { ...base, invitationId }
})
return { return {
id: t.id, id: t.id,
name: t.name, name: t.name,
logo: t.logo, logo: t.logo,
createdAt: t.createdAt, createdAt: t.createdAt,
leader, // ✅ voll befüllt joinPolicy: t.joinPolicy, // 👈 NEU ins Response geben
activePlayers, // ✅ Player[] leader,
inactivePlayers, // ✅ Player[] activePlayers,
invitedPlayers, // ✅ Player[] mit invitationId inactivePlayers,
invitedPlayers,
} }
}) })

File diff suppressed because one or more lines are too long

View File

@ -176,7 +176,8 @@ exports.Prisma.TeamScalarFieldEnum = {
leaderId: 'leaderId', leaderId: 'leaderId',
createdAt: 'createdAt', createdAt: 'createdAt',
activePlayers: 'activePlayers', activePlayers: 'activePlayers',
inactivePlayers: 'inactivePlayers' inactivePlayers: 'inactivePlayers',
joinPolicy: 'joinPolicy'
}; };
exports.Prisma.TeamInviteScalarFieldEnum = { exports.Prisma.TeamInviteScalarFieldEnum = {
@ -397,6 +398,11 @@ exports.FaceitGameId = exports.$Enums.FaceitGameId = {
cs2: 'cs2' cs2: 'cs2'
}; };
exports.TeamJoinPolicy = exports.$Enums.TeamJoinPolicy = {
REQUEST: 'REQUEST',
INVITE_ONLY: 'INVITE_ONLY'
};
exports.ScheduleStatus = exports.$Enums.ScheduleStatus = { exports.ScheduleStatus = exports.$Enums.ScheduleStatus = {
PENDING: 'PENDING', PENDING: 'PENDING',
CONFIRMED: 'CONFIRMED', CONFIRMED: 'CONFIRMED',

View File

@ -115,6 +115,14 @@ export const FaceitGameId: {
export type FaceitGameId = (typeof FaceitGameId)[keyof typeof FaceitGameId] export type FaceitGameId = (typeof FaceitGameId)[keyof typeof FaceitGameId]
export const TeamJoinPolicy: {
REQUEST: 'REQUEST',
INVITE_ONLY: 'INVITE_ONLY'
};
export type TeamJoinPolicy = (typeof TeamJoinPolicy)[keyof typeof TeamJoinPolicy]
export const ScheduleStatus: { export const ScheduleStatus: {
PENDING: 'PENDING', PENDING: 'PENDING',
CONFIRMED: 'CONFIRMED', CONFIRMED: 'CONFIRMED',
@ -144,6 +152,10 @@ export type FaceitGameId = $Enums.FaceitGameId
export const FaceitGameId: typeof $Enums.FaceitGameId export const FaceitGameId: typeof $Enums.FaceitGameId
export type TeamJoinPolicy = $Enums.TeamJoinPolicy
export const TeamJoinPolicy: typeof $Enums.TeamJoinPolicy
export type ScheduleStatus = $Enums.ScheduleStatus export type ScheduleStatus = $Enums.ScheduleStatus
export const ScheduleStatus: typeof $Enums.ScheduleStatus export const ScheduleStatus: typeof $Enums.ScheduleStatus
@ -5654,6 +5666,7 @@ export namespace Prisma {
logoUpdatedAt: Date | null logoUpdatedAt: Date | null
leaderId: string | null leaderId: string | null
createdAt: Date | null createdAt: Date | null
joinPolicy: $Enums.TeamJoinPolicy | null
} }
export type TeamMaxAggregateOutputType = { export type TeamMaxAggregateOutputType = {
@ -5663,6 +5676,7 @@ export namespace Prisma {
logoUpdatedAt: Date | null logoUpdatedAt: Date | null
leaderId: string | null leaderId: string | null
createdAt: Date | null createdAt: Date | null
joinPolicy: $Enums.TeamJoinPolicy | null
} }
export type TeamCountAggregateOutputType = { export type TeamCountAggregateOutputType = {
@ -5674,6 +5688,7 @@ export namespace Prisma {
createdAt: number createdAt: number
activePlayers: number activePlayers: number
inactivePlayers: number inactivePlayers: number
joinPolicy: number
_all: number _all: number
} }
@ -5685,6 +5700,7 @@ export namespace Prisma {
logoUpdatedAt?: true logoUpdatedAt?: true
leaderId?: true leaderId?: true
createdAt?: true createdAt?: true
joinPolicy?: true
} }
export type TeamMaxAggregateInputType = { export type TeamMaxAggregateInputType = {
@ -5694,6 +5710,7 @@ export namespace Prisma {
logoUpdatedAt?: true logoUpdatedAt?: true
leaderId?: true leaderId?: true
createdAt?: true createdAt?: true
joinPolicy?: true
} }
export type TeamCountAggregateInputType = { export type TeamCountAggregateInputType = {
@ -5705,6 +5722,7 @@ export namespace Prisma {
createdAt?: true createdAt?: true
activePlayers?: true activePlayers?: true
inactivePlayers?: true inactivePlayers?: true
joinPolicy?: true
_all?: true _all?: true
} }
@ -5789,6 +5807,7 @@ export namespace Prisma {
createdAt: Date createdAt: Date
activePlayers: string[] activePlayers: string[]
inactivePlayers: string[] inactivePlayers: string[]
joinPolicy: $Enums.TeamJoinPolicy
_count: TeamCountAggregateOutputType | null _count: TeamCountAggregateOutputType | null
_min: TeamMinAggregateOutputType | null _min: TeamMinAggregateOutputType | null
_max: TeamMaxAggregateOutputType | null _max: TeamMaxAggregateOutputType | null
@ -5817,6 +5836,7 @@ export namespace Prisma {
createdAt?: boolean createdAt?: boolean
activePlayers?: boolean activePlayers?: boolean
inactivePlayers?: boolean inactivePlayers?: boolean
joinPolicy?: boolean
leader?: boolean | Team$leaderArgs<ExtArgs> leader?: boolean | Team$leaderArgs<ExtArgs>
members?: boolean | Team$membersArgs<ExtArgs> members?: boolean | Team$membersArgs<ExtArgs>
invites?: boolean | Team$invitesArgs<ExtArgs> invites?: boolean | Team$invitesArgs<ExtArgs>
@ -5838,6 +5858,7 @@ export namespace Prisma {
createdAt?: boolean createdAt?: boolean
activePlayers?: boolean activePlayers?: boolean
inactivePlayers?: boolean inactivePlayers?: boolean
joinPolicy?: boolean
leader?: boolean | Team$leaderArgs<ExtArgs> leader?: boolean | Team$leaderArgs<ExtArgs>
}, ExtArgs["result"]["team"]> }, ExtArgs["result"]["team"]>
@ -5850,6 +5871,7 @@ export namespace Prisma {
createdAt?: boolean createdAt?: boolean
activePlayers?: boolean activePlayers?: boolean
inactivePlayers?: boolean inactivePlayers?: boolean
joinPolicy?: boolean
leader?: boolean | Team$leaderArgs<ExtArgs> leader?: boolean | Team$leaderArgs<ExtArgs>
}, ExtArgs["result"]["team"]> }, ExtArgs["result"]["team"]>
@ -5862,9 +5884,10 @@ export namespace Prisma {
createdAt?: boolean createdAt?: boolean
activePlayers?: boolean activePlayers?: boolean
inactivePlayers?: boolean inactivePlayers?: boolean
joinPolicy?: boolean
} }
export type TeamOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "logo" | "logoUpdatedAt" | "leaderId" | "createdAt" | "activePlayers" | "inactivePlayers", ExtArgs["result"]["team"]> export type TeamOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "logo" | "logoUpdatedAt" | "leaderId" | "createdAt" | "activePlayers" | "inactivePlayers" | "joinPolicy", ExtArgs["result"]["team"]>
export type TeamInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = { export type TeamInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
leader?: boolean | Team$leaderArgs<ExtArgs> leader?: boolean | Team$leaderArgs<ExtArgs>
members?: boolean | Team$membersArgs<ExtArgs> members?: boolean | Team$membersArgs<ExtArgs>
@ -5906,6 +5929,7 @@ export namespace Prisma {
createdAt: Date createdAt: Date
activePlayers: string[] activePlayers: string[]
inactivePlayers: string[] inactivePlayers: string[]
joinPolicy: $Enums.TeamJoinPolicy
}, ExtArgs["result"]["team"]> }, ExtArgs["result"]["team"]>
composites: {} composites: {}
} }
@ -6346,6 +6370,7 @@ export namespace Prisma {
readonly createdAt: FieldRef<"Team", 'DateTime'> readonly createdAt: FieldRef<"Team", 'DateTime'>
readonly activePlayers: FieldRef<"Team", 'String[]'> readonly activePlayers: FieldRef<"Team", 'String[]'>
readonly inactivePlayers: FieldRef<"Team", 'String[]'> readonly inactivePlayers: FieldRef<"Team", 'String[]'>
readonly joinPolicy: FieldRef<"Team", 'TeamJoinPolicy'>
} }
@ -22642,7 +22667,8 @@ export namespace Prisma {
leaderId: 'leaderId', leaderId: 'leaderId',
createdAt: 'createdAt', createdAt: 'createdAt',
activePlayers: 'activePlayers', activePlayers: 'activePlayers',
inactivePlayers: 'inactivePlayers' inactivePlayers: 'inactivePlayers',
joinPolicy: 'joinPolicy'
}; };
export type TeamScalarFieldEnum = (typeof TeamScalarFieldEnum)[keyof typeof TeamScalarFieldEnum] export type TeamScalarFieldEnum = (typeof TeamScalarFieldEnum)[keyof typeof TeamScalarFieldEnum]
@ -22992,6 +23018,20 @@ export namespace Prisma {
/**
* Reference to a field of type 'TeamJoinPolicy'
*/
export type EnumTeamJoinPolicyFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'TeamJoinPolicy'>
/**
* Reference to a field of type 'TeamJoinPolicy[]'
*/
export type ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'TeamJoinPolicy[]'>
/** /**
* Reference to a field of type 'Json' * Reference to a field of type 'Json'
*/ */
@ -23394,6 +23434,7 @@ export namespace Prisma {
createdAt?: DateTimeFilter<"Team"> | Date | string createdAt?: DateTimeFilter<"Team"> | Date | string
activePlayers?: StringNullableListFilter<"Team"> activePlayers?: StringNullableListFilter<"Team">
inactivePlayers?: StringNullableListFilter<"Team"> inactivePlayers?: StringNullableListFilter<"Team">
joinPolicy?: EnumTeamJoinPolicyFilter<"Team"> | $Enums.TeamJoinPolicy
leader?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null leader?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
members?: UserListRelationFilter members?: UserListRelationFilter
invites?: TeamInviteListRelationFilter invites?: TeamInviteListRelationFilter
@ -23414,6 +23455,7 @@ export namespace Prisma {
createdAt?: SortOrder createdAt?: SortOrder
activePlayers?: SortOrder activePlayers?: SortOrder
inactivePlayers?: SortOrder inactivePlayers?: SortOrder
joinPolicy?: SortOrder
leader?: UserOrderByWithRelationInput leader?: UserOrderByWithRelationInput
members?: UserOrderByRelationAggregateInput members?: UserOrderByRelationAggregateInput
invites?: TeamInviteOrderByRelationAggregateInput invites?: TeamInviteOrderByRelationAggregateInput
@ -23437,6 +23479,7 @@ export namespace Prisma {
createdAt?: DateTimeFilter<"Team"> | Date | string createdAt?: DateTimeFilter<"Team"> | Date | string
activePlayers?: StringNullableListFilter<"Team"> activePlayers?: StringNullableListFilter<"Team">
inactivePlayers?: StringNullableListFilter<"Team"> inactivePlayers?: StringNullableListFilter<"Team">
joinPolicy?: EnumTeamJoinPolicyFilter<"Team"> | $Enums.TeamJoinPolicy
leader?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null leader?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
members?: UserListRelationFilter members?: UserListRelationFilter
invites?: TeamInviteListRelationFilter invites?: TeamInviteListRelationFilter
@ -23457,6 +23500,7 @@ export namespace Prisma {
createdAt?: SortOrder createdAt?: SortOrder
activePlayers?: SortOrder activePlayers?: SortOrder
inactivePlayers?: SortOrder inactivePlayers?: SortOrder
joinPolicy?: SortOrder
_count?: TeamCountOrderByAggregateInput _count?: TeamCountOrderByAggregateInput
_max?: TeamMaxOrderByAggregateInput _max?: TeamMaxOrderByAggregateInput
_min?: TeamMinOrderByAggregateInput _min?: TeamMinOrderByAggregateInput
@ -23474,6 +23518,7 @@ export namespace Prisma {
createdAt?: DateTimeWithAggregatesFilter<"Team"> | Date | string createdAt?: DateTimeWithAggregatesFilter<"Team"> | Date | string
activePlayers?: StringNullableListFilter<"Team"> activePlayers?: StringNullableListFilter<"Team">
inactivePlayers?: StringNullableListFilter<"Team"> inactivePlayers?: StringNullableListFilter<"Team">
joinPolicy?: EnumTeamJoinPolicyWithAggregatesFilter<"Team"> | $Enums.TeamJoinPolicy
} }
export type TeamInviteWhereInput = { export type TeamInviteWhereInput = {
@ -25062,6 +25107,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -25082,6 +25128,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -25100,6 +25147,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -25120,6 +25168,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -25139,6 +25188,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
} }
export type TeamUpdateManyMutationInput = { export type TeamUpdateManyMutationInput = {
@ -25149,6 +25199,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
} }
export type TeamUncheckedUpdateManyInput = { export type TeamUncheckedUpdateManyInput = {
@ -25160,6 +25211,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
} }
export type TeamInviteCreateInput = { export type TeamInviteCreateInput = {
@ -26957,6 +27009,13 @@ export namespace Prisma {
isEmpty?: boolean isEmpty?: boolean
} }
export type EnumTeamJoinPolicyFilter<$PrismaModel = never> = {
equals?: $Enums.TeamJoinPolicy | EnumTeamJoinPolicyFieldRefInput<$PrismaModel>
in?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
notIn?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
not?: NestedEnumTeamJoinPolicyFilter<$PrismaModel> | $Enums.TeamJoinPolicy
}
export type UserNullableScalarRelationFilter = { export type UserNullableScalarRelationFilter = {
is?: UserWhereInput | null is?: UserWhereInput | null
isNot?: UserWhereInput | null isNot?: UserWhereInput | null
@ -26981,6 +27040,7 @@ export namespace Prisma {
createdAt?: SortOrder createdAt?: SortOrder
activePlayers?: SortOrder activePlayers?: SortOrder
inactivePlayers?: SortOrder inactivePlayers?: SortOrder
joinPolicy?: SortOrder
} }
export type TeamMaxOrderByAggregateInput = { export type TeamMaxOrderByAggregateInput = {
@ -26990,6 +27050,7 @@ export namespace Prisma {
logoUpdatedAt?: SortOrder logoUpdatedAt?: SortOrder
leaderId?: SortOrder leaderId?: SortOrder
createdAt?: SortOrder createdAt?: SortOrder
joinPolicy?: SortOrder
} }
export type TeamMinOrderByAggregateInput = { export type TeamMinOrderByAggregateInput = {
@ -26999,6 +27060,17 @@ export namespace Prisma {
logoUpdatedAt?: SortOrder logoUpdatedAt?: SortOrder
leaderId?: SortOrder leaderId?: SortOrder
createdAt?: SortOrder createdAt?: SortOrder
joinPolicy?: SortOrder
}
export type EnumTeamJoinPolicyWithAggregatesFilter<$PrismaModel = never> = {
equals?: $Enums.TeamJoinPolicy | EnumTeamJoinPolicyFieldRefInput<$PrismaModel>
in?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
notIn?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
not?: NestedEnumTeamJoinPolicyWithAggregatesFilter<$PrismaModel> | $Enums.TeamJoinPolicy
_count?: NestedIntFilter<$PrismaModel>
_min?: NestedEnumTeamJoinPolicyFilter<$PrismaModel>
_max?: NestedEnumTeamJoinPolicyFilter<$PrismaModel>
} }
export type TeamScalarRelationFilter = { export type TeamScalarRelationFilter = {
@ -28696,6 +28768,10 @@ export namespace Prisma {
push?: string | string[] push?: string | string[]
} }
export type EnumTeamJoinPolicyFieldUpdateOperationsInput = {
set?: $Enums.TeamJoinPolicy
}
export type UserUpdateOneWithoutLedTeamNestedInput = { export type UserUpdateOneWithoutLedTeamNestedInput = {
create?: XOR<UserCreateWithoutLedTeamInput, UserUncheckedCreateWithoutLedTeamInput> create?: XOR<UserCreateWithoutLedTeamInput, UserUncheckedCreateWithoutLedTeamInput>
connectOrCreate?: UserCreateOrConnectWithoutLedTeamInput connectOrCreate?: UserCreateOrConnectWithoutLedTeamInput
@ -29951,6 +30027,23 @@ export namespace Prisma {
_max?: NestedEnumFaceitGameIdFilter<$PrismaModel> _max?: NestedEnumFaceitGameIdFilter<$PrismaModel>
} }
export type NestedEnumTeamJoinPolicyFilter<$PrismaModel = never> = {
equals?: $Enums.TeamJoinPolicy | EnumTeamJoinPolicyFieldRefInput<$PrismaModel>
in?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
notIn?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
not?: NestedEnumTeamJoinPolicyFilter<$PrismaModel> | $Enums.TeamJoinPolicy
}
export type NestedEnumTeamJoinPolicyWithAggregatesFilter<$PrismaModel = never> = {
equals?: $Enums.TeamJoinPolicy | EnumTeamJoinPolicyFieldRefInput<$PrismaModel>
in?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
notIn?: $Enums.TeamJoinPolicy[] | ListEnumTeamJoinPolicyFieldRefInput<$PrismaModel>
not?: NestedEnumTeamJoinPolicyWithAggregatesFilter<$PrismaModel> | $Enums.TeamJoinPolicy
_count?: NestedIntFilter<$PrismaModel>
_min?: NestedEnumTeamJoinPolicyFilter<$PrismaModel>
_max?: NestedEnumTeamJoinPolicyFilter<$PrismaModel>
}
export type NestedBigIntNullableFilter<$PrismaModel = never> = { export type NestedBigIntNullableFilter<$PrismaModel = never> = {
equals?: bigint | number | BigIntFieldRefInput<$PrismaModel> | null equals?: bigint | number | BigIntFieldRefInput<$PrismaModel> | null
in?: bigint[] | number[] | ListBigIntFieldRefInput<$PrismaModel> | null in?: bigint[] | number[] | ListBigIntFieldRefInput<$PrismaModel> | null
@ -30113,6 +30206,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput
@ -30132,6 +30226,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput
@ -30154,6 +30249,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput
@ -30172,6 +30268,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -30672,6 +30769,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput
@ -30691,6 +30789,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput
@ -30719,6 +30818,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput
@ -30737,6 +30837,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -32202,6 +32303,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerCreateNestedManyWithoutTeamInput
@ -32221,6 +32323,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput
@ -32359,6 +32462,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUpdateManyWithoutTeamNestedInput
@ -32378,6 +32482,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput
@ -32599,6 +32704,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -32618,6 +32724,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -32640,6 +32747,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -32659,6 +32767,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -33059,6 +33168,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -33078,6 +33188,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -33106,6 +33217,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -33125,6 +33237,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -33333,6 +33446,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -33352,6 +33466,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput matchesAsTeamA?: MatchUncheckedCreateNestedManyWithoutTeamAInput
@ -33618,6 +33733,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -33637,6 +33753,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput matchesAsTeamA?: MatchUncheckedUpdateManyWithoutTeamANestedInput
@ -34293,6 +34410,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -34312,6 +34430,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -34334,6 +34453,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -34353,6 +34473,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -34649,6 +34770,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -34668,6 +34790,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -34696,6 +34819,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -34715,6 +34839,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput
@ -35739,6 +35864,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
leader?: UserCreateNestedOneWithoutLedTeamInput leader?: UserCreateNestedOneWithoutLedTeamInput
members?: UserCreateNestedManyWithoutTeamInput members?: UserCreateNestedManyWithoutTeamInput
invites?: TeamInviteCreateNestedManyWithoutTeamInput invites?: TeamInviteCreateNestedManyWithoutTeamInput
@ -35758,6 +35884,7 @@ export namespace Prisma {
createdAt?: Date | string createdAt?: Date | string
activePlayers?: TeamCreateactivePlayersInput | string[] activePlayers?: TeamCreateactivePlayersInput | string[]
inactivePlayers?: TeamCreateinactivePlayersInput | string[] inactivePlayers?: TeamCreateinactivePlayersInput | string[]
joinPolicy?: $Enums.TeamJoinPolicy
members?: UserUncheckedCreateNestedManyWithoutTeamInput members?: UserUncheckedCreateNestedManyWithoutTeamInput
invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput invites?: TeamInviteUncheckedCreateNestedManyWithoutTeamInput
matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput matchPlayers?: MatchPlayerUncheckedCreateNestedManyWithoutTeamInput
@ -35925,6 +36052,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
leader?: UserUpdateOneWithoutLedTeamNestedInput leader?: UserUpdateOneWithoutLedTeamNestedInput
members?: UserUpdateManyWithoutTeamNestedInput members?: UserUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUpdateManyWithoutTeamNestedInput invites?: TeamInviteUpdateManyWithoutTeamNestedInput
@ -35944,6 +36072,7 @@ export namespace Prisma {
createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
activePlayers?: TeamUpdateactivePlayersInput | string[] activePlayers?: TeamUpdateactivePlayersInput | string[]
inactivePlayers?: TeamUpdateinactivePlayersInput | string[] inactivePlayers?: TeamUpdateinactivePlayersInput | string[]
joinPolicy?: EnumTeamJoinPolicyFieldUpdateOperationsInput | $Enums.TeamJoinPolicy
members?: UserUncheckedUpdateManyWithoutTeamNestedInput members?: UserUncheckedUpdateManyWithoutTeamNestedInput
invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput invites?: TeamInviteUncheckedUpdateManyWithoutTeamNestedInput
matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput matchPlayers?: MatchPlayerUncheckedUpdateManyWithoutTeamNestedInput

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{ {
"name": "prisma-client-593c7e86a193b89a0b02a9e811c3a30c125592905a16d5c01f1f9522bc8c8086", "name": "prisma-client-e9f85ef18a659dea3be523c367453b73bb1f9ec232929885020f472f49703f84",
"main": "index.js", "main": "index.js",
"types": "index.d.ts", "types": "index.d.ts",
"browser": "default.js", "browser": "default.js",

View File

@ -113,6 +113,11 @@ model FaceitGameStat {
@@index([game, elo]) @@index([game, elo])
} }
enum TeamJoinPolicy {
REQUEST
INVITE_ONLY
}
model Team { model Team {
id String @id @default(uuid()) id String @id @default(uuid())
name String @unique name String @unique
@ -137,6 +142,9 @@ model Team {
schedulesAsTeamB Schedule[] @relation("ScheduleTeamB") schedulesAsTeamB Schedule[] @relation("ScheduleTeamB")
mapVoteSteps MapVoteStep[] @relation("VoteStepTeam") mapVoteSteps MapVoteStep[] @relation("VoteStepTeam")
// Default bleibt REQUEST
joinPolicy TeamJoinPolicy @default(REQUEST)
} }
model TeamInvite { model TeamInvite {

File diff suppressed because one or more lines are too long

View File

@ -26,11 +26,14 @@ export type InvitedPlayer = Player & {
invitationId: string invitationId: string
} }
export type TeamJoinPolicy = 'REQUEST' | 'INVITE_ONLY'
export type Team = { export type Team = {
id: string id: string
name?: string | null name?: string | null
logo?: string | null logo?: string | null
leader?: Player leader?: Player
joinPolicy: TeamJoinPolicy
activePlayers: Player[] activePlayers: Player[]
inactivePlayers: Player[] inactivePlayers: Player[]
invitedPlayers: InvitedPlayer[] invitedPlayers: InvitedPlayer[]