管理ダッシュボード API設計
API概要
Next.js API Routes(/api/)でバックエンドAPIを提供。既存の投稿エンジン(src/)のモジュールを再利用する。
エンドポイント一覧
レース・予想データ
| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/races | 当日のレース一覧を取得 |
| GET | /api/races?date=YYYY-MM-DD | 指定日のレース一覧を取得 |
| GET | /api/prediction/:raceId | 指定レースの予想データを取得 |
| GET | /api/preview/:raceId | 競馬予想サイトのレースデータをプレビュー用に取得 |
投稿管理
| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/posts | 投稿一覧(ステータス・日付フィルタ対応) |
| POST | /api/posts | 投稿ドラフトを作成 |
| PUT | /api/posts/:id | 投稿を更新(テキスト編集・ステータス変更) |
| POST | /api/posts/:id/publish | Xに投稿実行 |
| POST | /api/posts/generate | テンプレートから投稿文を自動生成 |
収支・分析
| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/balance/summary | 収支サマリー(period=daily/weekly/monthly) |
| GET | /api/balance/records | 収支レコード一覧 |
| GET | /api/analytics/followers | フォロワー推移データ |
| GET | /api/analytics/engagement | エンゲージメントデータ |
データモデル
Post(投稿)
typescript
interface Post {
id: string
raceId: string // analysis_YYYYCCKKDDRR
race: RaceInfo
text: string // 投稿テキスト
status: 'draft' | 'approved' | 'posted' | 'failed'
tweetId?: string // 投稿後のツイートID
createdAt: string
updatedAt: string
postedAt?: string
}レスポンス形式
typescript
// 成功
{ success: true, data: T }
// エラー
{ success: false, error: string }投稿生成フロー
1. GET /api/races → レース一覧を取得
2. ユーザーがレースを選択
3. GET /api/preview/:raceId → 予想サイトデータをプレビュー表示
4. POST /api/posts/generate → テンプレートから投稿文を自動生成
5. ユーザーが投稿文を確認・編集
6. PUT /api/posts/:id → status: 'approved' に更新
7. POST /api/posts/:id/publish → Xに投稿認証
- X API認証情報はサーバーサイドの環境変数から取得
- 管理画面へのアクセス制御は Cloudflare Access で実現