Skip to content

lapc18/py-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📇 Contacts OOP CRUD (Starter)

Proyecto básico para aprender POO en Python construyendo un CRUD de contactos en memoria con una interfaz de terminal.

Tu misión: implementar las clases y métodos marcados con TODO hasta que pasen todas las pruebas.

🎯 Fundamentos que practicarás

  • Diseño de clases y objetos
  • Encapsulación con @property y validaciones simples
  • Abstracción con una interfaz ContactRepository (ABC)
  • Composición / Inversión de dependencias: ContactService usa el repositorio
  • Dunder methods: __repr__, __eq__
  • Manejo de excepciones básicas
  • Pruebas con pytest (TDD-friendly)

🧱 Estructura

starter/
 ├─ src/
 │   └─ contacts/
 │       ├─ __init__.py
 │       ├─ contact.py          # Entidad Contact con validaciones
 │       ├─ exceptions.py       # Errores del dominio
 │       ├─ repository.py       # ABC + InMemoryContactRepository
 │       ├─ service.py          # ContactService (usa el repo)
 │       └─ cli.py              # CLI simple (create/list/update/delete/search)
 ├─ tests/
 │   ├─ test_contact.py
 │   └─ test_service.py
 ├─ pyproject.toml
 ├─ requirements.txt
 ├─ .editorconfig
 └─ .gitignore

🚀 Cómo correr

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt
pytest

Al inicio fallarán. Ve completando los TODO hasta que todo quede verde ✅.

🧪 Qué debes implementar

  1. Contact:

    • Campos: id: int, name: str, email: str, phone: str | None = None
    • Validaciones: name no vacío; email debe contener @
    • @property para name con setter que valida no vacío
    • __repr__ legible; __eq__ por id
  2. ContactRepository (ABC) + InMemoryContactRepository:

    • Métodos: add, get, list_all, update, delete, search_by_name
    • Implementación en memoria usando dict[int, Contact]
  3. ContactService:

    • Usa un repositorio inyectado por constructor
    • Reglas:
      • create_contact(name, email, phone) valida y delega a repo
      • update_contact(id, ...) valida y delega
      • delete_contact(id) delega; error si no existe
      • search(query) delega a repo
  4. cli.py (opcional pero recomendado):

    • Menú simple con input() para crear, listar, actualizar, borrar, buscar y salir
    • Puede usar ContactService como dependencia

✅ Definition of Done

  • pytest en verde
  • Código claro y legible
  • CLI funcional para un flujo básico

About

Proyecto básico para aprender POO en Python construyendo un CRUD de contactos en memoria con una interfaz de terminal.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages