package repository import ( "database/sql" "fmt" "floorvisualizer/internal/model" ) func CreateUser(d *sql.DB, username, passwordHash, name string) (*model.User, error) { var u model.User err := d.QueryRow(` INSERT INTO users (username, password_hash, name) VALUES ($1,$2,$3) RETURNING id, username, name, avatar_url, created_at, updated_at `, username, passwordHash, name).Scan(&u.ID, &u.Username, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt) if err != nil { return nil, fmt.Errorf("create user: %w", err) } return &u, nil } func GetUserByUsername(d *sql.DB, username string) (*model.User, error) { var u model.User err := d.QueryRow(` SELECT id, username, password_hash, name, avatar_url, created_at, updated_at FROM users WHERE username = $1 `, username).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt) if err != nil { return nil, err } return &u, nil } func GetUserByID(d *sql.DB, id string) (*model.User, error) { var u model.User err := d.QueryRow(` SELECT id, username, password_hash, name, avatar_url, created_at, updated_at FROM users WHERE id = $1 `, id).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt) if err != nil { return nil, err } return &u, nil } func UpdateUser(d *sql.DB, id, name, avatarURL string) (*model.User, error) { var u model.User err := d.QueryRow(` UPDATE users SET name=$1, avatar_url=$2, updated_at=now() WHERE id=$3 RETURNING id, username, name, avatar_url, created_at, updated_at `, name, avatarURL, id).Scan(&u.ID, &u.Username, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt) if err != nil { return nil, fmt.Errorf("update user: %w", err) } return &u, nil }