Skip to content

Commit c02e58f

Browse files
authored
Merge pull request #30 from ut42tech/develop
Refactor API and client structure; add fullName to participants
2 parents e715cd3 + 2612bf2 commit c02e58f

44 files changed

Lines changed: 2088 additions & 1158 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CLAUDE.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,26 @@
3434
tecnova-platform/
3535
├── apps/ # エンドユーザー向けアプリ
3636
│ ├── api/ # Hono on Cloudflare Workers
37-
│ ├── checkin/ # Next.js iPad PWA
38-
│ ├── mentor/ # Next.js スマホPWA (Phase 1.5)
37+
│ ├── checkin/ # Next.js iPad PWA(受付端末)
3938
│ └── admin/ # Next.js 管理PC画面
4039
├── packages/ # アプリ間で共有するライブラリ
4140
│ ├── db/ # Drizzle schema・migrations
4241
│ ├── shared/ # 共通型・Zodスキーマ・Sheets連携
43-
│ ├── ui/ # 共通UIコンポーネント (shadcn/ui)
44-
│ └── auth/ # Better Auth設定
42+
│ └── ui/ # 共通UIコンポーネント (shadcn/ui)・APIクライアント・共通フォーマッタ
4543
└── docs/ # 設計ドキュメント
4644
```
4745

46+
`apps/mentor`(メンタースマホPWA)は Phase 1.5 でスコープ化されるが現時点では未実装。
47+
Better Auth の設定は `packages/auth` ではなく `apps/api/src/lib/auth.ts` に集約している
48+
(リクエスト毎に instance を作る制約上、Workers の Env を直接受け取れる場所に置くのが自然なため)。
49+
4850
**新しい機能の追加先を判断する基準:**
4951

5052
- 単一アプリ固有 → 該当 `apps/*`
5153
- 複数アプリで使う → `packages/*` のいずれか
5254
- DB関連 → `packages/db`
5355
- 型定義・Zodスキーマ・外部API連携 → `packages/shared`
56+
- フロント共通の UI / `apiFetch` / JST フォーマッタ / `MeProvider``packages/ui`
5457

5558
---
5659

@@ -132,15 +135,15 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
132135
3. **`db.batch([...])` で原子的に**: `INSERT participants` + `INSERT sessions`
133136
4. スプシ書き戻し
134137
5. **失敗時の補償**: `db.batch([...])``DELETE sessions``DELETE participants` を実行
135-
6. PK衝突時はステップ1からリトライ(最大3回)
138+
6. PK 衝突時のリトライは現行未実装(`apps/api/src/lib/checkin.ts` の TODO)。当面は運用上の手動再試行で回復する
136139

137-
詳細: [`docs/mvp.md` 6.1節](./docs/mvp.md#61-認証なしチェックインipad用)`/checkin/activate` 処理順
140+
詳細: [`docs/mvp.md` 6.1節](./docs/mvp.md#61-受付端末用checkinメンター認証必須)`/checkin/activate` 処理順
138141

139142
### 5. 個人情報の取り扱い
140143

141-
- 内製DBには **本名・住所・年齢・保護者連絡先・学校名は保持しない**
142-
- これらは教員側の管理スプシで完結する設計
143-
- ニックネーム・学年のみが学生側で扱える情報
144+
- 内製DBに保持するのは **氏名(本名)・ニックネーム・学年** のみ
145+
- 氏名はメンターの呼びかけや救急時の本人確認のために必要なので学生側でも持つが、**メイン識別子はニックネーム**(QR・検索・一覧の主表示はニックネーム)
146+
- 住所・年齢・保護者連絡先・学校名は **保持しない**。これらは教員側の管理スプシで完結する設計
144147

145148
### 6. タイムゾーン
146149

@@ -174,8 +177,8 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
174177
2. **型を定義する**`packages/shared/src/types/` または該当アプリ内)
175178
3. **Zodスキーマを定義する**`packages/shared/src/schemas/`
176179
4. **DB操作が必要なら**`packages/db` のスキーマを確認・更新
177-
5. **APIエンドポイントを実装**`apps/api`
178-
6. **フロント側で呼び出し**Hono Client `hc` を使うことで型推論が効く
180+
5. **APIエンドポイントを実装**`apps/api``routes/` 配下にモジュール単位で
181+
6. **フロント側で呼び出し**`@tecnova/ui/lib/api-client``apiFetch` を使い、レスポンスは `packages/shared/src/schemas` の型でアサート
179182
7. **動作確認**してから次へ
180183

181184
---
@@ -187,9 +190,11 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
187190
pnpm dev
188191

189192
# 特定アプリのみ起動
193+
# 注: workspace 名は package.json の "name" を使う。フロント2つは
194+
# @tecnova/ プレフィックスを付けていない(checkin / admin)。
190195
pnpm --filter @tecnova/api dev
191-
pnpm --filter @tecnova/checkin dev
192-
pnpm --filter @tecnova/admin dev
196+
pnpm --filter checkin dev
197+
pnpm --filter admin dev
193198

194199
# Lint & format
195200
pnpm biome check --write .
@@ -201,9 +206,8 @@ pnpm type-check
201206
pnpm --filter @tecnova/db db:generate
202207

203208
# DB マイグレーション適用(ローカル D1 / 本番 D1)
204-
cd apps/api
205-
npx wrangler d1 migrations apply tecnova-db --local
206-
npx wrangler d1 migrations apply tecnova-db --remote
209+
pnpm --filter @tecnova/api db:apply:local
210+
pnpm --filter @tecnova/api db:apply:remote
207211

208212
# Cloudflare Workers デプロイ
209213
pnpm --filter @tecnova/api deploy

0 commit comments

Comments
 (0)