From 2743a845bdbae045d2ca64d789ae49a20c119906 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 10 Dec 2025 02:08:51 +0300 Subject: [PATCH 1/2] Revert "Handle FAQ status update without request body" --- app/webapi/routes/pages.py | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/app/webapi/routes/pages.py b/app/webapi/routes/pages.py index f14ba1c3..fa59d9eb 100644 --- a/app/webapi/routes/pages.py +++ b/app/webapi/routes/pages.py @@ -2,16 +2,7 @@ from __future__ import annotations from typing import Any, List, Optional -from fastapi import ( - APIRouter, - Body, - Depends, - HTTPException, - Query, - Response, - Security, - status, -) +from fastapi import APIRouter, Depends, HTTPException, Query, Response, Security, status from sqlalchemy.ext.asyncio import AsyncSession from app.config import settings @@ -401,26 +392,15 @@ async def get_faq_status( @router.put("/faq/status", response_model=FaqStatusResponse) async def update_faq_status( - payload: Optional[FaqStatusUpdateRequest] = Body(None), - language: str = Query("ru", min_length=2, max_length=10), - is_enabled: Optional[bool] = Query(None), + payload: FaqStatusUpdateRequest, _: object = Security(require_api_token), db: AsyncSession = Depends(get_db_session), ) -> FaqStatusResponse: - resolved_language = FaqService.normalize_language( - payload.language if payload and payload.language else language - ) - - enabled_status = payload.is_enabled if payload else is_enabled - if enabled_status is None: - raise HTTPException( - status.HTTP_400_BAD_REQUEST, "Parameter 'is_enabled' is required" - ) - - setting = await FaqService.set_enabled(db, resolved_language, enabled_status) + lang = FaqService.normalize_language(payload.language) + setting = await FaqService.set_enabled(db, lang, payload.is_enabled) return FaqStatusResponse( - requested_language=resolved_language, + requested_language=lang, language=setting.language, is_enabled=bool(setting.is_enabled), ) From 81f5ce429e5dcf5e1136e2624eb70c8624a6a19d Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 10 Dec 2025 02:09:46 +0300 Subject: [PATCH 2/2] Fix FAQ status route matching --- app/webapi/routes/pages.py | 102 ++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 41 deletions(-) diff --git a/app/webapi/routes/pages.py b/app/webapi/routes/pages.py index fa59d9eb..81d76291 100644 --- a/app/webapi/routes/pages.py +++ b/app/webapi/routes/pages.py @@ -2,7 +2,16 @@ from __future__ import annotations from typing import Any, List, Optional -from fastapi import APIRouter, Depends, HTTPException, Query, Response, Security, status +from fastapi import ( + APIRouter, + Body, + Depends, + HTTPException, + Query, + Response, + Security, + status, +) from sqlalchemy.ext.asyncio import AsyncSession from app.config import settings @@ -233,6 +242,57 @@ async def list_faq_pages( ) +@router.get("/faq/status", response_model=FaqStatusResponse) +async def get_faq_status( + _: object = Security(require_api_token), + db: AsyncSession = Depends(get_db_session), + language: str = Query("ru", min_length=2, max_length=10), + fallback: bool = Query(True), +) -> FaqStatusResponse: + requested_lang = FaqService.normalize_language(language) + setting = await FaqService.get_setting(db, requested_lang, fallback=fallback) + + if not setting: + return FaqStatusResponse( + requested_language=requested_lang, + language=requested_lang, + is_enabled=False, + ) + + return FaqStatusResponse( + requested_language=requested_lang, + language=setting.language, + is_enabled=bool(setting.is_enabled), + ) + + +@router.put("/faq/status", response_model=FaqStatusResponse) +async def update_faq_status( + payload: Optional[FaqStatusUpdateRequest] = Body(None), + language: str = Query("ru", min_length=2, max_length=10), + is_enabled: Optional[bool] = Query(None), + _: object = Security(require_api_token), + db: AsyncSession = Depends(get_db_session), +) -> FaqStatusResponse: + resolved_language = FaqService.normalize_language( + payload.language if payload and payload.language else language + ) + + enabled_status = payload.is_enabled if payload else is_enabled + if enabled_status is None: + raise HTTPException( + status.HTTP_400_BAD_REQUEST, "Parameter 'is_enabled' is required" + ) + + setting = await FaqService.set_enabled(db, resolved_language, enabled_status) + + return FaqStatusResponse( + requested_language=resolved_language, + language=setting.language, + is_enabled=bool(setting.is_enabled), + ) + + @router.post("/faq", response_model=FaqPageResponse, status_code=status.HTTP_201_CREATED) async def create_faq_page( payload: FaqPageCreateRequest, @@ -366,46 +426,6 @@ async def reorder_faq_pages( ) -@router.get("/faq/status", response_model=FaqStatusResponse) -async def get_faq_status( - _: object = Security(require_api_token), - db: AsyncSession = Depends(get_db_session), - language: str = Query("ru", min_length=2, max_length=10), - fallback: bool = Query(True), -) -> FaqStatusResponse: - requested_lang = FaqService.normalize_language(language) - setting = await FaqService.get_setting(db, requested_lang, fallback=fallback) - - if not setting: - return FaqStatusResponse( - requested_language=requested_lang, - language=requested_lang, - is_enabled=False, - ) - - return FaqStatusResponse( - requested_language=requested_lang, - language=setting.language, - is_enabled=bool(setting.is_enabled), - ) - - -@router.put("/faq/status", response_model=FaqStatusResponse) -async def update_faq_status( - payload: FaqStatusUpdateRequest, - _: object = Security(require_api_token), - db: AsyncSession = Depends(get_db_session), -) -> FaqStatusResponse: - lang = FaqService.normalize_language(payload.language) - setting = await FaqService.set_enabled(db, lang, payload.is_enabled) - - return FaqStatusResponse( - requested_language=lang, - language=setting.language, - is_enabled=bool(setting.is_enabled), - ) - - @router.get("/service-rules", response_model=ServiceRulesResponse) async def get_service_rules( _: object = Security(require_api_token),