feat: implement billing system with Pally integration

- Added billing models and repository for handling bills.
- Introduced BillingService to manage payment initiation and bill creation.
- Updated user service to remove ticket-related functionality.
- Refactored settings to include new billing-related fields.
- Removed ticket-related handlers and schemas.
- Added new billing handlers for processing payments.
- Updated database schema with new bills table and status enum.
- Enhanced utility functions to calculate prices considering discounts.
- Introduced prehandling for non-private messages.
- Updated main application to initialize new billing services and repositories.
This commit is contained in:
2026-04-23 19:55:51 +07:00
parent 8290d18235
commit d98383285e
29 changed files with 705 additions and 305 deletions

18
main.py
View File

@@ -10,9 +10,11 @@ from config import settings
from db.session import async_session
from handlers import routers
from middlewares import DIMiddleware
from repositories.tickets import TicketRepository
from misc.pally import PallyClient
from repositories.bills import BillsRepository
from repositories.users import UserRepository
from schemas.di import DependenciesDTO
from services.billing_service import BillingService
from services.user_service import UserService
logging.basicConfig(level=logging.DEBUG)
@@ -21,9 +23,15 @@ logging.basicConfig(level=logging.DEBUG)
async def main():
dp = Dispatcher()
pally_client = PallyClient(settings.pally_token)
user_repository = UserRepository()
ticket_repository = TicketRepository()
user_service = UserService(user_repository, ticket_repository)
user_service = UserService(user_repository)
bills_repository = BillsRepository()
billing_service = BillingService(
user_repository=user_repository, bills_repository=bills_repository
)
rw_sdk = RemnawaveSDK(
base_url=settings.remnawave_url,
@@ -31,10 +39,12 @@ async def main():
)
deps = DependenciesDTO(
ticket_repository=ticket_repository,
user_repository=user_repository,
user_service=user_service,
rw_sdk=rw_sdk,
pally_client=pally_client,
bills_repository=bills_repository,
billing_service=billing_service,
)
dp.update.middleware.register(DIMiddleware(deps, async_session))