I wouldn't merge this yet. There are 3 bugs that will break things, 1 SQL injection, and 1 risk. The original code was correct before this change.
src/orders/service.ts
L15: 🔴 bug: the loop runs one step too far.i <= order.items.lengthreadsorder.items[length], which isundefined, so.pricethrows a TypeError on every call. Use<, or keep the originalreduce, which was correct and shorter.L22: 🔴 bug:awaitwas removed fromthis.coupons.find(code), socouponis now a Promise.coupon.expiresAtisundefinedandundefined < Date.now()isfalse, so the expiry check never fires and expired coupons are accepted.coupon.idis alsoundefined. Put theawaitback.L24: 🔴 bug: the update is fire-and-forget and.catch(() => {})hides any failure. Callers see success even when the coupon was never saved, and nothing is logged. Put backawait this.repo.update(...)and let errors reach the caller.L22-23: 🟡 risk: iffindreturns null for an unknown code,coupon.expiresAtthrows a TypeError instead of a clear error. Addif (!coupon) throw new Error("invalid coupon").
L28: 🔴 security: SQL injection in listOrders. userId is put straight into the SQL string. A value like ' OR '1'='1 returns every user's orders, and with stacked queries an attacker could change or delete data (CWE-89, OWASP A03). Even if userId comes from an auth token today, this function can't assume that, and a single caller passing a request param makes it exploitable. Use a parameterized query, e.g. this.db.query("SELECT * FROM orders WHERE user_id = $1", [userId]) (use whatever placeholder syntax your driver expects).
L28: 🔵 nit:SELECT *returns every column and will pick up any column added later. List the columns you need.L27: 🔵 nit: no return type, unlikegetOrderTotal. AddPromise<Order[]>.
Real run recorded with claude-code / claude-opus-5-5. Output is shown verbatim, unmodified.
できること
コードレビューのコメントを L<行>: <問題>. <修正>. という短い形式で書き、そのまま Pull Request に貼れる形で出力します。
仕組み
- /caveman-review、"review this PR"、"review the diff" で起動します。
- 指摘ごとに 1 行。正確な行番号、バッククォートで囲んだシンボル名、具体的な修正方法を書き、必要に応じて重要度タグ(🔴 バグ、🟡 リスク、🔵 細かい指摘、❓ 質問)を付けます。
- ぼかした言い回しや diff の説明の繰り返しを省きます。セキュリティ問題、設計上の意見の相違、新しいメンバー向けの説明では、きちんとした段落で書きます。
向いている場面
diff や Pull Request をレビューし、指摘をすばやく読みたいとき。
知っておきたいこと
コメントを書くだけです。コードの修正、承認や変更要求、リンターの実行は行いません。
指示だけのファイルです。スクリプトはなく、ネットワーク接続もファイルの書き込みも行いません。 パッケージには元リポジトリの README、LICENSE、NOTICE も含まれます。 レビューの指摘はモデルの出力です。投稿する前に確認してください。