UserModel.java

package com.hwhub.batch.domain.model;

import java.time.LocalDateTime;
import lombok.Getter;

@Getter
public class UserModel {
  private final Long userId;
  private final String email;
  private final String password;
  private final String passwordHash;
  private final LocalDateTime passwordChangedAt;
  private final String authProvider;
  private final String authProviderId;
  private final String displayName;
  private final String locale;
  private final String profileImageKey;
  private final String iconUrl;
  private final LocalDateTime emailVerifiedAt;
  private final boolean isActive;

  /**
   * 全プロパティを引数に取るコンストラクタ。
   *
   * @param userId ユーザID
   * @param email メールアドレス
   * @param password パスワード
   * @param passwordHash パスワードハッシュ
   * @param passwordChangedAt パスワード最終変更日時
   * @param authProvider 認証提供者
   * @param authProviderId 認証提供者ID
   * @param displayName 表示名
   * @param locale 利用言語
   * @param profileImageKey プロフィール画像ストレージキー
   * @param iconUrl アイコンのURL
   * @param emailVerifiedAt 認証完了日時
   * @param isActive 活性フラグ
   */
  private UserModel(
      Long userId,
      String email,
      String password,
      String passwordHash,
      LocalDateTime passwordChangedAt,
      String authProvider,
      String authProviderId,
      String displayName,
      String locale,
      String profileImageKey,
      String iconUrl,
      LocalDateTime emailVerifiedAt,
      boolean isActive) {
    this.userId = userId;
    this.email = email;
    this.password = password;
    this.passwordHash = passwordHash;
    this.passwordChangedAt = passwordChangedAt;
    this.authProvider = authProvider;
    this.authProviderId = authProviderId;
    this.displayName = displayName;
    this.locale = locale;
    this.profileImageKey = profileImageKey;
    this.iconUrl = iconUrl;
    this.emailVerifiedAt = emailVerifiedAt;
    this.isActive = isActive;
  }

  /**
   * 再構築・永続化用。infrastructure層からのみ呼び出されることを想定。
   *
   * @param userId ユーザID
   * @param email メールアドレス
   * @param passwordHash パスワードハッシュ
   * @param passwordChangedAt パスワード最終変更日時
   * @param authProvider 認証提供者
   * @param authProviderId 認証提供者ID
   * @param displayName 表示名
   * @param locale 利用言語
   * @param profileImageKey プロフィール画像ストレージキー
   * @param emailVerifiedAt 認証完了日時
   * @param isActive 活性フラグ
   * @return インスタンスを返す。
   */
  public static UserModel reconstruct(
      Long userId,
      String email,
      String passwordHash,
      LocalDateTime passwordChangedAt,
      String authProvider,
      String authProviderId,
      String displayName,
      String locale,
      String profileImageKey,
      LocalDateTime emailVerifiedAt,
      boolean isActive) {
    return new UserModel(
        userId,
        email,
        null,
        passwordHash,
        passwordChangedAt,
        authProvider,
        authProviderId,
        displayName,
        locale,
        profileImageKey,
        null,
        emailVerifiedAt,
        isActive);
  }
}