package com.seer.teach.common.cache.dto;

import com.seer.teach.common.dto.mq.dto.UserCacheDTO;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.time.Duration;

/**
 * L1缓存数据传输对象
 * <p>
 * 用于表示一级缓存中的用户数据，包含用户缓存信息和过期时间。
 * 提供创建缓存对象和检查过期状态的功能。
 * </p>
 *
 * @author Captain
 * @since 2025-08-16 18:04
 */
@Data
@AllArgsConstructor
public class L1CacheDTO {

    private UserCacheDTO value;

    private long expireAt;

    /**
     * 创建L1缓存对象
     *
     * @param dto 用户缓存数据传输对象
     * @param ttl 缓存有效期时长
     * @return L1缓存对象
     */
    public static L1CacheDTO of(UserCacheDTO dto, Duration ttl) {
        long exp = System.currentTimeMillis() + (ttl == null ? 0 : ttl.toMillis());
        return new L1CacheDTO(dto, exp);
    }

    /**
     * 判断缓存是否已过期
     *
     * @return true表示已过期，false表示未过期
     */
    public boolean isExpired() {
        return System.currentTimeMillis() > expireAt;
    }
}
