@RequiredArgsConstructor
@Service
public class PostService {
private final TimeGenerator timeGenerator; // 시간 값을 다루는 객체
...
@Transactional
public Long refreshTime(Long postId, Long memberId) {
Post post = postRepository.getById(postId);
post.validateOwnerShip(memberId));
// 기존에는 인수에 LocalDateTime.now()가 들어갔었습니다.
post.changeRefreshedAt(timeGenerator.getCurrentTime());
...
}
}
@Entity
@Table(name = "posts")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Post extends BaseEntity {
...
@Column(name = "refreshed_at", columnDefinition = "TIMESTAMP")
private LocalDateTime refreshedAt;
...
// 끌어올리기 시간을 변경하는 메서드
public void changeRefreshedAt(LocalDateTime refreshedAt) {
Assert.notNull(refreshedAt, "refreshedAt은 null이 될 수 없습니다.");
checkRefreshedAt(refreshedAt);
this.refreshedAt = refreshedAt;
}
// 비즈니스 조건 확인하는 메서드
private void checkRefreshedAt(LocalDateTime inputTime) {
...
}
}
@Component
public class TimeGeneratorImpl implements TimeGenerator {
@Override
public LocalDateTime getCurrentTime() {
return LocalDateTime.now();
}
}