新規で作成するファイル
api/app/services/odoo_db.py
- Odoo DB(postgres/odoo)の接続生成(psycopg2直なら connect/close・タイムアウト指定・アプリ名など)を一箇所に集約
api/app/services/odoo_sql_executor.py
- BEGIN → SET LOCAL(statement_timeout等)→ 実行 → fetch → COMMIT/ROLLBACK をここに実装
max_rows/fetch_size/truncatedなどの実行制御もここに寄せる
api/app/utils/sql_result_codec.py
cursor.descriptionから **columns(name/typeなど)**を組み立て- rows の **JSON化(Decimal/datetime/UUID など)**を担当(APIの返却を安定化)
api/tests/test_sql_execute_params_non_dry_run.py(または同等のテストファイル)
- “軽いSELECTでrowsが返る”
- “statement_timeoutで止まる”
の最低2ケースを固める(統合寄りでもOK)
※「sqlガード(SELECTのみ等)」がPhase7Aで既に別ファイルなら新規不要。無ければ
api/app/services/sql_guard.pyを新規で切るのが安全です。
修正する既存のファイル
api/app/routers/sql.py(/sql/execute_params のルータがある前提)
options.dry_run=falseの分岐を追加して odoo_sql_executor を呼ぶ- 例外(statement_timeout等)を Problem+JSON にマップして返す
api/app/schemas/sql_execute_params.py(または該当する schemas)
- レスポンスに
columns,rows,row_countを追加 - 併せて
optionsに timeout/max_rows 等を追加(必要なら)
api/app/config.py(Settings)
- Odoo DB接続用ENV(
ODOO_DB_HOST/PORT/NAME/USER/PASSWORD) - 実行制御ENV(
SQL_STATEMENT_TIMEOUT_MS,SQL_LOCK_TIMEOUT_MS,SQL_IDLE_TX_TIMEOUT_MS,SQL_MAX_ROWSなど)
を追加
k8s/.../portal-api/*(ConfigMap / Secret / Deployment のenv)
ODOO_DB_*とSQL_*デフォルト値を注入- パスワードは Secret、それ以外は ConfigMap が基本
api/requirements.txt(必要な場合のみ)
- psycopg2直実装にするなら
psycopg2-binaryが確実に入っているか確認し、無ければ追記
最小構成(最初のPRでやる範囲)
- 新規:
odoo_db.py,odoo_sql_executor.py,sql_result_codec.py - 修正:
routers/sql.py,schemas/sql_execute_params.py,config.py,k8s env
了解。いまの Phase 7B(Odoo DB 実行+env 注入)観点で、dev overlay 配下で“修正が必要そう”なファイルは次の4つです(優先順)。
k8s/overlays/dev/kustomization.yaml
- base/portal-api に追加した
secret-odoo-db-auth.yamlを dev overlay が取り込むかで差分が出ます。 - ここが取り込めてないと
odoo-db-authが無くて Pod が起動しません。
k8s/overlays/dev/patch-api-env.yaml
- dev overlay が env を “上書き” している場合、ODOO_DB_ / SQL_ の追加・整合**が必要です。
- 特に
CHROMA_COLLECTION_VIEW_JAvsCHROMA_COLLECTION_VIEW_COMMON_JAの扱いもここで吸収できます。
k8s/overlays/dev/patch-api-env-from-secret.yaml
- envFrom / secretRef 方式で DB系をまとめて入れている場合、ODDO_DB_PASSWORD を読む Secret を追加するのはここが自然です(今は deployment の env に直で secretKeyRef を足したけど、overlayが上書きするならこちらに寄せる必要あり)。
k8s/overlays/dev/patch-api-replicas.yaml(必要なら)
- 7Bのデバッグ中は replicas=1 が楽、という運用調整が必要ならここ。
コメントを残す