package io.kaif.service.impl;
import java.time.Instant;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import io.kaif.flake.FlakeId;
import io.kaif.model.account.Authorization;
import io.kaif.model.feed.FeedAsset;
import io.kaif.model.feed.FeedAssetDao;
import io.kaif.model.feed.NewsFeed;
import io.kaif.service.FeedService;
@Service
public class FeedServiceImpl implements FeedService {
private static final int FEED_PAGE_SIZE = 25;
@Autowired
private FeedAssetDao feedAssetDao;
@Override
public FeedAsset createReplyFeed(FlakeId debateId, UUID replyToAccountId) {
return feedAssetDao.insertFeed(FeedAsset.createReply(debateId,
replyToAccountId,
Instant.now()));
}
@Override
public List<FeedAsset> listFeeds(Authorization authorization, FlakeId startAssetId) {
return feedAssetDao.listFeedsDesc(authorization.authenticatedId(),
startAssetId,
FEED_PAGE_SIZE);
}
@Override
public void acknowledge(Authorization authorization, FlakeId assetId) {
feedAssetDao.acknowledge(authorization.authenticatedId(), assetId);
}
@Override
public int countUnread(Authorization authorization) {
List<FeedAsset> recent = feedAssetDao.listFeedsDesc(authorization.authenticatedId(),
null,
NewsFeed.MAX_UNREAD_COUNT);
return recent.stream()
.filter(FeedAsset::isAcked)
.findFirst()
.map(recent::indexOf)
.orElse(recent.size());
}
}