package repo import ( "database/sql" "errors" "golang.org/x/crypto/bcrypt" ) type User struct { ID int64 Name string PasswordHash string } func GetUserByName(db *sql.DB, name string) (*User, error) { u := &User{} err := db.QueryRow("SELECT id, name, password_hash FROM users WHERE name = ?", name).Scan(&u.ID, &u.Name, &u.PasswordHash) if err != nil { if errors.Is(err, sql.ErrNoRows) { return nil, nil } return nil, err } return u, nil } func CreateUser(db *sql.DB, name, password string) error { hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } _, err = db.Exec("INSERT INTO users(name, password_hash) VALUES(?, ?)", name, string(hash)) return err } func CheckPassword(u *User, password string) bool { return bcrypt.CompareHashAndPassword([]byte(u.PasswordHash), []byte(password)) == nil }