import datetime from fastapi import FastAPI from app.database import engine, Base, SessionLocal from app.mcp_server import setup_mcp_server from app.routers import memories_router, apps_router, stats_router, config_router from fastapi_pagination import add_pagination from fastapi.middleware.cors import CORSMiddleware from app.models import User, App from uuid import uuid4 from app.config import USER_ID, DEFAULT_APP_ID app = FastAPI(title="OpenMemory API") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Create all tables Base.metadata.create_all(bind=engine) # Check for USER_ID and create default user if needed def create_default_user(): db = SessionLocal() try: # Check if user exists user = db.query(User).filter(User.user_id == USER_ID).first() if not user: # Create default user user = User( id=uuid4(), user_id=USER_ID, name="Default User", created_at=datetime.datetime.now(datetime.UTC) ) db.add(user) db.commit() finally: db.close() def create_default_app(): db = SessionLocal() try: user = db.query(User).filter(User.user_id == USER_ID).first() if not user: return # Check if app already exists existing_app = db.query(App).filter( App.name == DEFAULT_APP_ID, App.owner_id == user.id ).first() if existing_app: return app = App( id=uuid4(), name=DEFAULT_APP_ID, owner_id=user.id, created_at=datetime.datetime.now(datetime.UTC), updated_at=datetime.datetime.now(datetime.UTC), ) db.add(app) db.commit() finally: db.close() # Create default user on startup create_default_user() create_default_app() # Setup MCP server setup_mcp_server(app) # Include routers app.include_router(memories_router) app.include_router(apps_router) app.include_router(stats_router) app.include_router(config_router) # Add pagination support add_pagination(app)