Events API¶
recerdo-events が提供するイベント・招待・参加者管理APIです。
イベント管理¶
POST /api/orgs/{org_id}/events¶
新規イベントを作成します。
GET /api/orgs/{org_id}/events¶
組織のイベント一覧を取得します。
クエリパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
status | string | draft / active / archived |
limit | int | 取得件数(デフォルト20) |
cursor | string | ページネーションカーソル |
GET /api/orgs/{org_id}/events/{event_id}¶
イベント詳細を取得します。
PUT /api/orgs/{org_id}/events/{event_id}¶
イベント情報を更新します。 更新する内容のみをリクエストに含めます。
POST /api/orgs/{org_id}/events/{event_id}/activate¶
イベントをアクティブ化します。アクティブ化時に招待通知が送信されます。
通知仕様:
| 項目 | 内容 |
|---|---|
| 送信基盤 | Notification Service 経由(Port/Adapter で抽象化) |
| プッシュ | FCM(iOS/Android) |
| メール | Postfix + Dovecot + Rspamd(CoreServerV2 CORE+X ホスト) |
| Webhook | Core サービス連携(オプション、署名付き) |
| テンプレート | EventInvitation.v1(title / invite_url / host_name / starts_at を差し込み)。HTML + プレーンテキスト両方生成 |
| 開封/クリック計測 | Notification Service が集約し、EVENT_INVITE として audit-svc に記録 |
POST /api/orgs/{org_id}/events/{event_id}/archive¶
イベントをアーカイブします。
アーカイブポリシー:
- 論理アーカイブ:
archived_atタイムスタンプ付与。イベントは読み取り専用モード(編集・新規コメント/リアクション/メディア追加不可、閲覧・ダウンロードは可)。 - 2年間アクティブ保持: イベント関連データ(メディア・コメント・招待)は通常のオブジェクトストレージに保持。
- 2年経過後、コールド階層へ移動:
- Beta: Garage のコールドバケット(低頻度アクセスクラス)
- 本番: OCI Archive Storage(取り出し数時間)
- 7年経過後、ハードデリート(GDPR/法的保存期間考慮)。メディア原本・派生ファイル・DBレコードを物理削除。
- 各フェーズ移行は asynq(Beta)/ OCI Queue(本番)のスケジュールジョブが担当。
EVENT_ARCHIVE/EVENT_COLD_TIER/EVENT_PURGEDを audit-svc に記録。
招待管理¶
POST /api/orgs/{org_id}/events/{event_id}/invitations¶
メンバーをイベントに招待します。
招待コード仕様:
- Slug: 8文字の大小文字区別なし英数字(例:
K3F9A2HQ)。URL安全、読み上げ可能文字のみ(0/O、1/Iなどの紛らわしい文字は除外) - QRコード: 招待URLをエンコード(オプション生成)
- 招待トークン: JWT(HS256、サーバー署名)。有効期限1時間、ワンタイム(使用時に無効化)
- 再発行:
POST /api/invitations/{invitation_id}/reissueで即時再発行可能(旧トークンは無効化) - 通知経路: Notification Service 経由で FCM プッシュ + Postfix SMTP メール
GET /api/orgs/{org_id}/events/{event_id}/invitations¶
招待一覧を取得します。
POST /api/invitations/{invitation_id}/respond¶
招待に対して参加・辞退を回答します。
POST /api/invitations/{invitation_id}/reissue¶
有効期限切れ・紛失時の招待トークン再発行。旧トークンは即時無効化されます。
参加者管理¶
GET /api/orgs/{org_id}/events/{event_id}/participants¶
イベント参加者一覧を取得します。
コメント¶
ポリシー:
- 論理削除:
deleted_at+deleted_reasonを記録。一覧/詳細 API からは除外 - 削除権限: 投稿者本人 / イベントオーナー / 組織管理者
- 編集履歴: 投稿後 15分以内は編集可能。編集内容は
comment_editsテーブルに履歴保存(監査可能) - メディア添付: Storage Service の
media_idを配列で紐付け(最大4件) - メンション:
@user_id形式。Notification Service にUSER_MENTIONEDを発火 - 対象:
action_destination ∈ {meta, comment, media}(meta=イベント本体 / comment=コメントへの返信 / media=メディアへのコメント)
POST /api/orgs/{org_id}/events/{event_id}/{action_destination}/{action_id}/comments¶
コメントを投稿します。
GET /api/orgs/{org_id}/events/{event_id}/{action_destination}/{action_id}/comments/{comment_id}¶
コメント詳細を取得します。
PATCH /api/orgs/{org_id}/events/{event_id}/{action_destination}/{action_id}/comments/{comment_id}¶
コメントを編集します(投稿後15分以内)。
DELETE /api/orgs/{org_id}/events/{event_id}/{action_destination}/{action_id}/comments/{comment_id}¶
コメントを論理削除します。
リアクション¶
ポリシー:
- 事前定義絵文字: MVP は 6種類固定
{❤️, 😂, 🎉, 😢, 👏, 🔥}。カスタム絵文字・スタンプは現フェーズ対象外 - 制約: 1ユーザー × 1対象 = 1リアクション(種類変更は上書き)
- カウンタ: Redis INCR(
reactions:count:{target}:{emoji})で即時集計。永続化は MySQL(MariaDB互換)に非同期書き戻し - Timeline 連携: リアクション発火時に
reaction_addedを Timeline Service にファンアウト - 対象:
action_destination ∈ {meta, comment, message, media}
POST /api/orgs/{org_id}/events/{event_id}/reactions/{action_destination}¶
リアクションを追加または変更します。
DELETE /api/orgs/{org_id}/events/{event_id}/reactions/{action_destination}/{reaction_id}¶
リアクションを削除します。
最終更新: 2026-04-19 ポリシー適用