db-gateway/src/main/java/cryptosky/me/tweets/service/BtcTweetService.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);
}
}
}