add verify_admin_token

This commit is contained in:
Vladless
2025-06-23 22:10:05 +03:00
parent fc0079770d
commit 6a4fafbdf0
6 changed files with 66 additions and 17 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ from api.routes import users, keys, coupons, servers, tariffs, gifts, referrals,
app = FastAPI(
title="SoloBot API (preAlpha)",
version="0.1.1",
version="0.1.2",
docs_url="/api/docs",
redoc_url="/api/redoc",
openapi_url="/api/openapi.json"
+21 -1
View File
@@ -2,7 +2,7 @@ from fastapi import Depends, HTTPException, Path
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from database.models import Key, Admin
from database.models import Key, Admin, Tariff
from api.schemas.keys import KeyBase, KeyResponse, KeyUpdate
from api.routes.base_crud import generate_crud_router
from api.depends import get_session, verify_admin_token
@@ -47,3 +47,23 @@ async def delete_key_by_email(
except Exception as e:
logger.error(f"[API] Ошибка при удалении ключа: {e}")
raise HTTPException(status_code=500, detail="Ошибка при удалении ключа")
@router.get("/routers/{tg_id}", response_model=list[KeyResponse])
async def get_router_keys_by_tg_id(
tg_id: int = Path(..., description="Telegram ID пользователя"),
session: AsyncSession = Depends(get_session),
admin: Admin = Depends(verify_admin_token),
):
tariffs_result = await session.execute(
select(Tariff.id).where(Tariff.group_code == "routers")
)
tariff_ids = [row[0] for row in tariffs_result.all()]
if not tariff_ids:
return []
keys_result = await session.execute(
select(Key).where(Key.tg_id == tg_id, Key.tariff_id.in_(tariff_ids))
)
keys = keys_result.scalars().all()
return keys
+14 -10
View File
@@ -25,7 +25,8 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/payments",
tags=["Payments"]
tags=["Payments"],
dependencies=[Depends(verify_admin_token)]
)
@@ -52,7 +53,8 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/referrals",
tags=["Referrals"]
tags=["Referrals"],
dependencies=[Depends(verify_admin_token)]
)
router.include_router(
@@ -65,7 +67,8 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/notifications",
tags=["Notifications"]
tags=["Notifications"],
dependencies=[Depends(verify_admin_token)]
)
@@ -79,10 +82,10 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/manual-bans",
tags=["Bans"]
tags=["Bans"],
dependencies=[Depends(verify_admin_token)]
)
router.include_router(
generate_crud_router(
model=BlockedUser,
@@ -93,10 +96,10 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/blocked-users",
tags=["Bans"]
tags=["Bans"],
dependencies=[Depends(verify_admin_token)]
)
router.include_router(
generate_crud_router(
model=TemporaryData,
@@ -107,10 +110,10 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/temporary-data",
tags=["TemporaryData"]
tags=["TemporaryData"],
dependencies=[Depends(verify_admin_token)]
)
router.include_router(
generate_crud_router(
model=TrackingSource,
@@ -121,5 +124,6 @@ router.include_router(
enabled_methods=["get_all", "get_one", "delete"]
),
prefix="/tracking-sources",
tags=["TrackingSources"]
tags=["TrackingSources"],
dependencies=[Depends(verify_admin_token)]
)
+27 -3
View File
@@ -1,7 +1,10 @@
from fastapi import APIRouter
from fastapi import Depends, HTTPException, Query
from api.routes.base_crud import generate_crud_router
from api.schemas import ReferralResponse
from database.models import Referral
from database.models import Referral, Admin
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, delete
from api.depends import get_session, verify_admin_token
router = generate_crud_router(
model=Referral,
@@ -9,5 +12,26 @@ router = generate_crud_router(
schema_create=None,
schema_update=None,
identifier_field="referrer_tg_id",
enabled_methods=["get_all", "get_one", "delete", "get_all_by_field"]
enabled_methods=["get_all", "get_one", "get_all_by_field"]
)
@router.delete("/one")
async def delete_one_referral(
referrer_tg_id: int = Query(..., description="ID пригласившего"),
referred_tg_id: int = Query(..., description="ID приглашённого"),
admin: Admin = Depends(verify_admin_token),
session: AsyncSession = Depends(get_session)
):
result = await session.execute(
select(Referral).where(
Referral.referrer_tg_id == referrer_tg_id,
Referral.referred_tg_id == referred_tg_id
)
)
obj = result.scalar_one_or_none()
if not obj:
raise HTTPException(status_code=404, detail="Referral not found")
await session.delete(obj)
await session.commit()
return {"status": "deleted_one"}
+1 -1
View File
@@ -6,7 +6,7 @@ from datetime import datetime
class GiftBase(BaseModel):
sender_tg_id: int
recipient_tg_id: Optional[int] = None
selected_months: int
selected_months: Optional[int] = None
expiry_time: datetime
gift_link: str
is_used: bool = False
+2 -1
View File
@@ -13,6 +13,7 @@ from sqlalchemy import (
Text,
)
import secrets
import uuid
from sqlalchemy.orm import Mapped, declarative_base, mapped_column
Base = declarative_base()
@@ -150,7 +151,7 @@ class Notification(DictLikeMixin, Base):
class Gift(DictLikeMixin, Base):
__tablename__ = "gifts"
gift_id = Column(String, primary_key=True)
gift_id = Column(String, primary_key=True, default=lambda: uuid.uuid4().hex)
sender_tg_id = Column(BigInteger, ForeignKey("users.tg_id"))
recipient_tg_id = Column(BigInteger, ForeignKey("users.tg_id"), nullable=True)
selected_months = Column(Integer)