ユーザー登録

概要説明

ユーザー登録機能により、新規ユーザーはシステムでアカウントを作成できます。標準的なメールベースの登録を使用し、ユーザーデータの検証、ユーザーアカウントの作成、デフォルトロールの割り当て、および必要に応じてウェルカム通知の送信を行います。これは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プロバイダーを伴わない
  • ステータス管理: 新規ユーザーはデフォルトでアクティブステータスで作成
  • 初回ログイン追跡: ユーザーは初回ログイン体験のためにマーク
  • パスワード管理: ユーザーは初回ログイン時にパスワードを設定するか、パスワードリセットを使用する必要