Files
OpenIsle/backend/src/main/java/com/openisle/service/PostReadService.java
2025-08-03 01:27:28 +08:00

50 lines
1.8 KiB
Java

package com.openisle.service;
import com.openisle.model.Post;
import com.openisle.model.PostRead;
import com.openisle.model.User;
import com.openisle.repository.PostReadRepository;
import com.openisle.repository.PostRepository;
import com.openisle.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
@RequiredArgsConstructor
public class PostReadService {
private final PostReadRepository postReadRepository;
private final UserRepository userRepository;
private final PostRepository postRepository;
public void recordRead(String username, Long postId) {
if (username == null) return;
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found"));
Post post = postRepository.findById(postId)
.orElseThrow(() -> new com.openisle.exception.NotFoundException("Post not found"));
postReadRepository.findByUserAndPost(user, post).ifPresentOrElse(pr -> {
pr.setLastReadAt(LocalDateTime.now());
postReadRepository.save(pr);
}, () -> {
PostRead pr = new PostRead();
pr.setUser(user);
pr.setPost(post);
pr.setLastReadAt(LocalDateTime.now());
postReadRepository.save(pr);
});
}
public long countReads(String username) {
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found"));
return postReadRepository.countByUser(user);
}
@org.springframework.transaction.annotation.Transactional
public void deleteByPost(Post post) {
postReadRepository.deleteByPost(post);
}
}