package models import ( "database/sql" "time" ) type User struct { ID int64 `db:"id" json:"id"` Username string `db:"username" json:"username"` PasswordHash string `db:"password_hash" json:"-"` Role string `db:"role" json:"role"` CreatedAt time.Time `db:"created_at" json:"created_at"` } type UserRepository struct { db *sql.DB } func NewUserRepository(db *sql.DB) *UserRepository { return &UserRepository{db: db} } func (r *UserRepository) Create(username, passwordHash, role string) (int64, error) { res, err := r.db.Exec( "INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)", username, passwordHash, role, ) if err != nil { return 0, err } return res.LastInsertId() } func (r *UserRepository) GetByUsername(username string) (*User, error) { var u User err := r.db.QueryRow( "SELECT id, username, password_hash, role, created_at FROM users WHERE username = ?", username, ).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Role, &u.CreatedAt) if err != nil { return nil, err } return &u, nil } func (r *UserRepository) Exists() (bool, error) { var n int err := r.db.QueryRow("SELECT COUNT(*) FROM users").Scan(&n) if err != nil { return false, err } return n > 0, nil } func (r *UserRepository) GetByID(id int64) (*User, error) { var u User err := r.db.QueryRow( "SELECT id, username, password_hash, role, created_at FROM users WHERE id = ?", id, ).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Role, &u.CreatedAt) if err != nil { return nil, err } return &u, nil }