feat(api): add source management endpoints (Sprint 2)

Implement Sprint 2: Source Management

- Add SourceService with create, list, delete, research methods
- Add POST /api/v1/notebooks/{id}/sources - Add source (URL, YouTube, Drive)
- Add GET /api/v1/notebooks/{id}/sources - List sources with filtering
- Add DELETE /api/v1/notebooks/{id}/sources/{source_id} - Delete source
- Add POST /api/v1/notebooks/{id}/sources/research - Web research
- Add ResearchRequest model for research parameters
- Integrate sources router with main app

Endpoints:
- POST /sources - 201 Created
- GET /sources - 200 OK with pagination
- DELETE /sources/{id} - 204 No Content
- POST /sources/research - 202 Accepted

Technical:
- Support for url, youtube, drive source types
- Filtering by source_type and status
- Validation for research mode (fast/deep)
- Error handling with standardized responses

Related: Sprint 2 - Source Management
This commit is contained in:
Luca Sacchi Ricciardi
2026-04-06 01:26:59 +02:00
parent fe88bf2ca1
commit d869ab215c
5 changed files with 913 additions and 1 deletions

View File

@@ -0,0 +1,106 @@
# Prompt Sprint 2 - Source Management
## 🎯 Sprint 2: Source Management
**Iniziato**: 2026-04-06
**Stato**: 🟡 In Progress
**Assegnato**: @sprint-lead
---
## 📋 Obiettivo
Implementare la gestione delle fonti (sources) per i notebook, permettendo agli utenti di aggiungere URL, PDF, YouTube, Google Drive e avviare ricerche web.
---
## 🏗️ Architettura
### Pattern da seguire (stesso di Sprint 1)
```
API Layer (FastAPI Routes)
Service Layer (SourceService)
External Layer (notebooklm-py client)
```
### Endpoints da implementare
1. **POST /api/v1/notebooks/{id}/sources** - Aggiungere fonte
2. **GET /api/v1/notebooks/{id}/sources** - Listare fonti
3. **DELETE /api/v1/notebooks/{id}/sources/{source_id}** - Rimuovere fonte
4. **GET /api/v1/notebooks/{id}/sources/{source_id}/fulltext** - Ottenere testo
5. **POST /api/v1/notebooks/{id}/sources/research** - Ricerca web
---
## 📊 Task Breakdown Sprint 2
### Fase 1: Specifiche
- [ ] SPEC-004: Analisi requisiti Source Management
- [ ] SPEC-005: Definire modelli dati fonti
### Fase 2: API Design
- [ ] API-003: Modelli Pydantic (SourceCreate, Source, ecc.)
- [ ] API-004: Documentazione endpoints
### Fase 3: Implementazione
- [ ] DEV-007: SourceService
- [ ] DEV-008: POST /sources
- [ ] DEV-009: GET /sources
- [ ] DEV-010: DELETE /sources/{id}
- [ ] DEV-011: POST /sources/research
### Fase 4: Testing
- [ ] TEST-004: Unit tests SourceService
- [ ] TEST-005: Integration tests
---
## 🔧 Implementazione
### Tipi di Fonti Supportate
```python
class SourceType(str, Enum):
URL = "url"
FILE = "file" # PDF, DOC, etc.
YOUTUBE = "youtube"
DRIVE = "drive"
```
### SourceService Methods
```python
class SourceService:
async def create(notebook_id: UUID, data: dict) -> Source
async def list(notebook_id: UUID) -> list[Source]
async def get(notebook_id: UUID, source_id: str) -> Source
async def delete(notebook_id: UUID, source_id: str) -> None
async def get_fulltext(notebook_id: UUID, source_id: str) -> str
async def research(notebook_id: UUID, query: str, mode: str) -> ResearchResult
```
---
## 📝 Note Importanti
1. **Riusare pattern Sprint 1**: Stessa struttura NotebookService
2. **Gestione upload file**: Supportare multipart/form-data per PDF
3. **Ricerca web**: Integrare con notebooklm-py research
4. **Error handling**: Fonte già esistente, formato non supportato
---
## 🚀 Prossimi Passi
1. @sprint-lead: Attivare @api-designer per API-003
2. @api-designer: Definire modelli Pydantic
3. @tdd-developer: Iniziare implementazione SourceService
---
**Dipende da**: Sprint 1 (Notebook CRUD) ✅
**Blocca**: Sprint 3 (Chat) 🔴