146 lines
4.3 KiB
Go
146 lines
4.3 KiB
Go
package player
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
"net/http"
|
|
"volleyball/internal/common"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func GetPlayers(c *gin.Context, db *sql.DB) {
|
|
log.Println(c.GetString("userId"), c.GetString("email"), c.GetString("role"))
|
|
// Simulate fetching players from a database
|
|
|
|
players, err := GetAllPlayers(db)
|
|
if err != nil {
|
|
log.Printf("Error retrieving players: %v", err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to retrieve players")
|
|
return
|
|
}
|
|
|
|
if len(players) > 0 {
|
|
log.Printf("User %s (%s) requested players", c.GetString("userId"), c.GetString("email"))
|
|
c.JSON(http.StatusOK, players)
|
|
return
|
|
}
|
|
log.Printf("User %s (%s) requested players, but none found", c.GetString("userId"), c.GetString("email"))
|
|
|
|
common.RespondError(c, http.StatusNotFound, "No Players found")
|
|
}
|
|
|
|
func CreatePlayer(c *gin.Context, db *sql.DB) {
|
|
var newPlayer Player
|
|
var err error
|
|
if err := c.ShouldBindJSON(&newPlayer); err != nil {
|
|
log.Printf("Error binding player data: %v", err)
|
|
common.RespondError(c, http.StatusBadRequest, "Invalid player data")
|
|
return
|
|
}
|
|
newPlayer.Password, err = common.HashPassword(newPlayer.Password)
|
|
if err != nil {
|
|
log.Printf("Error hashing password: %v", err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to hash password")
|
|
return
|
|
}
|
|
|
|
newPlayer.ID = uuid.New().String()
|
|
err = savePlayer(db, newPlayer)
|
|
if err != nil {
|
|
log.Printf("Error saving player: %v", err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to create player")
|
|
return
|
|
}
|
|
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")
|
|
return
|
|
}
|
|
|
|
log.Printf("User %s (%s) created player: %s", c.GetString("userId"), c.GetString("email"), newPlayer.Name)
|
|
|
|
common.RespondCreated(c, newPlayer)
|
|
}
|
|
|
|
func GetPlayer(c *gin.Context, db *sql.DB) {
|
|
playerID := c.Param("id")
|
|
if playerID == "" {
|
|
common.RespondError(c, http.StatusBadRequest, "Player ID is required")
|
|
return
|
|
}
|
|
|
|
player, err := GetPlayerByID(db, playerID)
|
|
if err != nil {
|
|
log.Printf("Error retrieving player with ID %s: %v", playerID, err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to retrieve player")
|
|
return
|
|
}
|
|
|
|
if player.ID == "" {
|
|
log.Printf("Player with ID %s not found", playerID)
|
|
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)
|
|
|
|
c.JSON(http.StatusOK, player)
|
|
}
|
|
|
|
func UpdatePlayer(c *gin.Context, db *sql.DB) {
|
|
playerID := c.Param("id")
|
|
if playerID == "" {
|
|
common.RespondError(c, http.StatusBadRequest, "Player ID is required")
|
|
return
|
|
}
|
|
|
|
if playerID != c.GetString("userId") || c.GetString("role") != "admin" {
|
|
common.RespondError(c, http.StatusForbidden, "You do not have permission to update this player")
|
|
return
|
|
}
|
|
|
|
var updatedPlayer Player
|
|
if err := c.ShouldBindJSON(&updatedPlayer); err != nil {
|
|
log.Printf("Error binding player data: %v", err)
|
|
common.RespondError(c, http.StatusBadRequest, "Invalid player data")
|
|
return
|
|
}
|
|
|
|
updatedPlayer.ID = playerID
|
|
err := updatePlayer(db, updatedPlayer)
|
|
if err != nil {
|
|
log.Printf("Error updating player with ID %s: %v", playerID, err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to update player")
|
|
return
|
|
}
|
|
|
|
log.Printf("User %s (%s) updated player: %s", c.GetString("userId"), c.GetString("email"), updatedPlayer.Name)
|
|
|
|
c.JSON(http.StatusOK, updatedPlayer)
|
|
}
|
|
func DeletePlayer(c *gin.Context, db *sql.DB) {
|
|
playerID := c.Param("id")
|
|
if playerID == "" {
|
|
common.RespondError(c, http.StatusBadRequest, "Player ID is required")
|
|
return
|
|
}
|
|
if c.GetString("role") != "admin" {
|
|
common.RespondError(c, http.StatusForbidden, "You do not have permission to delete this player")
|
|
return
|
|
}
|
|
|
|
err := deletePlayer(db, playerID)
|
|
if err != nil {
|
|
log.Printf("Error deleting player with ID %s: %v", playerID, err)
|
|
common.RespondError(c, http.StatusInternalServerError, "Failed to delete player")
|
|
return
|
|
}
|
|
|
|
log.Printf("User %s (%s) deleted player with ID: %s", c.GetString("userId"), c.GetString("email"), playerID)
|
|
|
|
common.RespondMessage(c, "Player deleted successfully")
|
|
}
|