feat(api): implement notebook management CRUD endpoints
Implement Sprint 1: Notebook Management CRUD
- Add NotebookService with full CRUD operations
- Add POST /api/v1/notebooks (create notebook)
- Add GET /api/v1/notebooks (list with pagination)
- Add GET /api/v1/notebooks/{id} (get by ID)
- Add PATCH /api/v1/notebooks/{id} (partial update)
- Add DELETE /api/v1/notebooks/{id} (delete)
- Add Pydantic models for requests/responses
- Add custom exceptions (ValidationError, NotFoundError, NotebookLMError)
- Add comprehensive unit tests (31 tests, 97% coverage)
- Add API integration tests (26 tests)
- Fix router prefix duplication
- Fix JSON serialization in error responses
BREAKING CHANGE: None
This commit is contained in:
29
.opencode/templates/architecture-adr.md
Normal file
29
.opencode/templates/architecture-adr.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Architecture Decision Records
|
||||
|
||||
> Registro delle decisioni architetturali e dei pattern di design utilizzati.
|
||||
|
||||
## Formato
|
||||
|
||||
```markdown
|
||||
## [YYYY-MM-DD] - [Titolo Decisione]
|
||||
|
||||
### Contesto
|
||||
[Background e motivazione]
|
||||
|
||||
### Decisione
|
||||
[Cosa è stato deciso]
|
||||
|
||||
### Conseguenze
|
||||
- Positivo: [Benefici]
|
||||
- Negativo: [Trade-off]
|
||||
|
||||
### Alternative Considerate
|
||||
- [Alternativa 1]: [Perché scartata]
|
||||
- [Alternativa 2]: [Perché scartata]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Decisions
|
||||
|
||||
<!-- Aggiungere nuove decisioni qui in ordine cronologico crescente -->
|
||||
13
.opencode/templates/bug-ledger-entry.md
Normal file
13
.opencode/templates/bug-ledger-entry.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Bug Ledger Entry
|
||||
|
||||
> Template per documentare bug complessi risolti.
|
||||
|
||||
## YYYY-MM-DD: [Titolo Bug]
|
||||
|
||||
**Sintomo:** [Descrizione sintomo]
|
||||
|
||||
**Causa:** [Root cause]
|
||||
|
||||
**Soluzione:** [Fix applicato]
|
||||
|
||||
**Prevenzione:** [Come evitare in futuro]
|
||||
30
.opencode/templates/githistory-entry.md
Normal file
30
.opencode/templates/githistory-entry.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Git History Entry
|
||||
|
||||
> Template per documentare commit con contesto completo.
|
||||
|
||||
## YYYY-MM-DD HH:MM - type(scope): description
|
||||
|
||||
**Hash:** `commit-hash`
|
||||
**Autore:** @agent
|
||||
**Branch:** branch-name
|
||||
|
||||
### Contesto
|
||||
[Perché questo commit era necessario]
|
||||
|
||||
### Cosa cambia
|
||||
[Descrizione modifiche]
|
||||
|
||||
### Perché
|
||||
[Motivazione scelte]
|
||||
|
||||
### Impatto
|
||||
- [ ] Nuova feature
|
||||
- [ ] Bug fix
|
||||
- [ ] Refactoring
|
||||
- [ ] Breaking change
|
||||
|
||||
### File modificati
|
||||
- `file.py` - descrizione cambiamento
|
||||
|
||||
### Note
|
||||
[Riferimenti issue, considerazioni]
|
||||
98
.opencode/templates/progress-tracking.md
Normal file
98
.opencode/templates/progress-tracking.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# Progress Tracking
|
||||
|
||||
> Tracciamento progresso sviluppo in tempo reale.
|
||||
|
||||
## 🎯 Sprint/Feature Corrente
|
||||
|
||||
**Feature:** `[Nome feature in sviluppo]`
|
||||
**Iniziata:** `YYYY-MM-DD`
|
||||
**Stato:** 🔴 Pianificazione / 🟡 In sviluppo / 🟢 Completata
|
||||
**Assegnato:** `@agent`
|
||||
|
||||
---
|
||||
|
||||
## 📊 Progresso Complessivo
|
||||
|
||||
| Area | Progresso | Stato |
|
||||
|------|-----------|-------|
|
||||
| API Core | 0/10 task | 🔴 Non iniziato |
|
||||
| Webhook System | 0/5 task | 🔴 Non iniziato |
|
||||
| AI Skill | 0/3 task | 🔴 Non iniziato |
|
||||
| Testing | 0/8 task | 🔴 Non iniziato |
|
||||
| Documentazione | 0/4 task | 🔴 Non iniziato |
|
||||
|
||||
**Completamento Totale:** 0%
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Attività in Corso
|
||||
|
||||
### Task Corrente: `[ID-XXX] - Titolo`
|
||||
|
||||
| Campo | Valore |
|
||||
|-------|--------|
|
||||
| **ID** | TASK-XXX |
|
||||
| **Descrizione** | [Breve descrizione] |
|
||||
| **Iniziata** | YYYY-MM-DD HH:MM |
|
||||
| **Assegnato** | @agent |
|
||||
| **Stato** | 🟡 In progress |
|
||||
| **Bloccata da** | Nessuna / TASK-YYY |
|
||||
| **Note** | [Eventuali ostacoli, decisioni] |
|
||||
|
||||
**Passi completati:**
|
||||
- [ ] Passo 1
|
||||
- [ ] Passo 2
|
||||
- [ ] Passo 3
|
||||
|
||||
---
|
||||
|
||||
## ✅ Task Completate (Oggi)
|
||||
|
||||
| ID | Task | Completata | Commit | Assegnato |
|
||||
|----|------|------------|--------|-----------|
|
||||
| | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 📅 Prossime Task
|
||||
|
||||
| Priority | ID | Task | Stima | Dipendenze |
|
||||
|----------|----|------|-------|------------|
|
||||
| P1 | | | | |
|
||||
| P2 | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 🚧 Blocchi/Issue
|
||||
|
||||
| ID | Problema | Impatto | Soluzione Proposta | Stato |
|
||||
|----|----------|---------|-------------------|-------|
|
||||
| | | | | 🔴 Aperto |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Decisioni Prese Oggi
|
||||
|
||||
| Data | Decisione | Motivazione | Impatto |
|
||||
|------|-----------|-------------|---------|
|
||||
| | | | |
|
||||
|
||||
---
|
||||
|
||||
## 📈 Metriche
|
||||
|
||||
### Sprint Corrente
|
||||
- **Task pianificate:** 0
|
||||
- **Task completate:** 0
|
||||
- **Task in progress:** 0
|
||||
- **Task bloccate:** 0
|
||||
|
||||
### Qualità
|
||||
- **Test Coverage:** 0%
|
||||
- **Test passanti:** 0/0
|
||||
- **Linting:** ✅ / ❌
|
||||
- **Type Check:** ✅ / ❌
|
||||
|
||||
---
|
||||
|
||||
*Ultimo aggiornamento: YYYY-MM-DD HH:MM*
|
||||
Reference in New Issue
Block a user