Spaces:
Sleeping
Sleeping
| """ | |
| API Routes β Your Application Endpoints | |
| ββββββββββββββββββββββββββββββββββββββββ | |
| This is where your actual API endpoints go. | |
| The admin panel is separate at /admin/* | |
| """ | |
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| from typing import Optional | |
| import uuid | |
| from app.database import get_db | |
| router = APIRouter(prefix="/api", tags=["api"]) | |
| # ββ Models ββ | |
| class UserCreate(BaseModel): | |
| email: str | |
| name: Optional[str] = None | |
| avatar_url: Optional[str] = None | |
| class ProjectCreate(BaseModel): | |
| user_id: str | |
| name: str | |
| description: Optional[str] = None | |
| design_tokens: Optional[dict] = None | |
| class ColorPaletteCreate(BaseModel): | |
| project_id: str | |
| name: str | |
| colors: dict | |
| mood: Optional[str] = None | |
| # ββ Users ββ | |
| async def create_user(user: UserCreate): | |
| conn = get_db() | |
| user_id = str(uuid.uuid4()) | |
| try: | |
| conn.execute( | |
| "INSERT INTO users (id, email, name, avatar_url) VALUES (?, ?, ?, ?)", | |
| (user_id, user.email, user.name, user.avatar_url) | |
| ) | |
| conn.commit() | |
| return {"id": user_id, "email": user.email} | |
| except Exception as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| async def list_users(): | |
| conn = get_db() | |
| rows = conn.execute("SELECT * FROM users ORDER BY created_at DESC").fetchall() | |
| return [dict(r) for r in rows] | |
| async def get_user(user_id: str): | |
| conn = get_db() | |
| row = conn.execute("SELECT * FROM users WHERE id = ?", (user_id,)).fetchone() | |
| if not row: | |
| raise HTTPException(status_code=404, detail="User not found") | |
| return dict(row) | |
| # ββ Projects ββ | |
| async def create_project(project: ProjectCreate): | |
| conn = get_db() | |
| project_id = str(uuid.uuid4()) | |
| try: | |
| conn.execute( | |
| "INSERT INTO projects (id, user_id, name, description, design_tokens) VALUES (?, ?, ?, ?, ?)", | |
| (project_id, project.user_id, project.name, project.description, str(project.design_tokens)) | |
| ) | |
| conn.commit() | |
| return {"id": project_id, "name": project.name} | |
| except Exception as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| async def list_projects(user_id: Optional[str] = None): | |
| conn = get_db() | |
| if user_id: | |
| rows = conn.execute("SELECT * FROM projects WHERE user_id = ? ORDER BY created_at DESC", (user_id,)).fetchall() | |
| else: | |
| rows = conn.execute("SELECT * FROM projects ORDER BY created_at DESC").fetchall() | |
| return [dict(r) for r in rows] | |
| async def get_project(project_id: str): | |
| conn = get_db() | |
| row = conn.execute("SELECT * FROM projects WHERE id = ?", (project_id,)).fetchone() | |
| if not row: | |
| raise HTTPException(status_code=404, detail="Project not found") | |
| return dict(row) | |
| # ββ Color Palettes ββ | |
| async def create_palette(palette: ColorPaletteCreate): | |
| conn = get_db() | |
| palette_id = str(uuid.uuid4()) | |
| try: | |
| conn.execute( | |
| "INSERT INTO color_palettes (id, project_id, name, colors, mood) VALUES (?, ?, ?, ?, ?)", | |
| (palette_id, palette.project_id, palette.name, str(palette.colors), palette.mood) | |
| ) | |
| conn.commit() | |
| return {"id": palette_id, "name": palette.name} | |
| except Exception as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| async def list_palettes(project_id: Optional[str] = None): | |
| conn = get_db() | |
| if project_id: | |
| rows = conn.execute("SELECT * FROM color_palettes WHERE project_id = ? ORDER BY created_at DESC", (project_id,)).fetchall() | |
| else: | |
| rows = conn.execute("SELECT * FROM color_palettes ORDER BY created_at DESC").fetchall() | |
| return [dict(r) for r in rows] | |
| # ββ Health Check ββ | |
| async def health_check(): | |
| from app.database import integrity_check | |
| return integrity_check() | |