IF0100 - Programacion OO II

Unidad 5: Arquitectura de Datos Desconectados

Clase 5: Proyecto Final - E6

Martes, 09 de junio de 2026 Semana 19 - Martes (120 minutos) 60 min Teoría 60 min Práctica

Curso completado

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

TecnologiaVersionUso
Python3.10+Lenguaje principal
FastAPI0.100+Framework web
SQLAlchemy2.0+ORM
Pydantic2.0+Validacion/DTOs
pytest7.0+Testing
SQLite3.xBase 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

MetodoEndpointDescripcion
GET/api/v1/proyectosListar (paginado)
GET/api/v1/proyectos/{id}Obtener por ID
POST/api/v1/proyectosCrear
PATCH/api/v1/proyectos/{id}Actualizar
DELETE/api/v1/proyectos/{id}Eliminar

Tareas

MetodoEndpointDescripcion
GET/api/v1/tareasListar (paginado + filtros)
GET/api/v1/proyectos/{id}/tareasTareas de un proyecto
GET/api/v1/tareas/{id}Obtener por ID
POST/api/v1/tareasCrear
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)

CriterioPuntosDescripcion
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

  1. Introduccion (2 min) - Descripcion del proyecto
  2. Arquitectura (3 min) - Explicar capas y patrones
  3. Demo (5 min) - Mostrar API funcionando
  4. Codigo (3 min) - Explicar partes clave
  5. Tests (2 min) - Mostrar cobertura
  6. 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:

UnidadTemaConceptos Clave
0IntroduccionPOO, Python, Entorno
1POO AvanzadoHerencia, Polimorfismo, ABC
2CalidadTDD, DDD, Refactoring
3FastAPIRutas, Dependencias, Validacion
4PersistenciaSQLAlchemy, ORM, Alembic
5ArquitecturaRepository, Clean Arch, DTOs
¡Felicitaciones por completar el curso!
Recuerda que la programacion es una habilidad que se desarrolla con practica constante.