package com.gcsc.guide.service; import com.gcsc.guide.dto.LoginHistoryResponse; import com.gcsc.guide.entity.LoginHistory; import com.gcsc.guide.entity.PageView; import com.gcsc.guide.entity.User; import com.gcsc.guide.exception.ResourceNotFoundException; import com.gcsc.guide.repository.LoginHistoryRepository; import com.gcsc.guide.repository.PageViewRepository; import com.gcsc.guide.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @RequiredArgsConstructor public class ActivityService { private final LoginHistoryRepository loginHistoryRepository; private final PageViewRepository pageViewRepository; private final UserRepository userRepository; @Transactional public void recordLogin(Long userId, String ipAddress, String userAgent) { User user = userRepository.findById(userId) .orElseThrow(() -> new ResourceNotFoundException("사용자", userId)); loginHistoryRepository.save(new LoginHistory(user, ipAddress, userAgent)); } @Transactional public void trackPageView(Long userId, String pagePath) { User user = userRepository.findById(userId) .orElseThrow(() -> new ResourceNotFoundException("사용자", userId)); pageViewRepository.save(new PageView(user, pagePath)); } @Transactional(readOnly = true) public List getLoginHistory(Long userId) { return loginHistoryRepository.findByUserIdOrderByLoginAtDesc(userId).stream() .map(LoginHistoryResponse::from) .toList(); } }