Skip to content

Commit f2ccdad

Browse files
committed
docs: Add lessons from task to plan (#2627)
1 parent c6f7dfb commit f2ccdad

File tree

1 file changed

+20
-3
lines changed
  • docs/dev-notes/2025-09-23/contest-task-pair-mapping

1 file changed

+20
-3
lines changed

docs/dev-notes/2025-09-23/contest-task-pair-mapping/plan.md

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,24 @@ type TaskResultMapByContestTaskPair = Map<ContestTaskPairKey, TaskResult>;
238238

239239
---
240240

241-
**作成日**: 2025-09-23
241+
## 教訓と一般化
242+
243+
以下は、実装中に得られた教訓を一般化したものです。今後の開発においても参考にしてください。
244+
245+
### 1. 防御的なチェックの再考
246+
- **教訓**: Prisma のエラーハンドリング(例: `P2002``P2025`)を活用することで、事前チェックを省略し、TOCTOU(Time-of-Check to Time-of-Use)競合を回避できる。
247+
- **推奨**: 事前チェックを行う代わりに、データベース操作の結果を直接利用し、エラーを適切に処理する。
248+
249+
### 2. 戻り値の活用
250+
- **教訓**: CRUD メソッドで作成・更新されたレコードを返すことで、呼び出し元が追加のクエリを実行せずに結果を利用できる。
251+
- **推奨**: `create``update` メソッドでは、`void` を返すのではなく、作成・更新されたレコードを返すようにする。
252+
253+
### 3. 型定義の明確化
254+
- **教訓**: Prisma の自動生成型を活用しつつ、必要に応じて独自の型を定義することで、型安全性と可読性を向上できる。
255+
- **推奨**: CRUD 操作用の型(例: `Create`, `Update`, `Read`)を明確に分離し、それぞれの目的に応じた型を定義する。
256+
257+
### 4. ログとエラーハンドリング
258+
- **教訓**: エラー発生時には、適切なログを出力し、問題の特定を容易にする。
259+
- **推奨**: Prisma のエラーコード(例: `P2002`, `P2025`)を活用して、エラー内容に応じた具体的なメッセージを出力する。
260+
242261
**更新日**: 2025-10-15
243-
**ベース**: [initial_plan.md (2025-09-17)](../../2025-09-17/contest-task-mapping/initial_plan.md)
244-
**ステータス**: 実装完了

0 commit comments

Comments
 (0)