feat: create backend project structure
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
# TODO: Dockerfile will be implemented in a later task
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""ImageCreator backend application."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""API module."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""API dependencies placeholder."""
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
from functools import lru_cache
|
||||||
|
|
||||||
|
class Settings(BaseSettings):
|
||||||
|
# Database
|
||||||
|
DATABASE_URL: str = "postgresql://user:pass@localhost:5432/imagecreator"
|
||||||
|
|
||||||
|
# JWT
|
||||||
|
SECRET_KEY: str = "your-secret-key-change-in-production"
|
||||||
|
ALGORITHM: str = "HS256"
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
||||||
|
REFRESH_TOKEN_EXPIRE_DAYS: int = 7
|
||||||
|
|
||||||
|
# CORS
|
||||||
|
CORS_ORIGINS: list[str] = ["http://localhost:3000"]
|
||||||
|
|
||||||
|
# LLM API Keys
|
||||||
|
GEMINI_API_KEY: str = ""
|
||||||
|
OPENAI_API_KEY: str = ""
|
||||||
|
|
||||||
|
# Image storage
|
||||||
|
IMAGE_STORAGE_PATH: str = "/app/uploads"
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
env_file = ".env"
|
||||||
|
|
||||||
|
@lru_cache()
|
||||||
|
def get_settings():
|
||||||
|
return Settings()
|
||||||
|
|
||||||
|
settings = get_settings()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Core module."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Security utilities placeholder."""
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
from sqlalchemy import create_engine
|
||||||
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
||||||
|
|
||||||
|
from app.config import settings
|
||||||
|
|
||||||
|
engine = create_engine(settings.DATABASE_URL, pool_pre_ping=True)
|
||||||
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
def get_db():
|
||||||
|
db = SessionLocal()
|
||||||
|
try:
|
||||||
|
yield db
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
from fastapi import FastAPI
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
from app.api import auth, users, images, history
|
||||||
|
from app.config import settings
|
||||||
|
from app.database import engine
|
||||||
|
from app.models import user, history as history_model
|
||||||
|
|
||||||
|
app = FastAPI(title="ImageCreator API", version="1.0.0")
|
||||||
|
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
allow_origins=settings.CORS_ORIGINS,
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["*"],
|
||||||
|
allow_headers=["*"],
|
||||||
|
)
|
||||||
|
|
||||||
|
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
|
||||||
|
app.include_router(users.router, prefix="/api/users", tags=["users"])
|
||||||
|
app.include_router(images.router, prefix="/api/images", tags=["images"])
|
||||||
|
app.include_router(history.router, prefix="/api/history", tags=["history"])
|
||||||
|
|
||||||
|
@app.get("/health")
|
||||||
|
def health_check():
|
||||||
|
return {"status": "ok"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Models module."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""History model placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""User model placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Schemas module."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Auth schemas placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""History schemas placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Image schemas placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""User schemas placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Services module."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Auth service placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""Image service placeholder."""
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
"""LLM service placeholder."""
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
fastapi==0.109.0
|
||||||
|
uvicorn[standard]==0.27.0
|
||||||
|
sqlalchemy==2.0.25
|
||||||
|
psycopg2-binary==2.9.9
|
||||||
|
python-jose[cryptography]==3.3.0
|
||||||
|
passlib[bcrypt]==1.7.4
|
||||||
|
python-multipart==0.0.6
|
||||||
|
pydantic==2.5.3
|
||||||
|
pydantic-settings==2.1.0
|
||||||
|
google-genai==0.8.0
|
||||||
|
openai==1.12.0
|
||||||
|
aiofiles==23.2.1
|
||||||
|
httpx==0.26.0
|
||||||
|
pytest==8.0.0
|
||||||
|
pytest-asyncio==0.23.4
|
||||||
Reference in New Issue
Block a user