From 2b2ba6b647d94c5c2ef94424ccaf5b0a92353169 Mon Sep 17 00:00:00 2001 From: Vladless Date: Mon, 16 Jun 2025 17:20:49 +0300 Subject: [PATCH] add api routes --- api/main.py | 5 +- api/routes/gifts.py | 31 ++++++++++++ api/routes/misc.py | 108 ++++++++++++++++++++++++++++++++++++++++ api/routes/referrals.py | 13 +++++ api/schemas/__init__.py | 2 +- api/schemas/gifts.py | 14 ++++++ 6 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 api/routes/gifts.py create mode 100644 api/routes/misc.py create mode 100644 api/routes/referrals.py diff --git a/api/main.py b/api/main.py index 791a7449..21d15e7e 100644 --- a/api/main.py +++ b/api/main.py @@ -1,5 +1,5 @@ from fastapi import FastAPI -from api.routes import users, keys, coupons, servers, tariffs +from api.routes import users, keys, coupons, servers, tariffs, gifts, referrals, misc app = FastAPI( title="SoloBot API (preAlpha)", @@ -15,6 +15,9 @@ app.include_router(keys.router, prefix="/api/keys", tags=["Keys"]) app.include_router(coupons.router, prefix="/api/coupons", tags=["Coupons"]) app.include_router(servers.router, prefix="/api/servers", tags=["Servers"]) app.include_router(tariffs.router, prefix="/api/tariffs", tags=["Tariffs"]) +app.include_router(gifts.router, prefix="/api/gifts", tags=["Gifts"]) +app.include_router(referrals.router, prefix="/api/referrals", tags=["Referrals"]) +app.include_router(misc.router, prefix="/api") @app.get("/api", include_in_schema=False) diff --git a/api/routes/gifts.py b/api/routes/gifts.py new file mode 100644 index 00000000..6dc3ecbd --- /dev/null +++ b/api/routes/gifts.py @@ -0,0 +1,31 @@ +from fastapi import APIRouter +from api.routes.base_crud import generate_crud_router +from api.schemas import GiftBase, GiftResponse, GiftUpdate, GiftUsageResponse +from database.models import Gift, GiftUsage + +router = APIRouter() + + +gift_router = generate_crud_router( + model=Gift, + schema_response=GiftResponse, + schema_create=GiftBase, + schema_update=GiftUpdate, + identifier_field="gift_id", + parameter_name="gift_id", + enabled_methods=["get_all", "get_one", "create", "update", "delete"] +) +router.include_router(gift_router, prefix="", tags=["Gifts"]) + + +gift_usage_router = generate_crud_router( + model=GiftUsage, + schema_response=GiftUsageResponse, + schema_create=None, + schema_update=None, + identifier_field="gift_id", + enabled_methods=["get_all", "get_one", "delete"] +) +router.include_router(gift_usage_router, prefix="/usages", tags=["GiftUsages"]) +router.include_router(gift_usage_router, prefix="/usages", tags=["Gifts"]) + diff --git a/api/routes/misc.py b/api/routes/misc.py new file mode 100644 index 00000000..8b6b3cfd --- /dev/null +++ b/api/routes/misc.py @@ -0,0 +1,108 @@ +from fastapi import APIRouter +from api.routes.base_crud import generate_crud_router +from database.models import ( + Payment, Referral, Notification, + ManualBan, TemporaryData, BlockedUser, TrackingSource +) +from api.schemas import ( + PaymentResponse, ReferralResponse, NotificationResponse, + ManualBanResponse, TemporaryDataResponse, BlockedUserResponse, + TrackingSourceResponse +) + +router = APIRouter() + +router.include_router( + generate_crud_router( + model=Payment, + schema_response=PaymentResponse, + schema_create=None, + schema_update=None, + identifier_field="id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/payments", + tags=["Payments"] +) + +router.include_router( + generate_crud_router( + model=Referral, + schema_response=ReferralResponse, + schema_create=None, + schema_update=None, + identifier_field="referred_tg_id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/referrals", + tags=["Referrals"] +) + +router.include_router( + generate_crud_router( + model=Notification, + schema_response=NotificationResponse, + schema_create=None, + schema_update=None, + identifier_field="tg_id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/notifications", + tags=["Notifications"] +) + + +router.include_router( + generate_crud_router( + model=ManualBan, + schema_response=ManualBanResponse, + schema_create=None, + schema_update=None, + identifier_field="tg_id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/manual-bans", + tags=["Bans"] +) + + +router.include_router( + generate_crud_router( + model=BlockedUser, + schema_response=BlockedUserResponse, + schema_create=None, + schema_update=None, + identifier_field="tg_id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/blocked-users", + tags=["Bans"] +) + + +router.include_router( + generate_crud_router( + model=TemporaryData, + schema_response=TemporaryDataResponse, + schema_create=None, + schema_update=None, + identifier_field="tg_id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/temporary-data", + tags=["TemporaryData"] +) + + +router.include_router( + generate_crud_router( + model=TrackingSource, + schema_response=TrackingSourceResponse, + schema_create=None, + schema_update=None, + identifier_field="id", + enabled_methods=["get_all", "get_one", "delete"] + ), + prefix="/tracking-sources", + tags=["TrackingSources"] +) diff --git a/api/routes/referrals.py b/api/routes/referrals.py new file mode 100644 index 00000000..59b24c4d --- /dev/null +++ b/api/routes/referrals.py @@ -0,0 +1,13 @@ +from fastapi import APIRouter +from api.routes.base_crud import generate_crud_router +from api.schemas import ReferralResponse +from database.models import Referral + +router = generate_crud_router( + model=Referral, + schema_response=ReferralResponse, + schema_create=None, + schema_update=None, + identifier_field="referred_tg_id", + enabled_methods=["get_all", "get_one", "delete"] +) diff --git a/api/schemas/__init__.py b/api/schemas/__init__.py index 5c568f5f..df7ab282 100644 --- a/api/schemas/__init__.py +++ b/api/schemas/__init__.py @@ -4,5 +4,5 @@ from .tariffs import TariffResponse, TariffUpdate, TariffBase from .servers import ServerResponse, ServerBase, ServerUpdate from .coupons import CouponResponse, CouponUsageResponse, CouponBase, CouponUpdate from .referrals import ReferralResponse -from .gifts import GiftResponse, GiftUsageResponse +from .gifts import GiftResponse, GiftUsageResponse, GiftUpdate, GiftBase from .misc import ManualBanResponse, TemporaryDataResponse, BlockedUserResponse, TrackingSourceResponse, PaymentResponse, NotificationResponse diff --git a/api/schemas/gifts.py b/api/schemas/gifts.py index c12a8c5c..e8bdf1a5 100644 --- a/api/schemas/gifts.py +++ b/api/schemas/gifts.py @@ -28,5 +28,19 @@ class GiftUsageResponse(BaseModel): tg_id: int used_at: datetime + class Config: + from_attributes = True + + +class GiftUpdate(BaseModel): + recipient_tg_id: Optional[int] = None + selected_months: Optional[int] = None + expiry_time: Optional[datetime] = None + gift_link: Optional[str] = None + is_used: Optional[bool] = None + is_unlimited: Optional[bool] = None + max_usages: Optional[int] = None + tariff_id: Optional[int] = None + class Config: from_attributes = True \ No newline at end of file