From 1788a12cda152c9cfda8e1562f921f8e0407f9d0 Mon Sep 17 00:00:00 2001 From: openit Date: Wed, 11 Mar 2026 13:24:44 +0000 Subject: [PATCH] added yokassa --- backend/database/models.py | 10 +++++++-- backend/requirements.txt | 1 + infra/docker-compose.yml | 46 +++++++++++++------------------------- 3 files changed, 24 insertions(+), 33 deletions(-) diff --git a/backend/database/models.py b/backend/database/models.py index 96629e8..8b27899 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -56,11 +56,17 @@ class Ticket(Base): ) idempotency_key: Mapped[str] = mapped_column(String, unique=True, nullable=True) pdf_url: Mapped[str | None] = mapped_column(String, nullable=True) - # nullable=True — безопасно для существующих строк; новые билеты получают UUID автоматически secret_token: Mapped[str | None] = mapped_column( String, unique=True, index=True, nullable=True, default=lambda: str(uuid.uuid4()), ) + + # --- Поля для эквайринга --- + payment_id: Mapped[str | None] = mapped_column(String, index=True, nullable=True) + payment_url: Mapped[str | None] = mapped_column(String, nullable=True) + expires_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + # --------------------------- + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), @@ -69,4 +75,4 @@ class Ticket(Base): ) seat: Mapped["Seat"] = relationship(back_populates="ticket") - user: Mapped["User"] = relationship(back_populates="tickets") + user: Mapped["User"] = relationship(back_populates="tickets") \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt index a1b762d..e5c99d7 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -13,3 +13,4 @@ reportlab aioboto3 pydantic[email]>=2.5.0 qrcode[pil]==7.4.2 +yookassa==3.3.0 \ No newline at end of file diff --git a/infra/docker-compose.yml b/infra/docker-compose.yml index 31d9c9a..05536a2 100644 --- a/infra/docker-compose.yml +++ b/infra/docker-compose.yml @@ -1,15 +1,12 @@ -version: '3.8' services: backend: build: ../backend container_name: backend - # Пока приложения нет, просто держим контейнер живым, чтобы зайти в консоль command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload ports: - "8000:8000" environment: - # Параметры подключения к БД (внутри сети ticket-network) DATABASE_URL: postgresql+asyncpg://admin:your_strong_password@postgres:5432/ticket_db REDIS_URL: redis://redis:6379/0 volumes: @@ -42,12 +39,12 @@ services: dockerfile: Dockerfile container_name: frontend ports: - - "3000:3000" # Пробиваем дыру напрямую для дебага + - "3000:3000" environment: - NEXT_PUBLIC_API_URL=http://192.168.149.101:8000/api volumes: - ../frontend-client:/app - - /app/node_modules # Изолируем зависимости контейнера от хоста + - /app/node_modules networks: - ticket-network @@ -76,7 +73,7 @@ services: POSTGRES_PASSWORD: your_strong_password POSTGRES_DB: ticket_db ports: - - "5432:5432" # <-- Добавляем вот это + - "5432:5432" volumes: - ~/ticket-system/data/postgres:/var/lib/postgresql/data networks: @@ -94,10 +91,12 @@ services: rabbitmq: image: rabbitmq:3-management-alpine container_name: rabbitmq + restart: unless-stopped environment: - RABBITMQ_DEFAULT_USER: user - RABBITMQ_DEFAULT_PASS: password + RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER} + RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS} ports: + - "5672:5672" - "15672:15672" volumes: - ~/ticket-system/data/rabbitmq:/var/lib/rabbitmq @@ -135,34 +134,19 @@ services: ports: - "9100:9100" networks: - - ticket-network + - ticket-network - cadvisor: - image: ghcr.io/google/cadvisor:v0.54.1 - container_name: cadvisor + docker-stats-exporter: + image: wywywywy/docker_stats_exporter:latest + container_name: docker-stats-exporter restart: unless-stopped - privileged: true ports: - - "8080:8080" - devices: - - /dev/kmsg:/dev/kmsg + - "9487:9487" volumes: - - /:/rootfs:ro - - /var/run:/var/run:ro - - /sys:/sys:ro - - /var/lib/docker:/var/lib/docker:ro - - /var/lib/containerd:/var/lib/containerd:ro - - /dev/disk:/dev/disk:ro - - /etc/machine-id:/etc/machine-id:ro - command: - - --housekeeping_interval=30s - - --docker_only=false - - --store_container_labels=false + - /var/run/docker.sock:/var/run/docker.sock:ro networks: - - ticket-network + - ticket-network networks: ticket-network: - driver: bridge - - \ No newline at end of file + driver: bridge \ No newline at end of file