ADD: added new user data model and updated the administration site

This commit is contained in:
hwinkel
2025-11-20 23:15:21 +01:00
parent 3818fbf460
commit 846a922a41
12 changed files with 766 additions and 123 deletions

View File

@@ -7,23 +7,24 @@ import (
"time"
"github.com/google/uuid"
"github.com/lib/pq"
)
type User struct {
UUID string `db:"uuid" sql:"VARCHAR(255)" index:"true"`
Username string `db:"username" sql:"VARCHAR(100)"`
Email string `db:"email" sql:"VARCHAR(255)" index:"true"`
lastname string `db:"lastname" sql:"VARCHAR(100)"`
fistname string `db:"fistname" sql:"VARCHAR(100)"`
password string `db:"password_hash" sql:"VARCHAR(255)"`
phone string `db:"phone" sql:"VARCHAR(20)"`
avatarURL string `db:"avatar_url" sql:"VARCHAR(255)"`
IsActive bool `db:"is_active" sql:"BOOLEAN"`
birthday time.Time `db:"birthday" sql:"DATE"`
createdAt time.Time `db:"created_at" sql:"TIMESTAMP"`
updatedAt time.Time `db:"updated_at" sql:"TIMESTAMP"`
LastLogin time.Time `db:"last_login" sql:"TIMESTAMP"`
Role []string `ignore:"true"` // wird NICHT in der DB angelegt
UUID string `db:"uuid" sql:"VARCHAR(255)" index:"true"`
Username string `db:"username" sql:"VARCHAR(100)"`
Email string `db:"email" sql:"VARCHAR(255)" index:"true"`
lastname sql.NullString `db:"lastname" sql:"VARCHAR(100)"`
firstname sql.NullString `db:"firstname" sql:"VARCHAR(100)"`
password string `db:"password_hash" sql:"VARCHAR(255)"`
phone sql.NullString `db:"phone" sql:"VARCHAR(20)"`
avatarURL sql.NullString `db:"avatar_url" sql:"VARCHAR(255)"`
IsActive sql.NullBool `db:"is_active" sql:"BOOLEAN"`
birthday *time.Time `db:"birthday" sql:"DATE"`
createdAt *time.Time `db:"created_at" sql:"TIMESTAMP"`
updatedAt *time.Time `db:"updated_at" sql:"TIMESTAMP"`
LastLogin *time.Time `db:"last_login" sql:"TIMESTAMP"`
Role []string `ignore:"true"` // wird NICHT in der DB angelegt
}
@@ -173,7 +174,7 @@ func savePlayer(db *sql.DB, player User) error {
log.Printf("Saving player: ID=%v, Name=%v, Email=%v", player.UUID, player.Username, player.Email)
stmt := "INSERT INTO public.users (id, name, email,password_hash) VALUES ($1, $2, $3,$4)"
stmt := "INSERT INTO public.users (UUID, username, email,password_hash) VALUES ($1, $2, $3,$4)"
log.Printf("Generated SQL statement: %s", stmt)
_, err := db.Exec(stmt, player.UUID, player.Username, player.Email, player.password)
@@ -203,7 +204,7 @@ func AddRoleToPlayer(db *sql.DB, playerID string, role []string) error {
log.Printf("Adding role '%s' to player with ID: %s", role, playerID)
stmt := "INSERT INTO public.roles (player_id, role) VALUES ($1, $2)"
_, err := db.Exec(stmt, playerID, role)
_, err := db.Exec(stmt, playerID, pq.Array(role))
if err != nil {
log.Printf("Error adding role to player with ID %s: %v", playerID, err)
return err
@@ -214,7 +215,11 @@ func AddRoleToPlayer(db *sql.DB, playerID string, role []string) error {
}
func GetAllPlayers(db *sql.DB) ([]User, error) {
rows, err := db.Query("SELECT id, name, email FROM public.users")
// rows, err := db.Query("SELECT id, name, email FROM public.users")
// rows, err := db.Query("SELECT u.uuid, u.email, u.username, u.firstname,u.lastname,u.birthday, u.is_active, u.created_at, ur.roleFROM public.users u
// LEFT JOIN roles ur ON u.uuid::uuid = ur.player_id ORDER BY u.uuid ASC")
rows, err := db.Query(getPLayerWithRolesQuery)
if err != nil {
log.Printf("Error retrieving users: %v", err)
return nil, err
@@ -224,7 +229,16 @@ func GetAllPlayers(db *sql.DB) ([]User, error) {
var users []User
for rows.Next() {
var player User
if err := rows.Scan(&player.UUID, &player.Username, &player.Email); err != nil {
if err := rows.Scan(&player.UUID,
&player.Email,
&player.Username,
&player.firstname,
&player.lastname,
&player.birthday,
&player.IsActive,
&player.createdAt,
(*pq.StringArray)(&player.Role),
); err != nil {
log.Printf("Error scanning player row: %v", err)
return nil, err
}
@@ -268,15 +282,15 @@ func GetPlayerByName(db *sql.DB, name string) (User, error) {
}
// DeletePlayer deletes a player from the database by ID.
func deletePlayer(db *sql.DB, id string) error {
func deletePlayer(db *sql.DB, uuid string) error {
// Delete the player from the database
log.Printf("Deleting player with ID: %s", id)
_, err := db.Exec("DELETE FROM public.users WHERE id = $1", id)
log.Printf("Deleting player with ID: %s", uuid)
_, err := db.Exec("DELETE FROM public.users WHERE uuid = $1", uuid)
if err != nil {
log.Printf("Error deleting player with ID %s: %v", id, err)
log.Printf("Error deleting player with ID %s: %v", uuid, err)
return err
}
log.Printf("User with ID %s deleted successfully", id)
log.Printf("User with ID %s deleted successfully", uuid)
return nil
}