from typing import Optional from fastapi import APIRouter, Depends from app.api.dependencies.authentication import get_current_user_authorizer from app.api.dependencies.database import get_repository from app.db.repositories.articles import ArticlesRepository from app.db.repositories.home_featured import HomeFeaturedRepository from app.models.domain.users import User from app.models.schemas.articles import ArticleForResponse, ListOfArticlesInResponse router = APIRouter() @router.get( "/home-featured-articles", response_model=ListOfArticlesInResponse, name="home-featured:list", ) async def list_home_featured_articles( user: Optional[User] = Depends(get_current_user_authorizer(required=False)), home_repo: HomeFeaturedRepository = Depends(get_repository(HomeFeaturedRepository)), articles_repo: ArticlesRepository = Depends(get_repository(ArticlesRepository)), ) -> ListOfArticlesInResponse: slugs = await home_repo.list_slugs() articles = await articles_repo.list_articles_by_slugs( slugs=slugs, requested_user=user, ) articles_for_response = [ ArticleForResponse.from_orm(article) for article in articles ] return ListOfArticlesInResponse( articles=articles_for_response, articles_count=len(articles_for_response), )