1+ from typing import List
2+
13from fastapi import APIRouter , HTTPException , Request , status
24from pydantic import BaseModel
35
46from app .schemas import Library as LibrarySchema
7+ from app .schemas import LibraryNews
58from app .schemas import Subscription as SubscriptionSchema
69from app .services .database .models import Library , Subscription
710from app .services .database .orm .library import (
11+ get_libraries_by_language ,
812 get_library_ids_by_multiple_names ,
913 insert_library ,
1014)
@@ -22,6 +26,36 @@ class SubscribeLibraryResponse(BaseModel):
2226def setup ():
2327 router = APIRouter (prefix = "/libraries" , tags = ["libraries" ])
2428
29+ @router .get (
30+ "" ,
31+ response_model = List [LibrarySchema ],
32+ status_code = status .HTTP_200_OK ,
33+ summary = "Get libraries by language" ,
34+ description = "Get libraries by language" ,
35+ )
36+ async def get_by_language (request : Request , language : str ):
37+ libraryList = await get_libraries_by_language (
38+ language = language , session = request .app .db_session_factory
39+ )
40+ return [
41+ LibrarySchema (
42+ library_name = libraryDb .library_name ,
43+ news = [
44+ LibraryNews (
45+ tag = news ["tag" ], description = news ["description" ]
46+ )
47+ for news in libraryDb .news
48+ ],
49+ logo = libraryDb .logo ,
50+ version = libraryDb .version ,
51+ release_date = libraryDb .release_date ,
52+ releases_doc_url = libraryDb .releases_doc_url ,
53+ fixed_release_url = libraryDb .fixed_release_url ,
54+ language = libraryDb .language ,
55+ )
56+ for libraryDb in libraryList
57+ ]
58+
2559 @router .post (
2660 "" ,
2761 response_model = LibraryResponse ,
@@ -35,12 +69,13 @@ async def create_library(
3569 ):
3670 library = Library (
3771 library_name = body .library_name ,
38- user_email = "" , # TODO: Considerar obter o email do usuário autenticado
39- logo = body .logo . encoded_string () ,
72+ news = [ news . model_dump () for news in body . news ],
73+ logo = body .logo ,
4074 version = body .version ,
4175 release_date = body .release_date ,
42- releases_doc_url = body .releases_doc_url .encoded_string (),
43- fixed_release_url = body .fixed_release_url .encoded_string (),
76+ releases_doc_url = body .releases_doc_url ,
77+ fixed_release_url = body .fixed_release_url ,
78+ language = body .language ,
4479 )
4580 try :
4681 await insert_library (library , request .app .db_session_factory )
0 commit comments