This commit is contained in:
xds
2026-03-22 13:26:38 +03:00
parent f98c57a433
commit beb14b4e43
11 changed files with 272 additions and 62 deletions

View File

@@ -15,6 +15,12 @@ class Settings(BaseSettings):
MINIO_BUCKET: str = "filam3d"
MINIO_SECURE: bool = False
JWT_SECRET: str = "change-me-in-production-please"
JWT_ALGORITHM: str = "HS256"
JWT_EXPIRE_HOURS: int = 24
ADMIN_DEFAULT_EMAIL: str = "admin@filam3d.ru"
ADMIN_DEFAULT_PASSWORD: str = "admin123"
model_config = {"env_file": ["../.env", ".env"]}

View File

@@ -6,10 +6,12 @@ from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from sqlalchemy import select
from app.config import settings
from app.database import async_session, engine, Base
from app.models import Material
from app.models import Material, AdminUser
from app.seed.materials import MATERIALS
from app.routers import calculate, materials, orders, ai_advisor
from app.services.auth import hash_password
from app.routers import calculate, materials, orders, ai_advisor, admin
# Configure logging
logging.basicConfig(
@@ -50,6 +52,22 @@ async def lifespan(app: FastAPI):
else:
logger.info("Materials already exist, skipping seed")
# Seed default admin user
logger.info("Checking admin user...")
async with async_session() as session:
result = await session.execute(select(AdminUser).limit(1))
if result.scalar_one_or_none() is None:
admin_user = AdminUser(
email=settings.ADMIN_DEFAULT_EMAIL,
password_hash=hash_password(settings.ADMIN_DEFAULT_PASSWORD),
name="Admin",
)
session.add(admin_user)
await session.commit()
logger.info("Default admin created: %s", settings.ADMIN_DEFAULT_EMAIL)
else:
logger.info("Admin user already exists, skipping")
logger.info("=== Application ready ===")
yield
logger.info("=== Application shutdown ===")
@@ -82,6 +100,7 @@ app.include_router(calculate.router, prefix="/api")
app.include_router(materials.router, prefix="/api")
app.include_router(orders.router, prefix="/api")
app.include_router(ai_advisor.router, prefix="/api")
app.include_router(admin.router, prefix="/api/admin")
@app.get("/api/health")

View File

@@ -1,5 +1,7 @@
from app.models.material import Material
from app.models.calculation import Calculation
from app.models.order import Order
from app.models.admin_user import AdminUser
from app.models.app_settings import AppSettings
__all__ = ["Material", "Calculation", "Order"]
__all__ = ["Material", "Calculation", "Order", "AdminUser", "AppSettings"]

View File

@@ -11,3 +11,5 @@ python-multipart==0.0.20
httpx==0.28.1
minio==7.2.12
google-genai==1.14.0
pyjwt==2.10.1
bcrypt==4.2.1