ハンズオン

予約機能 — 空き状況・デポジット・Googleカレンダー

営業時間ベースの空き状況、Stripe Checkout によるデポジット決済、Webhook による確定、ICS 添付と Google カレンダー連携を備えたモジュール機能です。

予約(デモ機能)

以下を一通り備えたプラグイン可能な機能です:

  • 営業時間に基づく空き状況(バッファ・重複チェック対応)
  • 決済完了までのソフトホールド
  • デポジット/全額の Stripe Checkout
  • Webhook による予約確定
  • ICS 添付メールと「Google カレンダーに追加」リンク(OAuth 不要)
  • i18n 対応 UI:/:locale/reserve/:locale/account/reservations

セットアップ

  1. 環境変数とコード設定
NEXT_PUBLIC_FEATURE_RESERVATIONS_ENABLED=true
STRIPE_PRIVATE_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
RESEND_API_KEY=...
EMAIL_FROM="Your App <no-reply@your-domain.com>"
NEXT_PUBLIC_WEB_URL="http://localhost:3000"

営業時間・ホールド時間・基準タイムゾーンは src/data/reservations.ts を編集してください。

  1. データベース
pnpm drizzle-kit generate --config src/db/config.ts
pnpm drizzle-kit migrate --config src/db/config.ts
  1. Webhook(ローカル)
stripe listen --forward-to localhost:3000/api/pay/webhook/stripe
  1. 起動
pnpm dev

/ja/reserve で確認できます。

カスタマイズ

  • 基準タイムゾーン:src/data/reservations.tsbaseTimeZone を編集(例:Asia/Tokyo
  • デポジット/全額:サービスごとに deposit_amountrequire_deposit を調整
  • バッファ:buffer_before_minbuffer_after_min
  • カレンダー:Google のリンクは OAuth 不要。提供者側の同期は OAuth と Calendar API を追加してください。