diff --git a/app/main.py b/app/main.py index 5c49a7e..6068ae7 100644 --- a/app/main.py +++ b/app/main.py @@ -9,10 +9,8 @@ LoggingMiddleware, ) from app.router.generate_simple_article_router import simple_article_router -from app.router.newsletter_article_crud_router import newsletter_article_router -from app.router.send_email_service_router import send_email_service_router -from app.router.subscription_crud_router import subscription_router from app.router.user_type_router import user_type_router +from app.router.send_email_service_router import send_email_service_router from app.service.news_scheduling_service import schedule_task app = FastAPI() @@ -30,11 +28,9 @@ async def startup_event(): app.add_middleware(LoggingMiddleware) # routers -app.include_router(subscription_router) -app.include_router(newsletter_article_router) -app.include_router(send_email_service_router) app.include_router(user_type_router) app.include_router(simple_article_router) +app.include_router(send_email_service_router) # exception handlers app.add_exception_handler(Exception, exception_handler) diff --git a/app/router/newsletter_article_crud_router.py b/app/router/newsletter_article_crud_router.py index 775f57c..45d2569 100644 --- a/app/router/newsletter_article_crud_router.py +++ b/app/router/newsletter_article_crud_router.py @@ -1,117 +1,117 @@ # newsletter_article_crud_router.py - -from datetime import datetime -from typing import List - -from fastapi import APIRouter, Depends -from pydantic import BaseModel -from sqlalchemy.ext.asyncio import AsyncSession - -from app.database.session import get_db_session -from app.model.newsletter_article import NewsletterArticle -from app.model.subscription import MailTypeCategory -from app.service.newsletter_article_service import ( - NewsletterService, - generate_newsletter_article, -) -from app.utils.generic_response import GenericResponseDTO - -newsletter_article_router = APIRouter() - - -class NewsletterArticleResponseDTO(BaseModel): - category: str - content: str - updated_at: datetime - - -async def newsletter_to_dto(newsletter_article: NewsletterArticle): - return NewsletterArticleResponseDTO( - category=newsletter_article.category, - content=newsletter_article.content, - updated_at=newsletter_article.updated_at, - ) - - -async def list_to_dto_list(newsletter_article: List[NewsletterArticle]): - return [await newsletter_to_dto(article) for article in newsletter_article] - - -@newsletter_article_router.post( - "/newsletter_article/save", response_model=GenericResponseDTO[int] -) -async def create_manager( - category: MailTypeCategory, - content: str, - session: AsyncSession = Depends(get_db_session), -): - newsletter_article = await NewsletterService().create_article( - category, content, session - ) - return GenericResponseDTO[int]( - data=newsletter_article.id, message="Successfully Done", result=True - ) - - -@newsletter_article_router.get( - "/newsletter_article/{id}", - response_model=GenericResponseDTO[NewsletterArticleResponseDTO], -) -async def get_content_by_id(id: int, session: AsyncSession = Depends(get_db_session)): - newsletter_article = await NewsletterService().get_content_by_id(id, session) - return GenericResponseDTO[NewsletterArticleResponseDTO]( - data=await newsletter_to_dto(newsletter_article), - message="Successfully Done", - result=True, - ) - - -@newsletter_article_router.get( - "/newsletter_article", - response_model=GenericResponseDTO[List[NewsletterArticleResponseDTO]], -) -async def get_all(session: AsyncSession = Depends(get_db_session)): - newsletter_article = await NewsletterService().get_all_contents(session) - dummy = await list_to_dto_list(newsletter_article) - return GenericResponseDTO[List[NewsletterArticleResponseDTO]]( - data=dummy, message="Successfully Done", result=True - ) - - -@newsletter_article_router.get( - "/newsletter_article/search/{category}", - response_model=GenericResponseDTO[List[NewsletterArticleResponseDTO]], -) -async def get_content_by_category( - category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) -): - newsletter_article = await NewsletterService().get_content_by_category( - category, session - ) - newsletter_article_dto = await list_to_dto_list(newsletter_article) - return GenericResponseDTO[List[NewsletterArticleResponseDTO]]( - data=newsletter_article_dto, message="Successfully Done", result=True - ) - - -@newsletter_article_router.put( - "/newsletter_article/update", response_model=GenericResponseDTO[int] -) -async def update_content_by_id( - id: int, - category: MailTypeCategory, - content: str, - session: AsyncSession = Depends(get_db_session), -): - newsletter_article = await NewsletterService().update_content( - id, category, content, session - ) - return GenericResponseDTO[int]( - data=newsletter_article.id, message="Successfully Done", result=True - ) - - -@newsletter_article_router.post("/newsletter_article/test") -async def ai_client_test(session: AsyncSession = Depends(get_db_session)): - newsletter_article = await generate_newsletter_article(session) - return newsletter_article +# +# from datetime import datetime +# from typing import List +# +# from fastapi import APIRouter, Depends +# from pydantic import BaseModel +# from sqlalchemy.ext.asyncio import AsyncSession +# +# from app.database.session import get_db_session +# from app.model.newsletter_article import NewsletterArticle +# from app.model.subscription import MailTypeCategory +# from app.service.newsletter_article_service import ( +# NewsletterService, +# generate_newsletter_article, +# ) +# from app.utils.generic_response import GenericResponseDTO +# +# newsletter_article_router = APIRouter() +# +# +# class NewsletterArticleResponseDTO(BaseModel): +# category: str +# content: str +# updated_at: datetime +# +# +# async def newsletter_to_dto(newsletter_article: NewsletterArticle): +# return NewsletterArticleResponseDTO( +# category=newsletter_article.category, +# content=newsletter_article.content, +# updated_at=newsletter_article.updated_at, +# ) +# +# +# async def list_to_dto_list(newsletter_article: List[NewsletterArticle]): +# return [await newsletter_to_dto(article) for article in newsletter_article] + + +# @newsletter_article_router.post( +# "/newsletter_article/save", response_model=GenericResponseDTO[int] +# ) +# async def create_manager( +# category: MailTypeCategory, +# content: str, +# session: AsyncSession = Depends(get_db_session), +# ): +# newsletter_article = await NewsletterService().create_article( +# category, content, session +# ) +# return GenericResponseDTO[int]( +# data=newsletter_article.id, message="Successfully Done", result=True +# ) + + +# @newsletter_article_router.get( +# "/newsletter_article/{id}", +# response_model=GenericResponseDTO[NewsletterArticleResponseDTO], +# ) +# async def get_content_by_id(id: int, session: AsyncSession = Depends(get_db_session)): +# newsletter_article = await NewsletterService().get_content_by_id(id, session) +# return GenericResponseDTO[NewsletterArticleResponseDTO]( +# data=await newsletter_to_dto(newsletter_article), +# message="Successfully Done", +# result=True, +# ) + + +# @newsletter_article_router.get( +# "/newsletter_article", +# response_model=GenericResponseDTO[List[NewsletterArticleResponseDTO]], +# ) +# async def get_all(session: AsyncSession = Depends(get_db_session)): +# newsletter_article = await NewsletterService().get_all_contents(session) +# dummy = await list_to_dto_list(newsletter_article) +# return GenericResponseDTO[List[NewsletterArticleResponseDTO]]( +# data=dummy, message="Successfully Done", result=True +# ) + + +# @newsletter_article_router.get( +# "/newsletter_article/search/{category}", +# response_model=GenericResponseDTO[List[NewsletterArticleResponseDTO]], +# ) +# async def get_content_by_category( +# category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) +# ): +# newsletter_article = await NewsletterService().get_content_by_category( +# category, session +# ) +# newsletter_article_dto = await list_to_dto_list(newsletter_article) +# return GenericResponseDTO[List[NewsletterArticleResponseDTO]]( +# data=newsletter_article_dto, message="Successfully Done", result=True +# ) + + +# @newsletter_article_router.put( +# "/newsletter_article/update", response_model=GenericResponseDTO[int] +# ) +# async def update_content_by_id( +# id: int, +# category: MailTypeCategory, +# content: str, +# session: AsyncSession = Depends(get_db_session), +# ): +# newsletter_article = await NewsletterService().update_content( +# id, category, content, session +# ) +# return GenericResponseDTO[int]( +# data=newsletter_article.id, message="Successfully Done", result=True +# ) + + +# @newsletter_article_router.post("/newsletter_article/test") +# async def ai_client_test(session: AsyncSession = Depends(get_db_session)): +# newsletter_article = await generate_newsletter_article(session) +# return newsletter_article diff --git a/app/router/subscription_crud_router.py b/app/router/subscription_crud_router.py index 4f974fb..16ee78e 100644 --- a/app/router/subscription_crud_router.py +++ b/app/router/subscription_crud_router.py @@ -1,128 +1,128 @@ -import asyncio -from typing import List - -from fastapi import APIRouter, Depends -from pydantic import BaseModel -from sqlalchemy.ext.asyncio import AsyncSession - -from app.database.session import get_db_session -from app.model.subscription import MailTypeCategory, Subscription -from app.service.subscription_service import SubscriptionService -from app.utils.generic_response import GenericResponseDTO - -subscription_router = APIRouter() - - -class SubcriptionResponseDTO(BaseModel): - name: str - email_address: str - category: str - status: bool - - -async def subcription_to_subscriptionResponseDTO(subscription: Subscription): - return SubcriptionResponseDTO( - name=subscription.name, - email_address=subscription.email_address, - category=subscription.category, - status=subscription.status, - ) - - -async def subcription_list_to_subscriptionResponseDTO_list( - subscriptions: List[Subscription], -): - return await asyncio.gather( - *( - subcription_to_subscriptionResponseDTO(subscription) - for subscription in subscriptions - ) - ) - - -@subscription_router.post("/subscriptions/save", response_model=GenericResponseDTO[int]) -async def create_subscription( - name: str, - email_address: str, - category: MailTypeCategory, - session: AsyncSession = Depends(get_db_session), -): - subscription = await SubscriptionService().create_subscription( - name, email_address, category, session - ) - return GenericResponseDTO[int]( - data=subscription.id, message="Subscription created successfully", result=True - ) - - -@subscription_router.get( - "/subscriptions/{id}", response_model=GenericResponseDTO[SubcriptionResponseDTO] -) -async def get_subscription_by_id( - id: int, session: AsyncSession = Depends(get_db_session) -): - subscription = await SubscriptionService().get_subscription_by_id(id, session) - return GenericResponseDTO[SubcriptionResponseDTO]( - data=await subcription_to_subscriptionResponseDTO(subscription), - message="Subscription retrieved successfully", - result=True, - ) - - -@subscription_router.post( - "/subscriptions/{id}/status", - response_model=GenericResponseDTO[SubcriptionResponseDTO], -) -async def update_status( - id: int, status: bool, session: AsyncSession = Depends(get_db_session) -): - subscription = await SubscriptionService().update_status(id, status, session) - return GenericResponseDTO[SubcriptionResponseDTO]( - data=await subcription_to_subscriptionResponseDTO(subscription), - message="Subscription Status Updated successfully", - result=True, - ) - - -@subscription_router.get( - "/subscriptions/category/{category}", - response_model=GenericResponseDTO[List[SubcriptionResponseDTO]], -) -async def get_active_subscriptions_by_category( - category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) -): - subscriptions = await SubscriptionService().get_active_subcriptions_by_category( - category, session - ) - return GenericResponseDTO[List[SubcriptionResponseDTO]]( - data=await subcription_list_to_subscriptionResponseDTO_list(subscriptions), - message="Subscriptions retrieved successfully", - result=True, - ) - - -@subscription_router.post( - "/subscriptions/{id}/category", - response_model=GenericResponseDTO[SubcriptionResponseDTO], -) -async def update_category( - id: int, category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) -): - subscription = await SubscriptionService().update_category(id, category, session) - return GenericResponseDTO[SubcriptionResponseDTO]( - data=await subcription_to_subscriptionResponseDTO(subscription), - message="Subscription Category Updated successfully", - result=True, - ) - - -@subscription_router.get( - "/subscriptions", response_model=GenericResponseDTO[List[SubcriptionResponseDTO]] -) -async def get_all_subscriptions(session: AsyncSession = Depends(get_db_session)): - subscriptions = await SubscriptionService().get_all_subcriptions(session) - return GenericResponseDTO[List[SubcriptionResponseDTO]]( - data=await subcription_list_to_subscriptionResponseDTO_list(subscriptions), - message="Subscriptions retrieved successfully", - result=True, - ) +# import asyncio +# from typing import List +# +# from fastapi import APIRouter, Depends +# from pydantic import BaseModel +# from sqlalchemy.ext.asyncio import AsyncSession +# +# from app.database.session import get_db_session +# from app.model.subscription import MailTypeCategory, Subscription +# from app.service.subscription_service import SubscriptionService +# from app.utils.generic_response import GenericResponseDTO +# +# subscription_router = APIRouter() +# +# +# class SubcriptionResponseDTO(BaseModel): +# name: str +# email_address: str +# category: str +# status: bool +# +# +# async def subcription_to_subscriptionResponseDTO(subscription: Subscription): +# return SubcriptionResponseDTO( +# name=subscription.name, +# email_address=subscription.email_address, +# category=subscription.category, +# status=subscription.status, +# ) +# +# +# async def subcription_list_to_subscriptionResponseDTO_list( +# subscriptions: List[Subscription], +# ): +# return await asyncio.gather( +# *( +# subcription_to_subscriptionResponseDTO(subscription) +# for subscription in subscriptions +# ) +# ) + + +# @subscription_router.post("/subscriptions/save", response_model=GenericResponseDTO[int]) +# async def create_subscription( +# name: str, +# email_address: str, +# category: MailTypeCategory, +# session: AsyncSession = Depends(get_db_session), +# ): +# subscription = await SubscriptionService().create_subscription( +# name, email_address, category, session +# ) +# return GenericResponseDTO[int]( +# data=subscription.id, message="Subscription created successfully", result=True +# ) + + +# @subscription_router.get( +# "/subscriptions/{id}", response_model=GenericResponseDTO[SubcriptionResponseDTO] +# ) +# async def get_subscription_by_id( +# id: int, session: AsyncSession = Depends(get_db_session) +# ): +# subscription = await SubscriptionService().get_subscription_by_id(id, session) +# return GenericResponseDTO[SubcriptionResponseDTO]( +# data=await subcription_to_subscriptionResponseDTO(subscription), +# message="Subscription retrieved successfully", +# result=True, +# ) + + +# @subscription_router.post( +# "/subscriptions/{id}/status", +# response_model=GenericResponseDTO[SubcriptionResponseDTO], +# ) +# async def update_status( +# id: int, status: bool, session: AsyncSession = Depends(get_db_session) +# ): +# subscription = await SubscriptionService().update_status(id, status, session) +# return GenericResponseDTO[SubcriptionResponseDTO]( +# data=await subcription_to_subscriptionResponseDTO(subscription), +# message="Subscription Status Updated successfully", +# result=True, +# ) + + +# @subscription_router.get( +# "/subscriptions/category/{category}", +# response_model=GenericResponseDTO[List[SubcriptionResponseDTO]], +# ) +# async def get_active_subscriptions_by_category( +# category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) +# ): +# subscriptions = await SubscriptionService().get_active_subcriptions_by_category( +# category, session +# ) +# return GenericResponseDTO[List[SubcriptionResponseDTO]]( +# data=await subcription_list_to_subscriptionResponseDTO_list(subscriptions), +# message="Subscriptions retrieved successfully", +# result=True, +# ) + + +# @subscription_router.post( +# "/subscriptions/{id}/category", +# response_model=GenericResponseDTO[SubcriptionResponseDTO], +# ) +# async def update_category( +# id: int, category: MailTypeCategory, session: AsyncSession = Depends(get_db_session) +# ): +# subscription = await SubscriptionService().update_category(id, category, session) +# return GenericResponseDTO[SubcriptionResponseDTO]( +# data=await subcription_to_subscriptionResponseDTO(subscription), +# message="Subscription Category Updated successfully", +# result=True, +# ) + + +# @subscription_router.get( +# "/subscriptions", response_model=GenericResponseDTO[List[SubcriptionResponseDTO]] +# ) +# async def get_all_subscriptions(session: AsyncSession = Depends(get_db_session)): +# subscriptions = await SubscriptionService().get_all_subcriptions(session) +# return GenericResponseDTO[List[SubcriptionResponseDTO]]( +# data=await subcription_list_to_subscriptionResponseDTO_list(subscriptions), +# message="Subscriptions retrieved successfully", +# result=True, +# ) diff --git a/app/router/user_type_router.py b/app/router/user_type_router.py index fd1ea85..1f08ee4 100644 --- a/app/router/user_type_router.py +++ b/app/router/user_type_router.py @@ -26,7 +26,7 @@ async def get_questionnaire(): @user_type_router.post("/user-type", response_model=GenericResponseDTO[int]) -async def create_subscription( +async def create_user_type_by_answers( request: UserTypeQuestionnaireRequestDTO, session: AsyncSession = Depends(get_db_session), ):