HouseholdInvitationModel.java
package com.hwhub.backend.domain.model;
import com.hwhub.backend.domain.enums.InvitationStatus;
import java.time.LocalDateTime;
import java.util.UUID;
import lombok.Data;
@Data
public class HouseholdInvitationModel {
private String invitationToken;
private Long householdId;
private String householdName;
private Long inviterUserId;
private String inviterName;
private String invitedEmail;
private String status;
private LocalDateTime expiresAt;
private Long acceptedUserId;
private String acceptedUserName;
private LocalDateTime createdAt;
/**
* 全プロパティを引数に取るコンストラクタ。
*
* @param invitationToken 招待トークン
* @param householdId 世帯ID
* @param householdName 世帯名
* @param inviterUserId 招待者ユーザID
* @param inviterName 招待者名
* @param invitedEmail 招待されたユーザのメールアドレス
* @param status 世帯メンバーステータス
* @param expiresAt 招待の有効期限
* @param acceptedUserId 招待を受けたユーザのユーザID
* @param acceptedUserName 招待を受けたユーザのユーザID
* @param createdAt 招待の作成日時
*/
private HouseholdInvitationModel(
String invitationToken,
Long householdId,
String householdName,
Long inviterUserId,
String inviterName,
String invitedEmail,
String status,
LocalDateTime expiresAt,
Long acceptedUserId,
String acceptedUserName,
LocalDateTime createdAt) {
this.invitationToken = invitationToken;
this.householdId = householdId;
this.householdName = householdName;
this.inviterUserId = inviterUserId;
this.inviterName = inviterName;
this.invitedEmail = invitedEmail;
this.status = status;
this.expiresAt = expiresAt;
this.acceptedUserId = acceptedUserId;
this.acceptedUserName = acceptedUserName;
this.createdAt = createdAt;
}
/**
* 再構築・永続化用。infrastructure層からのみ呼び出されることを想定。
*
* @param invitationToken 招待トークン
* @param householdId 世帯ID
* @param householdName 世帯名
* @param inviterUserId 招待者ユーザID
* @param inviterName 招待者名
* @param invitedEmail 招待されたユーザのメールアドレス
* @param status 世帯メンバーステータス
* @param expiresAt 招待の有効期限
* @param acceptedUserId 招待を受けたユーザのユーザID
* @param acceptedUserName 招待を受けたユーザのユーザID
* @param createdAt 招待の作成日時
* @return インスタンスを返す。
*/
public static HouseholdInvitationModel reconstruct(
String invitationToken,
Long householdId,
String householdName,
Long inviterUserId,
String inviterName,
String invitedEmail,
String status,
LocalDateTime expiresAt,
Long acceptedUserId,
String acceptedUserName,
LocalDateTime createdAt) {
return new HouseholdInvitationModel(
invitationToken,
householdId,
householdName,
inviterUserId,
inviterName,
invitedEmail,
status,
expiresAt,
acceptedUserId,
acceptedUserName,
createdAt);
}
public static HouseholdInvitationModel create(
Long householdId, Long inviterUserId, String invitedEmail) {
return new HouseholdInvitationModel(
UUID.randomUUID().toString(),
householdId,
null,
inviterUserId,
null,
invitedEmail,
InvitationStatus.PENDING.getCode(),
LocalDateTime.now().plusDays(7),
null,
null,
null);
}
public boolean isExpired() {
return expiresAt != null && expiresAt.isBefore(LocalDateTime.now());
}
public boolean isTerminal() {
InvitationStatus e = InvitationStatus.fromCode(this.status);
return e == InvitationStatus.ACCEPTED
|| e == InvitationStatus.DECLINED
|| e == InvitationStatus.REVOKED;
}
}