// storeglue.go:gateway 对 store 的扩展查询(新增文件,禁改 W1 既有字段)。 package gateway import ( "errors" "onesvm.com/onesvm/browser-server/internal/store" ) // storeErrNotFound 镜像 store.ErrNotFound。 var storeErrNotFound = store.ErrNotFound // KeysAll 全量密钥列表(admin 列表用;禁 SELECT *,显式列名)。 func (d *DBGlue) KeysAll() ([]*store.ApiKey, error) { rows, err := d.Raw().Query( `SELECT id, consumer_id, prefix, name, hash, salt, scopes, rpm, daily_quota, monthly_quota, concurrent_sessions, status, expires_at, created_at FROM api_keys ORDER BY id ASC`) if err != nil { return nil, err } defer rows.Close() var out []*store.ApiKey for rows.Next() { k, err := scanKeyPublic(rows) if err != nil { return nil, err } out = append(out, k) } return out, rows.Err() } // ConsumerByName 按名查消费者(不存在返回 store.ErrNotFound)。 func (d *DBGlue) ConsumerByName(name string) (int64, error) { var id int64 err := d.Raw().QueryRow(`SELECT id FROM consumers WHERE name = ?`, name).Scan(&id) if err != nil { if errors.Is(err, errNoRows) { return 0, store.ErrNotFound } return 0, err } return id, nil } // errNoRows 镜像 sql.ErrNoRows。 var errNoRows = errors.New("sql: no rows in result set")