package repository import ( "licence-server/internal/model" "database/sql" "fmt" ) type UserRepo struct { db *sql.DB } func NewUserRepo(db *sql.DB) *UserRepo { return &UserRepo{db: db} } func (r *UserRepo) GetByUsername(username string) (*model.AdminUser, error) { var u model.AdminUser err := r.db.QueryRow( "SELECT id, username, password_hash, full_name, active, created_at, updated_at, last_login_at FROM admin_users WHERE username = ?", username, ).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.FullName, &u.Active, &u.CreatedAt, &u.UpdatedAt, &u.LastLoginAt) if err != nil { return nil, fmt.Errorf("get user by username: %w", err) } return &u, nil } func (r *UserRepo) Create(u *model.AdminUser) error { res, err := r.db.Exec( "INSERT INTO admin_users (username, password_hash, full_name, active) VALUES (?, ?, ?, ?)", u.Username, u.PasswordHash, u.FullName, u.Active, ) if err != nil { return fmt.Errorf("create user: %w", err) } u.ID, _ = res.LastInsertId() return nil } func (r *UserRepo) UpdateLastLogin(id int64) error { _, err := r.db.Exec("UPDATE admin_users SET last_login_at = NOW() WHERE id = ?", id) if err != nil { return fmt.Errorf("update last login: %w", err) } return nil } func (r *UserRepo) Count() (int, error) { var count int err := r.db.QueryRow("SELECT COUNT(*) FROM admin_users").Scan(&count) return count, err }