Objetivos de Aprendizaje
Al finalizar esta clase, el estudiante habra demostrado:
- Dominio de Programacion Orientada a Objetos en Python
- Implementacion de API REST con FastAPI
- Uso de patrones de diseño: Repository, Factory, DTO
- Persistencia con SQLAlchemy ORM
- Aplicacion de Clean Architecture
Requisitos del Proyecto E6
Fecha de Entrega: Jueves 28 de Mayo de 2026, 7:00 AM
Descripcion General
Desarrollar una API REST para gestionar un sistema de tareas/proyectos que implemente:
- CRUD completo de al menos 2 entidades relacionadas
- Persistencia en SQLite con SQLAlchemy
- Arquitectura en capas (Controllers, Services, Repositories)
- DTOs con Pydantic
- Paginacion y filtros
- Manejo de errores HTTP
- Tests unitarios con pytest
Tecnologias Obligatorias
| Tecnologia | Version | Uso |
|---|---|---|
| Python | 3.10+ | Lenguaje principal |
| FastAPI | 0.100+ | Framework web |
| SQLAlchemy | 2.0+ | ORM |
| Pydantic | 2.0+ | Validacion/DTOs |
| pytest | 7.0+ | Testing |
| SQLite | 3.x | Base de datos |
Arquitectura Requerida
proyecto-final/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI app
│ ├── config.py # Configuracion
│ │
│ ├── domain/ # Capa Dominio
│ │ ├── __init__.py
│ │ ├── entities.py # Entidades de negocio
│ │ └── repositories.py # Interfaces (ABC)
│ │
│ ├── infrastructure/ # Capa Infraestructura
│ │ ├── __init__.py
│ │ ├── database.py # SQLAlchemy setup
│ │ ├── models.py # Modelos ORM
│ │ └── repositories_impl.py
│ │
│ ├── application/ # Capa Aplicacion
│ │ ├── __init__.py
│ │ ├── services.py # Logica de negocio
│ │ └── dtos.py # DTOs Pydantic
│ │
│ └── interfaces/ # Capa Presentacion
│ ├── __init__.py
│ └── controllers.py # Rutas FastAPI
│
├── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── test_services.py
│ └── test_controllers.py
│
├── requirements.txt
├── README.md
└── .gitignore
Clean Architecture: Las dependencias van de afuera hacia adentro.
El dominio NO depende de infraestructura.
Estructura de Entidades
# domain/entities.py
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
from enum import Enum
class Prioridad(str, Enum):
BAJA = "baja"
MEDIA = "media"
ALTA = "alta"
@dataclass
class Proyecto:
id: Optional[int]
nombre: str
descripcion: str
creado_en: datetime
tareas: list = None
def __post_init__(self):
if self.tareas is None:
self.tareas = []
@dataclass
class Tarea:
id: Optional[int]
titulo: str
descripcion: str
completada: bool
prioridad: Prioridad
proyecto_id: int
creado_en: datetime
actualizado_en: Optional[datetime] = None
Endpoints Requeridos
Proyectos
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /api/v1/proyectos | Listar (paginado) |
| GET | /api/v1/proyectos/{id} | Obtener por ID |
| POST | /api/v1/proyectos | Crear |
| PATCH | /api/v1/proyectos/{id} | Actualizar |
| DELETE | /api/v1/proyectos/{id} | Eliminar |
Tareas
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /api/v1/tareas | Listar (paginado + filtros) |
| GET | /api/v1/proyectos/{id}/tareas | Tareas de un proyecto |
| GET | /api/v1/tareas/{id} | Obtener por ID |
| POST | /api/v1/tareas | Crear |
| PATCH | /api/v1/tareas/{id} | Actualizar |
| DELETE | /api/v1/tareas/{id} | Eliminar |
Filtros Requeridos para GET /tareas
?completada=true/false?prioridad=alta/media/baja?proyecto_id=1?buscar=texto?pagina=1&por_pagina=10
Criterios de Evaluacion (100 pts)
| Criterio | Puntos | Descripcion |
|---|---|---|
| Arquitectura | 25 | Separacion en capas, dependencias correctas |
| Patrones | 20 | Repository, DTO, Factory implementados |
| Funcionalidad | 20 | CRUD completo, filtros, paginacion |
| Calidad Codigo | 15 | PEP 8, tipado, documentacion |
| Testing | 10 | Cobertura > 70%, tests significativos |
| Documentacion | 10 | README claro, instrucciones de uso |
Entregables:
- Repositorio GitHub con codigo fuente
- README con instrucciones de instalacion y uso
- Coleccion Postman/Insomnia para probar API
Formato de Presentacion
Duracion: 10-15 minutos por estudiante
- Introduccion (2 min) - Descripcion del proyecto
- Arquitectura (3 min) - Explicar capas y patrones
- Demo (5 min) - Mostrar API funcionando
- Codigo (3 min) - Explicar partes clave
- Tests (2 min) - Mostrar cobertura
- Preguntas (5 min) - Defensa del proyecto
Consejos:
- Prepara la demo antes de la clase
- Ten la base de datos con datos de prueba
- Conoce tu codigo - se capaz de explicarlo
Resumen del Curso
Lo que aprendimos:
| Unidad | Tema | Conceptos Clave |
|---|---|---|
| 0 | Introduccion | POO, Python, Entorno |
| 1 | POO Avanzado | Herencia, Polimorfismo, ABC |
| 2 | Calidad | TDD, DDD, Refactoring |
| 3 | FastAPI | Rutas, Dependencias, Validacion |
| 4 | Persistencia | SQLAlchemy, ORM, Alembic |
| 5 | Arquitectura | Repository, Clean Arch, DTOs |
¡Felicitaciones por completar el curso!
Recuerda que la programacion es una habilidad que se desarrolla con practica constante.
Recuerda que la programacion es una habilidad que se desarrolla con practica constante.