HouseworkTaskAssignmentHistModel.java

package com.hwhub.backend.domain.model;

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

@Getter
public class HouseworkTaskAssignmentHistModel {

  private final Long houseworkTaskAssignmentHistoryId;
  private final Long houseworkTaskId;
  private final Long householdId;
  private final Long fromAssigneeUserId;
  private final Long toAssigneeUserId;
  private final Long operatedUserId;
  private final String assignReasonType;
  private final String note;
  private final LocalDateTime changedAt;

  /**
   * 全プロパティを引数に取るコンストラクタ。
   *
   * @param houseworkTaskAssignmentHistoryId 家事タスク担当変更履歴ID
   * @param houseworkTaskId 家事タスクID
   * @param householdId 世帯ID
   * @param fromAssigneeUserId 変更前担当者ユーザID
   * @param toAssigneeUserId 変更後担当者ユーザID
   * @param operatedUserId 操作と行ったユーザID
   * @param assignReasonType 変更理由種別
   * @param note 備考・メモ
   * @param changedAt 変更日時
   */
  private HouseworkTaskAssignmentHistModel(
      Long houseworkTaskAssignmentHistoryId,
      Long houseworkTaskId,
      Long householdId,
      Long fromAssigneeUserId,
      Long toAssigneeUserId,
      Long operatedUserId,
      String assignReasonType,
      String note,
      LocalDateTime changedAt) {
    this.houseworkTaskAssignmentHistoryId = houseworkTaskAssignmentHistoryId;
    this.houseworkTaskId = houseworkTaskId;
    this.householdId = householdId;
    this.fromAssigneeUserId = fromAssigneeUserId;
    this.toAssigneeUserId = toAssigneeUserId;
    this.operatedUserId = operatedUserId;
    this.assignReasonType = assignReasonType;
    this.note = note;
    this.changedAt = changedAt;
  }

  /**
   * 新規追加時のファクトリメソッド。
   *
   * @param houseworkTaskId 家事タスクID
   * @param householdId 世帯ID
   * @param fromAssigneeUserId 変更前担当者ユーザID
   * @param toAssigneeUserId 変更後担当者ユーザID
   * @param operatedUserId 操作と行ったユーザID
   * @param assignReasonType 変更理由種別
   * @param note 備考・メモ
   * @param changedAt 変更日時
   * @return 家事タスク担当変更履歴IDがnullのインスタンスを返す。
   */
  public static HouseworkTaskAssignmentHistModel create(
      Long houseworkTaskId,
      Long householdId,
      Long fromAssigneeUserId,
      Long toAssigneeUserId,
      Long operatedUserId,
      String assignReasonType,
      String note,
      LocalDateTime changedAt) {
    return new HouseworkTaskAssignmentHistModel(
        null,
        houseworkTaskId,
        householdId,
        fromAssigneeUserId,
        toAssigneeUserId,
        operatedUserId,
        assignReasonType,
        note,
        changedAt);
  }

  /**
   * 再構築・永続化用。infrastructure層からのみ呼び出されることを想定。
   *
   * @param houseworkTaskAssignmentHistoryId 家事タスク担当変更履歴ID
   * @param houseworkTaskId 家事タスクID
   * @param householdId 世帯ID
   * @param fromAssigneeUserId 変更前担当者ユーザID
   * @param toAssigneeUserId 変更後担当者ユーザID
   * @param operatedUserId 操作と行ったユーザID
   * @param assignReasonType 変更理由種別
   * @param note 備考・メモ
   * @param changedAt 変更日時
   * @return インスタンスを返す。
   */
  public static HouseworkTaskAssignmentHistModel reconstruct(
      Long houseworkTaskAssignmentHistoryId,
      Long houseworkTaskId,
      Long householdId,
      Long fromAssigneeUserId,
      Long toAssigneeUserId,
      Long operatedUserId,
      String assignReasonType,
      String note,
      LocalDateTime changedAt) {
    return new HouseworkTaskAssignmentHistModel(
        houseworkTaskAssignmentHistoryId,
        houseworkTaskId,
        householdId,
        fromAssigneeUserId,
        toAssigneeUserId,
        operatedUserId,
        assignReasonType,
        note,
        changedAt);
  }
}