feat: brain taxonomy — DB-backed folders/tags, sidebar, CRUD API
Backend: - New Folder/Tag/ItemTag models with proper relational tables - Taxonomy CRUD endpoints: list, create, rename, delete, merge tags - Sidebar endpoint with folder/tag counts - AI classification reads live folders/tags from DB, not hardcoded - Default folders/tags seeded on first request per user - folder_id FK on items for relational integrity Frontend: - Left sidebar with Folders/Tags tabs (like Karakeep) - Click folder/tag to filter items - "Manage" mode: add new folders/tags, delete existing - Counts next to each folder/tag - "All items" option to clear filter - Replaces the old signal-strip cards Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from app.api.routes import router
|
||||
from app.api.taxonomy import router as taxonomy_router
|
||||
from app.config import DEBUG
|
||||
|
||||
logging.basicConfig(
|
||||
@@ -23,6 +24,7 @@ app = FastAPI(
|
||||
|
||||
# No CORS — internal service only, accessed via gateway
|
||||
app.include_router(router)
|
||||
app.include_router(taxonomy_router)
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
@@ -30,6 +32,7 @@ async def startup():
|
||||
from sqlalchemy import text as sa_text
|
||||
from app.database import engine, Base
|
||||
from app.models.item import Item, ItemAsset, AppLink # noqa: import to register models
|
||||
from app.models.taxonomy import Folder, Tag, ItemTag # noqa: register taxonomy tables
|
||||
|
||||
# Enable pgvector extension before creating tables
|
||||
async with engine.begin() as conn:
|
||||
|
||||
Reference in New Issue
Block a user