Support nested folders in `config/queries/` for query organization

未關閉
#218 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 3 天內回覆

還沒有人認領這個 Issue。

評估

難度
3/5
預估耗時
1-2 天
新手友好度
72/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
冷清
技術堆疊
sql, typescript
領域
backend, tooling

研究方向

先閱讀 plugins/server/utils.js 中的 AppManager.getAppQuery()、getQueries(),以及 typegen 中的 generateQueriesFromDescribe(),然後檢查它們對 flat readdir 和 path.basename 的處理。完成的標準是:巢狀的 .sql 檔案能解析為穩定的相對 query key、驗證接受所選的 separator,且型別產生與前端查找涵蓋文件中的範例。

由索引模型根據 Issue 內容生成。

描述

Support nested folders in config/queries/ for query organization

Problem

As the number of SQL queries in a project grows, config/queries/ becomes a flat bag of files with no way to organize them by feature or domain. The only option is naming conventions (e.g. nego_chart_data.sql, trip_summary.sql), which doesn't scale well and provides no structural separation.

Current behavior

  • AppManager hardcodes queriesDir to path.resolve(process.cwd(), "config/queries")
  • fs.readdir() is non-recursive — subdirectories are silently ignored
  • Query key validation (/^[a-zA-Z0-9_-]+$/) rejects any delimiter that could encode a path
  • generate-types (typegen) also uses flat readdir + path.basename

Proposed behavior

Allow queries to live in subdirectories:

config/queries/
  negotiations/
    chart_data.sql
    spend_summary.sql
  dashboard/
    trip_summary.sql
    trips_by_day.sql
  docs/
    annotations.obo.sql

Query key derivation would use the relative path with a separator (e.g. / or .):

  • negotiations/chart_data or negotiations.chart_data

Frontend usage:

useAnalyticsQuery('negotiations/chart_data', params)

Minimal change required

The fix is small — roughly 3-4 locations need updating:

  1. AppManager.getAppQuery() — change fs.readdir() to fs.readdir(dir, { recursive: true }) and adjust filename matching to include relative subdirectory paths
  2. getQueries() in plugins/server/utils.js — same recursive readdir change
  3. generateQueriesFromDescribe() in typegen — derive query names from relative paths instead of just path.basename()
  4. Query key validation regex — allow / or . as a path separator

Workarounds

Currently using prefix naming (nego_*, trip_*) which works but doesn't provide IDE folder navigation or structural grouping benefits.

主要語言
TypeScript
星號
119
分支
36
平均合併
4 天 16 小時
30 天內合併 PR
37

環境準備

  • 沒有 Dockerfile 或 Docker Compose 檔案
  • 沒有 Pull Request 範本
  • 閱讀貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

databricks/appkit 的其他 Issue

查看 databricks/appkit 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。