package api import ( "errors" "fmt" "log/slog" "git.dubyatp.xyz/dubyatp/scannerbot/server/db" "github.com/gocql/gocql" ) func dbGetUser(id string) (*User, error) { query := `SELECT id, name, password FROM users WHERE id = ?` var user User var gid gocql.UUID err := db.Session.Query(query, id).Scan(&gid, &user.Name, &user.Password) user.ID = [16]byte(gid) if err == gocql.ErrNotFound { slog.Debug("db: user not found", "userid", id) return nil, errors.New("User not found") } else if err != nil { slog.Error("db: failed to query user", "error", err) return nil, fmt.Errorf("failed to query user") } slog.Debug("db: user found", "userid", user.ID, "username", user.Name) return &user, nil } func dbGetUserByName(username string) (*User, error) { query := `SELECT id, name, password FROM users WHERE name = ?` var user User var gid gocql.UUID err := db.Session.Query(query, username).Scan(&gid, &user.Name, &user.Password) user.ID = [16]byte(gid) if err == gocql.ErrNotFound { slog.Debug("db: user not found", "username", username) return nil, errors.New("User not found") } else if err != nil { slog.Error("db: failed to query user", "error", err) return nil, fmt.Errorf("failed to query user") } slog.Debug("db: user found", "userid", user.ID, "username", user.Name) return &user, nil } func dbGetAllUsers() ([]*User, error) { query := `SELECT id, name, password FROM users` iter := db.Session.Query(query).Iter() defer iter.Close() var users []*User for { user := &User{} var gid gocql.UUID if !iter.Scan(&gid, &user.Name, &user.Password) { break } user.ID = [16]byte(gid) users = append(users, user) } if err := iter.Close(); err != nil { slog.Error("db: failed to iterate users", "error", err) return nil, fmt.Errorf("failed to iterate users") } if len(users) == 0 { slog.Debug("db: no users found") return nil, errors.New("no users found") } slog.Debug("db: user list returned") return users, nil } func dbAddUser(user *User) error { query := `INSERT INTO users (id, name, password) VALUES (?, ?, ?)` err := db.Session.Query(query, gocql.UUID(user.ID), user.Name, user.Password).Exec() if err != nil { slog.Error("db: failed to add user", "error", err, "userid", user.ID, "username", user.Name) return fmt.Errorf("failed to add user") } slog.Debug("db: user added", "userid", user.ID, "username", user.Name) return nil }