ミドルウェア関数
ミドルウェア関数は、UIコンポーネントとバックエンドサービス間のコアビジネスロジックインターフェースを提供します。これらの関数は、求人マッチングプラットフォームの認証、データ管理、リアルタイムコミュニケーション、アプリケーションワークフローを処理します。
📋 目次
- 🔐 認証とセッション管理
- 👤 ユーザー管理
- 🏢 組織管理
- 💼 求人投稿とカタログ管理
- 📝 応募と注文管理
- 💬 リアルタイムコミュニケーション
- 🔍 検索とフィルタリング
- 🧭 ナビゲーションとUI制御
- 📄 ページネーション
🔐 認証とセッション管理
関数 | 説明 | 使用例 |
---|---|---|
onActionLogin | メール/パスワード認証情報でユーザーを認証 | ログインフォーム、認証フロー |
onActionLogout | ユーザーログアウトを処理し、セッションデータをクリア | ログアウトボタン、セッション終了 |
onActionSignUp | 新しい求職者または雇用主アカウントを登録 | 登録フォーム、ユーザーオンボーディング |
onSuccessLogin | ログイン後のリダイレクトと初期化を処理 | ログイン成功処理 |
onSuccessLogout | ログアウト後のクリーンアップとリダイレクトを処理 | ログアウト成功処理 |
onActionResendVerificationEmail | ユーザーにメール認証を再送信 | メール認証ワークフロー |
onRequestPasswordChange | パスワードリセットプロセスを開始 | パスワード忘れフォーム |
onResetPasswordSubmit | トークン検証でパスワードリセットを完了 | パスワードリセット完了 |
onSessionStateUpdate | セッション状態の変更と更新を処理 | セッション管理、トークン更新 |
isLoggedIn | ユーザーが現在認証されているかチェック | 条件付きレンダリング、ルートガード |
isNotLoggedIn | ユーザーが認証されていないかチェック | 認証プロンプト、アクセス制御 |
👤 ユーザー管理
関数 | 説明 | 使用例 |
---|---|---|
onUpdateUser | 求職者または雇用主のプロファイル情報を更新 | プロファイル編集フォーム |
onLockUser | ユーザーアカウントをロック/停止(管理者機能) | 管理者ユーザー管理パネル |
onUnlockUser | ユーザーアカウントをアンロック/復元(管理者機能) | 管理者ユーザー管理パネル |
onDeactivateAccount | 現在のユーザーアカウントを非アクティブ化 | アカウント削除フロー |
onCreateInvitation | 組織のチームメンバー招待を作成 | チームメンバー招待 |
onDeleteInvitation | 保留中のユーザー招待を削除/キャンセル | 招待管理 |
onAcceptInvitation | 組織チーム招待を受諾 | 招待受諾ワークフロー |
onChangePassword | ユーザーの現在のパスワードを更新 | パスワード変更フォーム |
onChangeEmail | ユーザーのメールアドレスを更新 | メール変更フォーム |
🏢 組織管理
関数 | 説明 | 使用例 |
---|---|---|
onCreateOrganization | 新しい雇用主組織を作成 | 組織設定フォーム |
onUpdateOrganization | 組織プロファイルと詳細を更新 | 組織プロファイル編集 |
onFilterOrganizations | 組織リストをフィルタリングして検索 | 組織ディレクトリ |
onGetMoreOrganizationProducts | 組織の求人投稿をさらに読み込み | 組織求人リストのページネーション |
💼 求人投稿とカタログ管理
関数 | 説明 | 使用例 |
---|---|---|
onCreateProduct | 新しい求人投稿を作成 | 求人投稿作成フォーム |
onUpdateProduct | 既存の求人投稿を更新 | 求人投稿編集フォーム |
onFilterProducts | 求人リストをフィルタリングして検索 | 求人検索とフィルタリング |
onGetMoreProducts | さらに求人投稿を読み込み(ページネーション) | 求人リストのページネーション |
onGetAttributes | 求人スキルと属性を取得 | スキル選択、求人フィルタリング |
onGetCategories | 求人カテゴリを読み込み | カテゴリベースナビゲーション |
onCreateProductAttachment | 求人関連ファイル添付をアップロード | 求人説明添付 |
onDeleteProductAttachment | 求人投稿の添付を削除 | 添付管理 |
📝 応募と注文管理
関数 | 説明 | 使用例 |
---|---|---|
onCreateOrder | 新しい求人応募を作成 | 求人応募送信 |
onActionUpdateOrder | 応募ステータスと詳細を更新 | 応募管理、ステータス更新 |
onFilterOrders | 求人応募をフィルタリングして検索 | 応募検索とフィルタリング |
onGetMoreOrders | さらに応募を読み込み(ページネーション) | 応募履歴のページネーション |
💬 リアルタイムコミュニケーション
関数 | 説明 | 使用例 |
---|---|---|
onCreateTopic | 雇用主と候補者間の新しいチャット会話を作成 | 応募ベースチャット初期化 |
onSubscribeToTopic | リアルタイム更新のためにチャットトピックを購読 | リアルタイムメッセージング設定 |
onSendMessage | 雇用主-候補者会話でメッセージを送信 | メッセージ送信インターフェース |
onGetMoreMessages | 以前のメッセージ履歴を読み込み | チャット履歴ページネーション |
onGetMoreTopics | さらに会話トピックを読み込み | チャットトピックリストページネーション |
onUpdateMessageReadStatus | メッセージを既読としてマーク | 既読ステータス追跡 |
appendMessagesToState | アプリケーション状態に新しいメッセージを追加 | リアルタイムメッセージ更新 |
onSocketSubscribeToUserId | ユーザー固有のリアルタイム更新を購読 | ユーザー通知システム |
onSocketUnSubscribeToUserId | ユーザーリアルタイム更新の購読を解除 | ログアウト/アンマウント時のクリーンアップ |
onSocketSubscribeToOrganizationId | 組織リアルタイム更新を購読 | 雇用主通知システム |
onSocketUnSubscribeToOrganizationId | 組織更新の購読を解除 | ナビゲーション時のクリーンアップ |
🔍 検索とフィルタリング
関数 | 説明 | 使用例 |
---|---|---|
onChangeSearchFilter | 求人検索条件を更新 | 検索入力処理 |
onSelectFilter | 求人検索選択にフィルタを追加 | フィルタ選択UI |
onRemoveSelectedFilter | 選択から特定フィルタを削除 | 個別フィルタ削除 |
🧭 ナビゲーションとUI制御
関数 | 説明 | 使用例 |
---|---|---|
onActionToggleMenu | モバイル/サイドバーメニューを切り替え | メニューボタン処理 |
redirect | プログラマティックナビゲーション | ルート変更、リダイレクト |
📄 ページネーション
すべてのページネーション関数は、それぞれのデータタイプの追加アイテム読み込みを処理します:
関数 | 説明 | 使用例 |
---|---|---|
onGetMoreProducts | 追加求人投稿を読み込み | 求人リストの無限スクロール |
onGetMoreOrders | 追加応募を読み込み | 応募履歴ページネーション |
onGetMoreOrganizationProducts | 組織の求人投稿をさらに読み込み | 組織求人カタログページネーション |
onGetMoreMessages | 追加チャットメッセージを読み込み | チャット履歴読み込み |
onGetMoreTopics | 追加会話トピックを読み込み | チャットトピックリストページネーション |
🚀 使用パターン
基本認証使用法
function LoginForm({ middleware }) {
const handleLogin = async (email, password) => {
const result = await middleware.onActionLogin({ email, password });
if (result.ok) {
// ログイン成功 - ダッシュボードにリダイレクト
console.log('ユーザーログイン:', result.value);
} else {
// 認証エラーを処理
console.error('ログイン失敗:', result.error);
}
};
return (
<form onSubmit={handleLogin}>
{/* メールとパスワードフィールド */}
</form>
);
}
求人投稿作成パターン
const handleCreateJobPosting = async (organizationId, jobData) => {
try {
const result = await middleware.onCreateProduct(organizationId, jobData);
if (result.ok) {
// 成功 - 求人投稿にリダイレクト
middleware.redirect('/jobs/' + result.value.id);
} else {
// ビジネスロジックエラーを処理
setError(result.error.message);
}
} catch (error) {
// ネットワーク/予期しないエラーを処理
setError('何かが間違っています');
}
};
求人応募フロー
function JobApplicationButton({ middleware, state, jobId, organizationId }) {
const handleApply = () => {
if (middleware.isLoggedIn()) {
// ユーザーは認証済み - 応募を作成
const applicationData = { jobId, coverLetter: state.coverLetter };
middleware.onCreateOrder(organizationId, applicationData);
} else {
// ログインにリダイレクト
middleware.redirect('/login');
}
};
return (
<button onClick={handleApply}>
求人に応募
</button>
);
}
リアルタイムメッセージング設定
useEffect(() => {
if (middleware.isLoggedIn() && currentUserId) {
// リアルタイム通知とメッセージを購読
middleware.onSocketSubscribeToUserId(
currentUserId,
(error) => console.error('ソケットエラー:', error),
(message) => {
// 受信メッセージを処理
console.log('新しいメッセージ:', message);
}
);
// アンマウント時のクリーンアップ
return () => {
middleware.onSocketUnSubscribeToUserId(currentUserId);
};
}
}, [currentUserId]);
💡 ベストプラクティス
Async/Awaitパターン
- Promiseを返すミドルウェア関数では常にasync/awaitを使用
- 成功と失敗の両方のケースを明示的に処理
- 予期しないエラーにはtry/catchブロックを使用
結果パターン
result.value
にアクセスする前にok
プロパティをチェック- ユーザーフィードバックのために
result.error
を適切に処理 - 結果ステータスをチェックせずに成功を仮定しない
状態管理
- 直接API呼び出しの代わりにミドルウェア関数を使用
- ミドルウェアに状態更新を自動処理させる
- カスタム状態変更には
updateState
を控えめに使用
エラーハンドリング
- UIフィードバック用にユーザーフレンドリーなエラーメッセージを提供
- デバッグ目的で詳細なエラーをログ
- ネットワーク関連エラーの再試行メカニズムを実装
リアルタイムコミュニケーション
- ソケット購読には常にエラーとメッセージハンドラーを提供
- メモリリークを防ぐためにコンポーネントアンマウント時に購読をクリーンアップ
- 接続状態変更を適切に処理