UserPasswordResetModel.java
package com.hwhub.backend.domain.model;
import com.hwhub.backend.tool.Sha256Hasher;
import java.time.LocalDateTime;
import lombok.Getter;
@Getter
public class UserPasswordResetModel {
private static final int REQUEST_COUNT_INITIAL = 1;
private Long userPasswordResetId;
private Long userId;
private byte[] tokenHash;
private LocalDateTime expiresAt;
private LocalDateTime usedAt;
private LocalDateTime requestedAt;
private int requestCount;
/**
* 全プロパティを引数に取るコンストラクタ
*
* @param userPasswordResetId ID
* @param userId ユーザID
* @param tokenHash トークンハッシュ
* @param expiresAt 有効期限
* @param usedAt 使用済み日時
* @param requestedAt 要求日時
* @param requestCount 要求回数
*/
private UserPasswordResetModel(
Long userPasswordResetId,
Long userId,
byte[] tokenHash,
LocalDateTime expiresAt,
LocalDateTime usedAt,
LocalDateTime requestedAt,
int requestCount) {
this.userPasswordResetId = userPasswordResetId;
this.userId = userId;
this.tokenHash = tokenHash;
this.expiresAt = expiresAt;
this.usedAt = usedAt;
this.requestedAt = requestedAt;
this.requestCount = requestCount;
}
/**
* 再構築・永続化用。infrastructure層からのみ呼び出されることを想定。
*
* @param userPasswordResetId ID
* @param userId ユーザID
* @param tokenHash トークンハッシュ
* @param expiresAt 有効期限
* @param usedAt 使用済み日時
* @param requestedAt 要求日時
* @param requestCount 要求回数
* @return インスタンスを返す。
*/
public static UserPasswordResetModel reconstruct(
Long userPasswordResetId,
Long userId,
byte[] tokenHash,
LocalDateTime expiresAt,
LocalDateTime usedAt,
LocalDateTime requestedAt,
int requestCount) {
return new UserPasswordResetModel(
userPasswordResetId, userId, tokenHash, expiresAt, usedAt, requestedAt, requestCount);
}
/**
* 新規追加時のファクトリメソッド。
*
* @param userId ユーザID
* @param token トークン
* @param requestedAt 要求日時
* @param tokenTtlMinutes トークンの有効期間(分)
* @return インスタンスを返す。
*/
public static UserPasswordResetModel create(
Long userId, String token, LocalDateTime requestedAt, int tokenTtlMinutes) {
LocalDateTime expiresAt = requestedAt.plusMinutes(tokenTtlMinutes);
return new UserPasswordResetModel(
null, userId, hashToken(token), expiresAt, null, requestedAt, REQUEST_COUNT_INITIAL);
}
public static byte[] hashToken(String token) {
return Sha256Hasher.sha256(token);
}
}