package shop.alien.gateway.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import shop.alien.entity.second.LifeUserLog;
import shop.alien.gateway.mapper.LifeUserLogGatewayMapper;

import java.util.List;

/**
 * 用户登录日志事务处理服务
 * 独立的事务服务类，用于处理需要新事务的数据库操作
 * 解决同类方法调用时 Spring AOP 代理不生效的问题
 *
 * @author alien-cloud
 * @since 2024-01-01
 */
@Service
@RequiredArgsConstructor
public class LifeUserLogTransactionService {

    private final LifeUserLogGatewayMapper lifeUserLogMapper;

    /**
     * 在新事务中插入用户登录日志
     * 使用 REQUIRES_NEW 确保插入操作立即提交，便于后续查询
     *
     * @param lifeUserLog 用户登录日志对象
     * @return int 插入成功的记录数
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public int insertLifeUserLog(LifeUserLog lifeUserLog) {
        return lifeUserLogMapper.insert(lifeUserLog);
    }

    /**
     * 在新事务中查询指定时间段内的用户登录日志
     * 使用 REQUIRES_NEW 确保能读取到已提交的最新数据
     *
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param macIp MAC地址/IP
     * @return List<LifeUserLog> 用户登录日志列表
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
    public List<LifeUserLog> getLifeUserLogByDate(String startDate, String endDate, String macIp) {
        return lifeUserLogMapper.getLifeUserLogByDate(startDate, endDate, macIp);
    }
}

