ユーザー登録
概要説明
ユーザー登録機能により、新規ユーザーはシステムでアカウントを作成できます。標準的なメールベースの登録を使用し、ユーザーデータの検証、ユーザーアカウントの作成、デフォルトロールの割り当て、および必要に応じてウェルカム通知の送信を行います。これはOAuthやサードパーティ認証を伴わない従来の登録方法です。
アクティビティ図
flowchart TD
A[ユーザーが登録を送信] --> B[メール、名前、会社を検証]
B --> C{データは有効?}
C -->|No| D[検証エラーを返す]
C -->|Yes| E[メールの重複チェック]
E --> F{メールは一意?}
F -->|No| G[重複メールエラーを返す]
F -->|Yes| H[ユーザーアカウントを作成]
H --> I[デフォルトグループロールを割り当て]
I --> J[成功レスポンスを返す]
style A fill:#e1f5fe
style J fill:#c8e6c9
style D fill:#ffcdd2
style G fill:#ffcdd2
シーケンス図
標準登録フロー
sequenceDiagram
participant Client
participant RegisterController
participant AuthService
participant Database
Note over Client,Database: 標準メール登録フロー
rect rgb(200, 255, 200)
Note right of Client: ハッピーケースフロー
Client->>RegisterController: POST /api/v1/general/auth/register
Note over Client,RegisterController: {email, name, companyName}
rect rgb(200, 230, 255)
Note right of RegisterController: 入力検証
RegisterController->>RegisterController: リクエストデータを検証
end
rect rgb(200, 255, 255)
Note right of RegisterController: ビジネスロジック
RegisterController->>AuthService: register(email, name, companyName)
AuthService->>Database: メールの重複チェック
Database-->>AuthService: メール利用可能
AuthService->>Database: ユーザーレコードを作成
Database-->>AuthService: ユーザー作成完了
AuthService->>Database: デフォルトグループロールを割り当て
Database-->>AuthService: ロール割り当て完了
end
AuthService-->>RegisterController: ユーザー作成成功
RegisterController->>Client: 201 Created + ユーザーデータ
end
rect rgb(255, 200, 200)
Note right of Client: エラーハンドリング
rect rgb(255, 230, 230)
alt 検証エラー
RegisterController->>Client: 422 Validation Error
else メール既存
Database-->>AuthService: メール存在
AuthService-->>RegisterController: メール競合
RegisterController->>Client: 409 Conflict
else データベースエラー
Database-->>AuthService: データベースエラー
AuthService-->>RegisterController: エラー結果
RegisterController->>Client: 500 Internal Server Error
end
end
end
ステップ
ステップ1: 登録リクエストの送信
- 説明: ユーザーがメール、名前、会社を含む登録フォームを送信
- リクエスト:
POST /api/v1/general/auth/register - 検証:
- メール形式の検証
- 必須フィールドの検証(email, name, companyName)
- 会社名の長さ検証
ステップ2: 入力データの検証
- 説明: システムがすべての入力データを検証
- アクション:
- Laravel検証ルールを使用してメール形式をチェック
- 名前の長さと形式を検証
- 会社名の要件を検証
ステップ3: メールの重複チェック
- 説明: メールが既に登録されていないことを確認
- アクション:
- 既存メールのデータベースクエリ
- メールが既に存在する場合はエラーを返す
ステップ4: ユーザーアカウントの作成
- 説明: データベースに新しいユーザーレコードを作成
- アクション:
- パスワードのハッシュ化(該当する場合)
- 一意のユーザー識別子の生成
- アクティブステータスでユーザーデータを保存
ステップ5: デフォルトロールの割り当て
- 説明: ユーザーをデフォルトグループに適切なロールで割り当て
- アクション:
- グループメンバーシップレコードの作成
- デフォルトグループロールの割り当て(通常は「member」または「user」)
ステップ6: 成功レスポンスの返却
- 説明: クライアントに成功レスポンスを送信
- レスポンス:
- 成功:
201 Createdとユーザーデータ - ユーザーID、名前、メール、ステータスを含む
- 成功:
データベース関連テーブルとフィールド
erDiagram
users {
bigint id PK "主キー"
varchar name "ユーザーのフルネーム"
varchar email UK "ユーザーのメールアドレス(一意)"
varchar uid "Firebase UID(標準登録ではnull)"
varchar payment_provider_customer_id "決済プロバイダーの顧客ID"
tinyint status "ユーザーステータス(1: アクティブ, 0: 非アクティブ)"
varchar remember_token "Laravelリメンバートークン"
timestamp created_at "作成タイムスタンプ"
timestamp updated_at "最終更新タイムスタンプ"
timestamp deleted_at "ソフト削除タイムスタンプ"
boolean is_first_login "初回ログインフラグ"
}
groups {
bigint id PK "主キー"
varchar name "グループ名"
text description "グループの説明"
bigint created_by FK "グループを作成したユーザー"
timestamp created_at "作成タイムスタンプ"
timestamp updated_at "最終更新タイムスタンプ"
}
group_members {
bigint id PK "主キー"
bigint group_id FK "グループID"
bigint user_id FK "ユーザーID"
bigint group_role_id FK "グループ内のロールID"
timestamp created_at "作成タイムスタンプ"
timestamp updated_at "最終更新タイムスタンプ"
}
group_roles {
bigint id PK "主キー"
varchar name "ロール名"
text description "ロールの説明"
timestamp created_at "作成タイムスタンプ"
timestamp updated_at "最終更新タイムスタンプ"
}
users ||--o{ group_members : "持つ"
groups ||--o{ group_members : "含む"
group_roles ||--o{ group_members : "定義する"
users ||--o{ groups : "作成する"
APIエンドポイント
標準登録
- URL:
POST /api/v1/general/auth/register - ヘッダー:
Content-Type: application/json - ボディ:
{ "email": "user@example.com", "name": "John Doe", "companyName": "Example Corp" }
エラーハンドリング
| HTTPステータス | エラーコード | 説明 |
|---|---|---|
| 400 | VALIDATION_ERROR | 無効なメール形式、必須フィールドの不足 |
| 409 | EMAIL_ALREADY_EXISTS | メールアドレスは既に登録済み |
| 422 | UNPROCESSABLE_ENTITY | リクエストデータの検証エラー |
| 500 | INTERNAL_SERVER_ERROR | 登録プロセス中のサーバーエラー |
追加ノート
- 標準登録のみ: このエンドポイントはOAuthなしのメールベース登録専用
- メール検証: 適切なメール形式と一意性を確保
- 会社情報: ビジネスコンテキストとグループ管理に必要
- デフォルトロール: 新規ユーザーは自動的にデフォルトグループに割り当て
- OAuthなし: この登録方法はGoogle、Facebook、その他のOAuthプロバイダーを伴わない
- ステータス管理: 新規ユーザーはデフォルトでアクティブステータスで作成
- 初回ログイン追跡: ユーザーは初回ログイン体験のためにマーク
- パスワード管理: ユーザーは初回ログイン時にパスワードを設定するか、パスワードリセットを使用する必要