import os from pydantic_settings import BaseSettings from dotenv import load_dotenv from pathlib import Path # Загружаем переменные окружения из .env файла load_dotenv() # Базовые настройки API_PREFIX = "/api" DEBUG = False # Настройки безопасности SECRET_KEY = os.getenv("SECRET_KEY", "supersecretkey") # Для JWT ALGORITHM = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES = 60 * 24 * 7 # 7 дней # Настройки базы данных # DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./app.db") # Настройки почты MAIL_USERNAME = os.getenv("MAIL_USERNAME", "test@example.com") MAIL_PASSWORD = os.getenv("MAIL_PASSWORD", "test_password") MAIL_FROM = os.getenv("MAIL_FROM", "noreply@example.com") MAIL_PORT = int(os.getenv("MAIL_PORT", "587")) MAIL_SERVER = os.getenv("MAIL_SERVER", "smtp.example.com") MAIL_TLS = True MAIL_SSL = False # Настройки загрузки файлов (старые, для информации) # UPLOAD_DIRECTORY = os.getenv("UPLOAD_DIRECTORY", "uploads") ALLOWED_UPLOAD_EXTENSIONS = {"jpg", "jpeg", "png", "gif", "webp"} MAX_UPLOAD_SIZE = 10 * 1024 * 1024 # 10 МБ # Настройки MinIO/S3 MINIO_ENDPOINT_URL = os.getenv("MINIO_ENDPOINT_URL", "http://localhost:9000") MINIO_ACCESS_KEY = os.getenv("MINIO_ACCESS_KEY", "minioadmin") MINIO_SECRET_KEY = os.getenv("MINIO_SECRET_KEY", "minioadmin") MINIO_BUCKET_NAME = os.getenv("MINIO_BUCKET_NAME", "images") MINIO_USE_SSL = os.getenv("MINIO_USE_SSL", "false").lower() == "true" # Настройки корзины CART_EXPIRATION_DAYS = 30 # Срок хранения корзины # Настройки API MAX_PAGE_SIZE = 100 # Максимальный размер страницы для пагинации # Базовый URL фронтенда FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:3000") class Settings(BaseSettings): # Основные настройки приложения APP_NAME: str = "Интернет-магазин API" APP_VERSION: str = "0.1.0" APP_DESCRIPTION: str = "API для интернет-магазина на FastAPI" DEBUG: bool = False # Настройки базы данных DATABASE_URL: str = "postgresql://gen_user:F%2BgEEiP3h7yB6d@93.183.81.86:5432/shop_db" # Настройки безопасности SECRET_KEY: str = SECRET_KEY ALGORITHM: str = ALGORITHM ACCESS_TOKEN_EXPIRE_MINUTES: int = ACCESS_TOKEN_EXPIRE_MINUTES # Настройки CORS CORS_ORIGINS: list = [ "http://localhost", "http://localhost:3000", "http://localhost:8000", "http://localhost:8080", ] # Настройки для загрузки файлов UPLOAD_DIRECTORY: str = "uploads" MAX_UPLOAD_SIZE: int = MAX_UPLOAD_SIZE ALLOWED_UPLOAD_EXTENSIONS: list = list(ALLOWED_UPLOAD_EXTENSIONS) # Настройки MinIO/S3 MINIO_ENDPOINT_URL: str = MINIO_ENDPOINT_URL MINIO_ACCESS_KEY: str = MINIO_ACCESS_KEY MINIO_SECRET_KEY: str = MINIO_SECRET_KEY MINIO_BUCKET_NAME: str = MINIO_BUCKET_NAME MINIO_USE_SSL: bool = MINIO_USE_SSL # Настройки для платежных систем (пример) PAYMENT_GATEWAY_API_KEY: str = os.getenv("PAYMENT_GATEWAY_API_KEY", "") PAYMENT_GATEWAY_SECRET: str = os.getenv("PAYMENT_GATEWAY_SECRET", "") # Настройки для CDEK API CDEK_LOGIN: str = os.getenv("CDEK_LOGIN", "cdek-login") CDEK_PASSWORD: str = os.getenv("CDEK_PASSWORD", "cdek-pass") CDEK_BASE_URL: str = os.getenv("CDEK_BASE_URL", "https://api.cdek.ru/v2") # Настройки для отправки email (пример) SMTP_SERVER: str = MAIL_SERVER SMTP_PORT: int = MAIL_PORT SMTP_USERNAME: str = MAIL_USERNAME SMTP_PASSWORD: str = MAIL_PASSWORD EMAIL_FROM: str = MAIL_FROM # Настройки Meilisearch MEILISEARCH_URL: str = os.getenv("MEILISEARCH_URL", "http://localhost:7700") MEILISEARCH_KEY: str = os.getenv("MEILISEARCH_KEY", "masterKey") class Config: env_file = ".env" env_file_encoding = "utf-8" # Создаем экземпляр настроек settings = Settings()