package io.kaif.service;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nullable;
import io.kaif.flake.FlakeId;
import io.kaif.model.account.Authorization;
import io.kaif.model.article.Article;
import io.kaif.model.debate.Debate;
import io.kaif.model.debate.DebateTree;
import io.kaif.model.zone.Zone;
public interface ArticleService {
Article createExternalLink(Authorization author, Zone zone, String title, String link);
List<Article> listLatestZoneArticles(Zone zone, @Nullable FlakeId startArticleId);
Article loadArticle(FlakeId articleId);
Optional<Article> findArticle(FlakeId articleId);
Debate debate(FlakeId articleId,
@Nullable FlakeId parentDebateId,
Authorization debater,
String content);
DebateTree listBestDebates(FlakeId articleId, @Nullable FlakeId parentDebateId);
List<Article> listHotZoneArticles(Zone zone, FlakeId startArticleId);
List<Article> listLatestArticles(@Nullable FlakeId startArticleId);
List<Article> listRssHotZoneArticlesWithCache(Zone zone);
List<Article> listRssTopArticlesWithCache();
List<Article> listTopArticles(@Nullable FlakeId startArticleId);
String loadEditableDebateContent(FlakeId debateId, Authorization editor);
String updateDebateContent(FlakeId debateId, Authorization editor, String content);
Debate loadDebateWithoutCache(FlakeId debateId);
boolean canCreateArticle(Zone zone, Authorization author);
Article createSpeak(Authorization authorization, Zone zone, String title, String content);
Debate loadDebateWithCache(FlakeId debateId);
List<Debate> listReplyToDebates(Authorization authorization, @Nullable FlakeId startDebateId);
List<Debate> listLatestDebates(@Nullable FlakeId startDebateId);
List<Debate> listLatestZoneDebates(Zone zone, @Nullable FlakeId startDebateId);
List<Article> listArticlesByDebatesWithCache(List<FlakeId> debateIds);
List<Debate> listDebatesByIdWithCache(List<FlakeId> debateIds);
List<Article> listArticlesByAuthor(String username, @Nullable FlakeId startArticleId);
List<Debate> listDebatesByDebater(String username, @Nullable FlakeId startDebateId);
boolean isExternalLinkExist(Zone zone, String externalLink);
List<Article> listArticlesByExternalLink(Zone zone, String externalLink);
void deleteArticle(Authorization authorization, FlakeId articleId);
boolean canDeleteArticle(String username, FlakeId articleId);
}