This commit is contained in:
@@ -56,11 +56,17 @@ class Ticket(Base):
|
|||||||
)
|
)
|
||||||
idempotency_key: Mapped[str] = mapped_column(String, unique=True, nullable=True)
|
idempotency_key: Mapped[str] = mapped_column(String, unique=True, nullable=True)
|
||||||
pdf_url: Mapped[str | None] = mapped_column(String, nullable=True)
|
pdf_url: Mapped[str | None] = mapped_column(String, nullable=True)
|
||||||
# nullable=True — безопасно для существующих строк; новые билеты получают UUID автоматически
|
|
||||||
secret_token: Mapped[str | None] = mapped_column(
|
secret_token: Mapped[str | None] = mapped_column(
|
||||||
String, unique=True, index=True, nullable=True,
|
String, unique=True, index=True, nullable=True,
|
||||||
default=lambda: str(uuid.uuid4()),
|
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))
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc))
|
||||||
updated_at: Mapped[datetime] = mapped_column(
|
updated_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True),
|
DateTime(timezone=True),
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ reportlab
|
|||||||
aioboto3
|
aioboto3
|
||||||
pydantic[email]>=2.5.0
|
pydantic[email]>=2.5.0
|
||||||
qrcode[pil]==7.4.2
|
qrcode[pil]==7.4.2
|
||||||
|
yookassa==3.3.0
|
||||||
@@ -1,15 +1,12 @@
|
|||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
backend:
|
backend:
|
||||||
build: ../backend
|
build: ../backend
|
||||||
container_name: backend
|
container_name: backend
|
||||||
# Пока приложения нет, просто держим контейнер живым, чтобы зайти в консоль
|
|
||||||
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
environment:
|
environment:
|
||||||
# Параметры подключения к БД (внутри сети ticket-network)
|
|
||||||
DATABASE_URL: postgresql+asyncpg://admin:your_strong_password@postgres:5432/ticket_db
|
DATABASE_URL: postgresql+asyncpg://admin:your_strong_password@postgres:5432/ticket_db
|
||||||
REDIS_URL: redis://redis:6379/0
|
REDIS_URL: redis://redis:6379/0
|
||||||
volumes:
|
volumes:
|
||||||
@@ -42,12 +39,12 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: frontend
|
container_name: frontend
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000" # Пробиваем дыру напрямую для дебага
|
- "3000:3000"
|
||||||
environment:
|
environment:
|
||||||
- NEXT_PUBLIC_API_URL=http://192.168.149.101:8000/api
|
- NEXT_PUBLIC_API_URL=http://192.168.149.101:8000/api
|
||||||
volumes:
|
volumes:
|
||||||
- ../frontend-client:/app
|
- ../frontend-client:/app
|
||||||
- /app/node_modules # Изолируем зависимости контейнера от хоста
|
- /app/node_modules
|
||||||
networks:
|
networks:
|
||||||
- ticket-network
|
- ticket-network
|
||||||
|
|
||||||
@@ -76,7 +73,7 @@ services:
|
|||||||
POSTGRES_PASSWORD: your_strong_password
|
POSTGRES_PASSWORD: your_strong_password
|
||||||
POSTGRES_DB: ticket_db
|
POSTGRES_DB: ticket_db
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432" # <-- Добавляем вот это
|
- "5432:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- ~/ticket-system/data/postgres:/var/lib/postgresql/data
|
- ~/ticket-system/data/postgres:/var/lib/postgresql/data
|
||||||
networks:
|
networks:
|
||||||
@@ -94,10 +91,12 @@ services:
|
|||||||
rabbitmq:
|
rabbitmq:
|
||||||
image: rabbitmq:3-management-alpine
|
image: rabbitmq:3-management-alpine
|
||||||
container_name: rabbitmq
|
container_name: rabbitmq
|
||||||
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
RABBITMQ_DEFAULT_USER: user
|
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
|
||||||
RABBITMQ_DEFAULT_PASS: password
|
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
|
||||||
ports:
|
ports:
|
||||||
|
- "5672:5672"
|
||||||
- "15672:15672"
|
- "15672:15672"
|
||||||
volumes:
|
volumes:
|
||||||
- ~/ticket-system/data/rabbitmq:/var/lib/rabbitmq
|
- ~/ticket-system/data/rabbitmq:/var/lib/rabbitmq
|
||||||
@@ -137,32 +136,17 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- ticket-network
|
- ticket-network
|
||||||
|
|
||||||
cadvisor:
|
docker-stats-exporter:
|
||||||
image: ghcr.io/google/cadvisor:v0.54.1
|
image: wywywywy/docker_stats_exporter:latest
|
||||||
container_name: cadvisor
|
container_name: docker-stats-exporter
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
privileged: true
|
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "9487:9487"
|
||||||
devices:
|
|
||||||
- /dev/kmsg:/dev/kmsg
|
|
||||||
volumes:
|
volumes:
|
||||||
- /:/rootfs:ro
|
- /var/run/docker.sock:/var/run/docker.sock: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
|
|
||||||
networks:
|
networks:
|
||||||
- ticket-network
|
- ticket-network
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ticket-network:
|
ticket-network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user