diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index 486acf4..2a5c6b4 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -53,6 +53,9 @@ func main() { api.GET("/players", func(c *gin.Context) { player.GetPlayers(c, db.GetDB()) }) + api.GET("/players/:id", func(c *gin.Context) { + player.GetPlayer(c, db.GetDB(), c.Param("id")) + }) api.POST("/players", func(c *gin.Context) { player.CreatePlayer(c, db.GetDB()) }) diff --git a/backend/internal/player/handler.go b/backend/internal/player/handler.go index 5364b71..5ac189f 100644 --- a/backend/internal/player/handler.go +++ b/backend/internal/player/handler.go @@ -53,7 +53,7 @@ func CreatePlayer(c *gin.Context, db *sql.DB) { common.RespondError(c, http.StatusInternalServerError, "Failed to create player") return } - AddRoleToPlayer(db, newPlayer.ID, "player") + err = AddRoleToPlayer(db, newPlayer.ID, "player") if err != nil { log.Printf("Error adding role to player: %v", err) common.RespondError(c, http.StatusInternalServerError, "Failed to assign role to player") @@ -65,7 +65,8 @@ func CreatePlayer(c *gin.Context, db *sql.DB) { common.RespondCreated(c, newPlayer) } -func GetPlayer(c *gin.Context, db *sql.DB) { +func GetPlayer(c *gin.Context, db *sql.DB, id string) { + log.Println("GetPlayer called with ID:", id) playerID := c.Param("id") if playerID == "" { common.RespondError(c, http.StatusBadRequest, "Player ID is required") @@ -84,10 +85,16 @@ func GetPlayer(c *gin.Context, db *sql.DB) { common.RespondError(c, http.StatusNotFound, "Player not found") return } - - log.Printf("User %s (%s) requested player: %s", c.GetString("userId"), c.GetString("email"), player.Name) - + role, err := GetPlayerRole(db, player.ID) + if err != nil { + log.Printf("Error retrieving role for player ID %s: %v", player.ID, err) + common.RespondError(c, http.StatusInternalServerError, "Failed to retrieve player role") + return + } + player.Role = role + log.Printf(player.ID, player.Name, player.Email, player.Role) c.JSON(http.StatusOK, player) + } func UpdatePlayer(c *gin.Context, db *sql.DB) { diff --git a/backend/internal/player/model.go b/backend/internal/player/model.go index 2f04d05..661aaa2 100644 --- a/backend/internal/player/model.go +++ b/backend/internal/player/model.go @@ -134,9 +134,9 @@ func savePlayer(db *sql.DB, player Player) error { log.Printf("Saving player: ID=%v, Name=%v, Email=%v", player.ID, player.Name, player.Email) - stmt := "INSERT INTO public.players (id, name, email) VALUES ($1, $2, $3)" + stmt := "INSERT INTO public.players (id, name, email,password_hash) VALUES ($1, $2, $3,$4)" log.Printf("Generated SQL statement: %s", stmt) - _, err := db.Exec(stmt, player.ID, player.Name, player.Email) + _, err := db.Exec(stmt, player.ID, player.Name, player.Email, player.Password) if err != nil { log.Printf("Error saving player to database: %v", err) @@ -202,7 +202,7 @@ func GetAllPlayers(db *sql.DB) ([]Player, error) { func GetPlayerByID(db *sql.DB, id string) (Player, error) { var player Player - err := db.QueryRow("SELECT id, name, email FROM players WHERE id = $1", id).Scan(&player.ID, &player.Name, &player.Email, &player.Role) + err := db.QueryRow("SELECT id, name, email FROM players WHERE id = $1", id).Scan(&player.ID, &player.Name, &player.Email) if err != nil { log.Printf("Error retrieving player by ID %s: %v", id, err) return Player{}, err diff --git a/backend/main b/backend/main new file mode 100755 index 0000000..3c5bcc5 Binary files /dev/null and b/backend/main differ diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 9d37ea9..46fbafe 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -7,6 +7,9 @@ import TournamentDetails from './pages/TournamentDetails'; import Players from './pages/Players'; import Navigation from './pages/Navigation'; import TeamManagement from './pages/Teams'; +import ViewEditPlayer from './pages/ViewEditPlayer'; +import Tournaments from './pages/Tournaments'; +import NewTournament from './pages/NewTournament'; function App() { @@ -17,12 +20,16 @@ function App() { } /> {/* Öffentlich */} } /> - + } /> {/* Geschützte Routen */} } /> + } /> + } /> - } /> + } /> + } /> + diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 11558ca..572fbac 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -22,12 +22,13 @@ export default function Dashboard() { return (
+

Turniere

{error &&

{error}

}
{tournaments.map(t => (
- +

{t.name}

{t.teams.length} / {t.maxParticipants} Teilnehmer

Ort: {t.location}

diff --git a/frontend/src/pages/Navigation.tsx b/frontend/src/pages/Navigation.tsx index 0a4fa74..0126bdb 100644 --- a/frontend/src/pages/Navigation.tsx +++ b/frontend/src/pages/Navigation.tsx @@ -8,6 +8,8 @@ export default function Navigation() {
+
+ ); +}; + +export default ViewEditPlayer; diff --git a/frontend/src/pages/api.tsx b/frontend/src/pages/api.tsx index 8cfa839..994a537 100644 --- a/frontend/src/pages/api.tsx +++ b/frontend/src/pages/api.tsx @@ -53,6 +53,15 @@ export async function deleteTournament(id: string, token: string) { return res.json(); } +export async function fetchPlayer(token: string, id: string) { + const res = await fetch(`${API_URL}/players/${id}`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error('Fehler beim Laden des Spielers'); + return res.json(); + +} + export async function fetchPlayers(token: string) { const res = await fetch(`${API_URL}/players`, { headers: { Authorization: `Bearer ${token}` }, diff --git a/frontend/src/pages/types.tsx b/frontend/src/pages/types.tsx new file mode 100644 index 0000000..80c675a --- /dev/null +++ b/frontend/src/pages/types.tsx @@ -0,0 +1,14 @@ +export interface Team { + id: string; + name: string; +} + +export interface Tournament { + id: string; + name: string; + location: string; + maxParticipants: number; + organizerId: string; + date: Date; + teams: Team[]; +} \ No newline at end of file