UserEmailVerificationModel.java
package com.hwhub.backend.domain.model;
import com.hwhub.backend.tool.Sha256Hasher;
import java.time.LocalDateTime;
import lombok.Getter;
@Getter
public class UserEmailVerificationModel {
private static final int REQUEST_COUNT_INITIAL = 1;
private Long userEmailVerificationId;
private Long userId;
private byte[] tokenHash;
private LocalDateTime expiresAt;
private LocalDateTime usedAt;
private LocalDateTime requestedAt;
private int requestCount;
/**
* 全プロパティを引数に取るコンストラクタ
*
* @param userEmailVerificationId ID
* @param userId ユーザID
* @param expiresAt 有効期限
* @param usedAt 使用日時
* @param requestedAt 請求日時
* @param requestCount 請求回数
*/
private UserEmailVerificationModel(
Long userEmailVerificationId,
Long userId,
byte[] tokenHash,
LocalDateTime expiresAt,
LocalDateTime usedAt,
LocalDateTime requestedAt,
int requestCount) {
this.userEmailVerificationId = userEmailVerificationId;
this.userId = userId;
this.tokenHash = tokenHash;
this.expiresAt = expiresAt;
this.usedAt = usedAt;
this.requestedAt = requestedAt;
this.requestCount = requestCount;
}
/**
* 再構築・永続化用。infrastructure層からのみ呼び出されることを想定。
*
* @param userEmailVerificationId ID
* @param userId ユーザID
* @param expiresAt 有効期限
* @param usedAt 使用日時
* @param requestedAt 請求日時
* @param requestCount 請求回数
* @return
*/
public static UserEmailVerificationModel reconstruct(
Long userEmailVerificationId,
Long userId,
byte[] tokenHash,
LocalDateTime expiresAt,
LocalDateTime usedAt,
LocalDateTime requestedAt,
int requestCount) {
return new UserEmailVerificationModel(
userEmailVerificationId, userId, tokenHash, expiresAt, usedAt, requestedAt, requestCount);
}
/**
* ユーザメール認証を生成する。
*
* @param userId ユーザID
* @param tokenTtlMinutes トークンのTTL
* @return
*/
public static UserEmailVerificationModel create(
Long userId, String token, LocalDateTime requestedAt, int tokenTtlMinutes) {
LocalDateTime expiresAt = requestedAt.plusMinutes(tokenTtlMinutes);
return new UserEmailVerificationModel(
null, userId, hashToken(token), expiresAt, null, requestedAt, REQUEST_COUNT_INITIAL);
}
public static byte[] hashToken(String token) {
return Sha256Hasher.sha256(token);
}
}