init
This commit is contained in:
@@ -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"]}
|
||||
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user