feat(projets): racine active par contextvar + projet par session

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 4.8 committed 2026-07-19 10:32:37 +02:00
1 parent 25a88dd879
commit 8d0b57ad0d
5 files changed
+123 -16

No files matched your search

+16 -6
View File
@@ -4,7 +4,7 @@ from __future__ import annotations
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from .. import db
from .. import db, tools
router = APIRouter(prefix="/api/sessions", tags=["sessions"])
@@ -12,10 +12,12 @@ router = APIRouter(prefix="/api/sessions", tags=["sessions"])
class CreateSession(BaseModel):
title: str = "Nouvelle session"
model: str | None = None
project: str | None = None
class RenameSession(BaseModel):
title: str
class UpdateSession(BaseModel):
title: str | None = None
project: str | None = None # "" = retour à la racine du workspace
@router.get("")
@@ -25,7 +27,9 @@ async def get_sessions() -> dict:
@router.post("")
async def post_session(req: CreateSession) -> dict:
return db.create_session(req.title, req.model)
if req.project and not tools.PROJECT_NAME.match(req.project):
raise HTTPException(400, "nom de projet invalide")
return db.create_session(req.title, req.model, req.project or None)
@router.get("/{sid}")
@@ -37,10 +41,16 @@ async def get_one(sid: str) -> dict:
@router.patch("/{sid}")
async def patch_session(sid: str, req: RenameSession) -> dict:
async def patch_session(sid: str, req: UpdateSession) -> dict:
if not db.get_session(sid):
raise HTTPException(404, "session introuvable")
db.rename_session(sid, req.title)
if req.title is not None:
db.rename_session(sid, req.title)
if req.project is not None:
project = req.project or None
if project and not tools.PROJECT_NAME.match(project):
raise HTTPException(400, "nom de projet invalide")
db.set_session_project(sid, project)
return {"ok": True}