102 lines
4.1 KiB
Java
102 lines
4.1 KiB
Java
package cryptosky.me.tweets.service;
|
|
|
|
import cryptosky.me.tweets.models.entities.BtcTweetModel;
|
|
import cryptosky.me.tweets.models.repositories.BtcTweetRepository;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.time.DateTimeException;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalTime;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import java.util.stream.Collectors;
|
|
|
|
import static cryptosky.me.helpers.Utils.format;
|
|
|
|
@Service
|
|
public class BtcTweetService {
|
|
|
|
private final BtcTweetRepository btcTweetRepository;
|
|
|
|
public BtcTweetService(final BtcTweetRepository btcTweetRepository) {
|
|
this.btcTweetRepository = btcTweetRepository;
|
|
}
|
|
|
|
@Transactional
|
|
public BtcTweetModel createTweet(final String createdDate, final String rawTweet, final float sentimentScore,
|
|
final float positiveScore, final float neutralScore, final float negativeScore,
|
|
final float compoundScore ) {
|
|
|
|
final BtcTweetModel tweetModel = new BtcTweetModel();
|
|
tweetModel.setTimestamp(format(createdDate).toString());
|
|
tweetModel.setRawTweet(rawTweet);
|
|
tweetModel.setSentimentScore(sentimentScore);
|
|
tweetModel.setPositiveScore(positiveScore);
|
|
tweetModel.setNegativeScore(negativeScore);
|
|
tweetModel.setNeutralScore(neutralScore);
|
|
tweetModel.setCompoundScore(compoundScore);
|
|
|
|
return this.btcTweetRepository.save(tweetModel);
|
|
}
|
|
|
|
@Transactional(readOnly = true)
|
|
public Optional<BtcTweetModel> getCurrentTweet() {
|
|
return this.btcTweetRepository.findAll().stream().findFirst();
|
|
}
|
|
|
|
@Transactional(readOnly = true)
|
|
public List<BtcTweetModel> getAllTweets( final int count ) {
|
|
return this.btcTweetRepository.findAll().stream()
|
|
.limit(count)
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
@Transactional(readOnly = true)
|
|
public List<BtcTweetModel> getTweetsForDay( final String startDate, final String endDate ) {
|
|
LocalDateTime r_start = format(startDate);
|
|
LocalDateTime r_end = format(endDate);
|
|
|
|
r_start = r_start.toLocalDate().atStartOfDay();
|
|
r_end = r_end.toLocalDate().atTime(LocalTime.MAX);
|
|
|
|
if ( r_end.isAfter(r_start) ) {
|
|
if ( r_end.equals(r_start.toLocalDate().atTime(LocalTime.MAX))) {
|
|
LocalDateTime finalR_end = r_end;
|
|
LocalDateTime finalR_start = r_start;
|
|
return this.btcTweetRepository.findAll().stream()
|
|
.filter(createdDateList -> format(createdDateList.getTimestamp()).isBefore(finalR_end))
|
|
.filter(createdDateList -> format(createdDateList.getTimestamp()).isAfter(finalR_start))
|
|
.collect(Collectors.toList());
|
|
} else {
|
|
// Logger
|
|
throw new DateTimeException(r_start +" and "+ r_end +" are not on the same day");
|
|
}
|
|
} else {
|
|
// Logger
|
|
throw new DateTimeException("End Date "+ r_end +" is not after "+ r_start);
|
|
}
|
|
}
|
|
|
|
@Transactional(readOnly = true)
|
|
public List<BtcTweetModel> getTweetsForPeriod( final String startDate, final String endDate ) {
|
|
LocalDateTime r_start = format(startDate);
|
|
LocalDateTime r_end = format(endDate);
|
|
|
|
r_start = r_start.toLocalDate().atStartOfDay();
|
|
r_end = r_end.toLocalDate().atTime(LocalTime.MAX);
|
|
|
|
if ( r_end.isAfter(r_start) ) {
|
|
LocalDateTime finalR_end = r_end;
|
|
LocalDateTime finalR_start = r_start;
|
|
return this.btcTweetRepository.findAll().stream()
|
|
.filter(createdDateList -> format(createdDateList.getTimestamp()).isBefore(finalR_end))
|
|
.filter(createdDateList -> format(createdDateList.getTimestamp()).isAfter(finalR_start))
|
|
.collect(Collectors.toList());
|
|
} else {
|
|
// Logger
|
|
throw new DateTimeException("End Date "+ r_end +" is not after "+ r_start);
|
|
}
|
|
}
|
|
}
|