add get_all_by_field method
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@ from api.routes import users, keys, coupons, servers, tariffs, gifts, referrals,
|
|||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="SoloBot API (preAlpha)",
|
title="SoloBot API (preAlpha)",
|
||||||
version="0.1",
|
version="0.1.1",
|
||||||
docs_url="/api/docs",
|
docs_url="/api/docs",
|
||||||
redoc_url="/api/redoc",
|
redoc_url="/api/redoc",
|
||||||
openapi_url="/api/openapi.json"
|
openapi_url="/api/openapi.json"
|
||||||
|
|||||||
@@ -65,6 +65,21 @@ def generate_crud_router(
|
|||||||
raise HTTPException(status_code=404, detail=f"{model.__name__} not found")
|
raise HTTPException(status_code=404, detail=f"{model.__name__} not found")
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
if "get_all_by_field" in enabled_methods:
|
||||||
|
@router.get(f"/all/{{{parameter_name}}}", response_model=list[schema_response])
|
||||||
|
async def get_all_by_field(
|
||||||
|
value: Union[int, str] = Path(..., alias=parameter_name),
|
||||||
|
admin: Admin = Depends(verify_admin_token),
|
||||||
|
session: AsyncSession = Depends(get_session),
|
||||||
|
):
|
||||||
|
field = getattr(model, identifier_field)
|
||||||
|
casted = _cast_identifier_type(field, value)
|
||||||
|
result = await session.execute(select(model).where(field == casted))
|
||||||
|
objs = result.scalars().all()
|
||||||
|
if not objs:
|
||||||
|
raise HTTPException(status_code=404, detail=f"{model.__name__} not found")
|
||||||
|
return objs
|
||||||
|
|
||||||
if "create" in enabled_methods:
|
if "create" in enabled_methods:
|
||||||
@router.post("/", response_model=schema_response)
|
@router.post("/", response_model=schema_response)
|
||||||
async def create(
|
async def create(
|
||||||
|
|||||||
+19
-3
@@ -1,7 +1,11 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter, Depends, Path, HTTPException
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy import select
|
||||||
|
|
||||||
from api.routes.base_crud import generate_crud_router
|
from api.routes.base_crud import generate_crud_router
|
||||||
from api.schemas import GiftBase, GiftResponse, GiftUpdate, GiftUsageResponse
|
from api.schemas import GiftBase, GiftResponse, GiftUpdate, GiftUsageResponse
|
||||||
from database.models import Gift, GiftUsage
|
from database.models import Gift, GiftUsage, Admin
|
||||||
|
from api.depends import get_session, verify_admin_token
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@@ -18,6 +22,19 @@ gift_router = generate_crud_router(
|
|||||||
router.include_router(gift_router, prefix="", tags=["Gifts"])
|
router.include_router(gift_router, prefix="", tags=["Gifts"])
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/by_tg_id/{tg_id}", response_model=list[GiftResponse], tags=["Gifts"])
|
||||||
|
async def get_gifts_by_tg_id(
|
||||||
|
tg_id: int = Path(...),
|
||||||
|
admin: Admin = Depends(verify_admin_token),
|
||||||
|
session: AsyncSession = Depends(get_session),
|
||||||
|
):
|
||||||
|
result = await session.execute(select(Gift).where(Gift.sender_tg_id == tg_id))
|
||||||
|
gifts = result.scalars().all()
|
||||||
|
if not gifts:
|
||||||
|
raise HTTPException(status_code=404, detail="Gifts not found")
|
||||||
|
return gifts
|
||||||
|
|
||||||
|
|
||||||
gift_usage_router = generate_crud_router(
|
gift_usage_router = generate_crud_router(
|
||||||
model=GiftUsage,
|
model=GiftUsage,
|
||||||
schema_response=GiftUsageResponse,
|
schema_response=GiftUsageResponse,
|
||||||
@@ -28,4 +45,3 @@ gift_usage_router = generate_crud_router(
|
|||||||
)
|
)
|
||||||
router.include_router(gift_usage_router, prefix="/usages", tags=["GiftUsages"])
|
router.include_router(gift_usage_router, prefix="/usages", tags=["GiftUsages"])
|
||||||
router.include_router(gift_usage_router, prefix="/usages", tags=["Gifts"])
|
router.include_router(gift_usage_router, prefix="/usages", tags=["Gifts"])
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ router = generate_crud_router(
|
|||||||
schema_update=KeyUpdate,
|
schema_update=KeyUpdate,
|
||||||
identifier_field="tg_id",
|
identifier_field="tg_id",
|
||||||
extra_get_by_email=True,
|
extra_get_by_email=True,
|
||||||
enabled_methods=["get_all", "get_one", "get_by_email"]
|
enabled_methods=["get_all", "get_one", "get_by_email", "get_all_by_field"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -1,9 +1,12 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter, Path, HTTPException, Depends
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy import select
|
||||||
from api.routes.base_crud import generate_crud_router
|
from api.routes.base_crud import generate_crud_router
|
||||||
from database.models import (
|
from database.models import (
|
||||||
Payment, Referral, Notification,
|
Payment, Referral, Notification,
|
||||||
ManualBan, TemporaryData, BlockedUser, TrackingSource
|
ManualBan, TemporaryData, BlockedUser, TrackingSource, Admin
|
||||||
)
|
)
|
||||||
|
from api.depends import get_session, verify_admin_token
|
||||||
from api.schemas import (
|
from api.schemas import (
|
||||||
PaymentResponse, ReferralResponse, NotificationResponse,
|
PaymentResponse, ReferralResponse, NotificationResponse,
|
||||||
ManualBanResponse, TemporaryDataResponse, BlockedUserResponse,
|
ManualBanResponse, TemporaryDataResponse, BlockedUserResponse,
|
||||||
@@ -25,6 +28,20 @@ router.include_router(
|
|||||||
tags=["Payments"]
|
tags=["Payments"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/payments/by_tg_id/{tg_id}", response_model=list[PaymentResponse], tags=["Payments"])
|
||||||
|
async def get_payments_by_tg_id(
|
||||||
|
tg_id: int = Path(...),
|
||||||
|
admin: Admin = Depends(verify_admin_token),
|
||||||
|
session: AsyncSession = Depends(get_session),
|
||||||
|
):
|
||||||
|
result = await session.execute(select(Payment).where(Payment.tg_id == tg_id))
|
||||||
|
payments = result.scalars().all()
|
||||||
|
if not payments:
|
||||||
|
raise HTTPException(status_code=404, detail="Payments not found")
|
||||||
|
return payments
|
||||||
|
|
||||||
|
|
||||||
router.include_router(
|
router.include_router(
|
||||||
generate_crud_router(
|
generate_crud_router(
|
||||||
model=Referral,
|
model=Referral,
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ router = generate_crud_router(
|
|||||||
schema_response=ReferralResponse,
|
schema_response=ReferralResponse,
|
||||||
schema_create=None,
|
schema_create=None,
|
||||||
schema_update=None,
|
schema_update=None,
|
||||||
identifier_field="referred_tg_id",
|
identifier_field="referrer_tg_id",
|
||||||
enabled_methods=["get_all", "get_one", "delete"]
|
enabled_methods=["get_all", "get_one", "delete", "get_all_by_field"]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class ServerBase(BaseModel):
|
|||||||
inbound_id: str
|
inbound_id: str
|
||||||
panel_type: str
|
panel_type: str
|
||||||
max_keys: Optional[int] = None
|
max_keys: Optional[int] = None
|
||||||
tariff_group: str
|
tariff_group: Optional[str] = ""
|
||||||
enabled: bool = True
|
enabled: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user