Dateien nach "/" hochladen

This commit is contained in:
2026-04-21 14:17:24 +02:00
parent b6adf326df
commit 11062d7351
+270
View File
@@ -0,0 +1,270 @@
# SQL Server Tabellen fuer die Poker-Plattform
## Uebersicht
Das folgende Diagramm zeigt die wichtigsten Tabellen fuer:
- Benutzer
- Sessions
- Freundschaften
- private Lobbys
- Pokerhaende
- Notifications
- Wallet
- Logging
## ER-Diagramm
```mermaid
erDiagram
USERS ||--o{ USER_SESSIONS : "hat"
USERS ||--o{ FRIEND_REQUESTS : "sendet"
USERS ||--o{ FRIEND_REQUESTS : "empfaengt"
USERS ||--o{ FRIENDSHIPS : "ist beteiligt"
USERS ||--o{ LOBBIES : "hostet"
USERS ||--o{ LOBBY_MEMBERS : "tritt bei"
USERS ||--o{ LOBBY_INVITES : "sendet"
USERS ||--o{ LOBBY_INVITES : "empfaengt"
USERS ||--o{ HAND_PLAYERS : "spielt"
USERS ||--o{ HAND_ACTIONS : "fuehrt aus"
USERS ||--|| WALLETS : "hat"
USERS ||--o{ NOTIFICATIONS : "erhaelt"
USERS ||--o{ APP_LOGS : "verursacht"
LOBBIES ||--o{ LOBBY_MEMBERS : "enthaelt"
LOBBIES ||--o{ LOBBY_INVITES : "hat"
LOBBIES ||--o| TABLES : "startet Tisch"
TABLES ||--o{ HANDS : "enthaelt"
HANDS ||--o{ HAND_PLAYERS : "enthaelt"
HANDS ||--o{ HAND_ACTIONS : "enthaelt"
USERS {
bigint Id PK
nvarchar Username
nvarchar Email
nvarchar PasswordHash
datetime2 CreatedAt
nvarchar Status
}
USER_SESSIONS {
bigint Id PK
bigint UserId FK
nvarchar SessionToken
datetime2 CreatedAt
datetime2 ExpiresAt
datetime2 LastSeenAt
bit IsRevoked
}
FRIEND_REQUESTS {
bigint Id PK
bigint FromUserId FK
bigint ToUserId FK
nvarchar Status
datetime2 CreatedAt
datetime2 RespondedAt
}
FRIENDSHIPS {
bigint Id PK
bigint UserAId FK
bigint UserBId FK
datetime2 CreatedAt
nvarchar Status
}
LOBBIES {
bigint Id PK
bigint HostUserId FK
nvarchar LobbyCode
nvarchar Name
nvarchar Status
datetime2 CreatedAt
datetime2 StartedAt
}
LOBBY_MEMBERS {
bigint Id PK
bigint LobbyId FK
bigint UserId FK
nvarchar Role
nvarchar Status
datetime2 JoinedAt
}
LOBBY_INVITES {
bigint Id PK
bigint LobbyId FK
bigint FromUserId FK
bigint ToUserId FK
nvarchar Status
datetime2 CreatedAt
datetime2 RespondedAt
}
TABLES {
bigint Id PK
bigint LobbyId FK
nvarchar Name
int SmallBlind
int BigBlind
int MaxSeats
nvarchar Status
}
HANDS {
bigint Id PK
bigint TableId FK
int DealerSeat
int ActiveSeat
nvarchar CurrentRound
int PotAmount
int CurrentBetToCall
nvarchar Status
datetime2 StartedAt
datetime2 CompletedAt
}
HAND_PLAYERS {
bigint Id PK
bigint HandId FK
bigint UserId FK
int SeatIndex
int Stack
int CurrentBet
bit Folded
bit AllIn
bit HasActed
}
HAND_ACTIONS {
bigint Id PK
bigint HandId FK
bigint UserId FK
int SequenceNumber
nvarchar Round
nvarchar ActionType
int Amount
datetime2 CreatedAt
}
WALLETS {
bigint UserId PK
int SoftCurrencyBalance
datetime2 UpdatedAt
}
NOTIFICATIONS {
bigint Id PK
bigint UserId FK
nvarchar Type
nvarchar PayloadJson
bit IsRead
datetime2 CreatedAt
}
APP_LOGS {
bigint Id PK
bigint UserId FK
nvarchar EventType
nvarchar ReferenceType
bigint ReferenceId
nvarchar PayloadJson
datetime2 CreatedAt
}
```
## Tabellen kurz erklaert
### `Users`
Speichert Benutzerkonto, Login-Informationen und Basisstatus.
### `UserSessions`
Speichert aktive oder historische Sessions nach Login.
### `FriendRequests`
Speichert offene, angenommene oder abgelehnte Freundschaftsanfragen.
### `Friendships`
Speichert bestaetigte Freundschaften zwischen zwei Benutzern.
### `Lobbies`
Private Lobby, die von einem Host erstellt wird.
### `LobbyMembers`
Liste aller Benutzer, die aktuell oder historisch Teil einer Lobby sind.
### `LobbyInvites`
Einladungen zu privaten Lobbys.
### `Tables`
Definition des eigentlichen Pokertisches, der aus einer Lobby hervorgehen kann.
### `Hands`
Globaler Zustand einer einzelnen Pokerhand.
### `HandPlayers`
Status eines Spielers innerhalb einer Hand.
### `HandActions`
Historie aller Aktionen innerhalb einer Hand.
### `Wallets`
Soft-Currency oder Chips pro Benutzer.
### `Notifications`
Persistente Benutzerbenachrichtigungen.
### `AppLogs`
Technische und fachliche Logs zur Nachvollziehbarkeit.
## Wichtige Beziehungen
- Ein Benutzer kann viele Sessions haben.
- Ein Benutzer kann viele Freundschaftsanfragen senden und empfangen.
- Eine Lobby hat genau einen Host, aber viele Mitglieder.
- Eine Lobby kann viele Einladungen haben.
- Eine Lobby kann genau einen aktiven Pokertisch erzeugen.
- Ein Tisch hat viele Haende.
- Eine Hand hat viele Spieler und viele Aktionen.
- Ein Benutzer hat genau ein Wallet.
- Ein Benutzer kann viele Notifications und Logs haben.
## Empfohlene Indizes
- `Users(Username)` eindeutig
- `Users(Email)` eindeutig
- `UserSessions(SessionToken)` eindeutig
- `FriendRequests(ToUserId, Status)`
- `Friendships(UserAId, UserBId)`
- `Lobbies(LobbyCode)` eindeutig
- `LobbyMembers(LobbyId, UserId)`
- `Hands(TableId, Status)`
- `HandPlayers(HandId, UserId)`
- `HandActions(HandId, SequenceNumber)`
- `Notifications(UserId, IsRead, CreatedAt)`
## Hinweis zur Umsetzung
Fuer dein Projekt ist dieses Modell die fachliche Grundlage.
Als naechster Schritt kann ich dir daraus direkt eines von drei Dingen bauen:
1. das echte `CREATE TABLE` SQL-Skript fuer SQL Server
2. die passenden C# Model-Klassen
3. die ADO.NET Repository-Klassen