38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
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),
|
|
)
|