BookBase es una aplicación web de biblioteca digital que permite a los usuarios gestionar libros, escribir reseñas y dar "me gusta" a sus libros favoritos. El proyecto implementa una arquitectura limpia con separación de responsabilidades usando el patrón Repository y Service Layer.
- Framework: FastAPI
- ORM: SQLAlchemy 2.0
- Base de datos: PostgreSQL (usando PyMySQL)
- Arquitectura: Clean Architecture con patrones Repository y Service Layer
- Autenticación: JWT tokens con
bcryptpara hash de contraseñas
- Tecnologías: HTML5, CSS3, JavaScript (vanilla)
- Diseño: Responsive con gradientes modernos y efectos glassmorphism
- Funcionalidades: Búsqueda, filtros, visualización de libros
backend/
├── app/
│ ├── interfaces/
│ │ ├── Ibook_repository.py
│ │ ├── Ireview_repository.py
│ │ ├── Iuser_repository.py
│ │ └── Iuser_likes_repository.py
│ ├── models/
│ │ ├── book.py
│ │ ├── review.py
│ │ ├── user.py
│ │ └── user_likes.py
│ ├── schemas/
│ │ ├── book.py
│ │ ├── review.py
│ │ ├── user.py
│ │ └── user_likes.py
│ ├── repositories/
│ │ ├── book_repositor.py
│ │ ├── review_repository.py
│ │ ├── user_repository.py
│ │ └── user_likes_repository.py
│ └── services/
│ ├── book_service.py
│ ├── review_service.py
│ ├── user_service.py
│ └── user_likes_service.py
└── requirements.txt
frontend/
├── pages/
│ ├── landing.html
│ ├── login.html
│ └── registro.html
└── style.css
- id: int (PK)
- username: str (unique, 3-50 chars)
- email: str (unique)
- admin: bool (default: False)
- hashed_password: str
- reviews: List[Review] (relación 1:N)
- liked_books: List[Book] (relación N:M)- id: int (PK)
- title: str (unique, max 255 chars)
- link: HttpUrl (unique, opcional)
- description: str (max 1000 chars, opcional)
- reviews: List[Review] (relación 1:N)
- liked_by_users: List[User] (relación N:M)- id: int (PK)
- comment: str (max 500 chars, opcional)
- rating: float (1.0-5.0)
- created_at: datetime
- book_id: int (FK)
- user_id: int (FK)
- book: Book (relación N:1)
- user: User (relación N:1)- user_id: int (FK, PK)
- book_id: int (FK, PK)- Python 3.8+
- MySQL Server
- pip (gestor de paquetes de Python)
git clone <repository-url>
cd biblioteca-digital/backend
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txtCrear archivo .env:
DATABASE_URL=mysql+pymysql://username:password@localhost/biblioteca_db
SECRET_KEY=your-secret-key-here
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30python -c "from app.database import engine, Base; Base.metadata.create_all(bind=engine)"uvicorn app.main:app --reloadFrontend estático. Puede abrirse directamente en el navegador.
POST /auth/login- Iniciar sesiónPOST /auth/register- Registrar usuario
GET /users/{user_id}PUT /users/{user_id}DELETE /users/{user_id}
GET /books/GET /books/{book_id}POST /books/PUT /books/{book_id}DELETE /books/{book_id}
GET /reviews/book/{book_id}GET /reviews/user/{user_id}POST /reviews/PUT /reviews/{review_id}DELETE /reviews/{review_id}
POST /likes/DELETE /likes/{user_id}/{book_id}GET /likes/user/{user_id}GET /likes/book/{book_id}/count
- JWT Tokens
- bcrypt para hash de contraseñas
- Validación con Pydantic
- Email único
- Username (3-50 caracteres)
- Rating (1.0-5.0)
- URLs válidas
- Sanitización de entrada
- Efecto Glassmorphism
- Gradientes suaves
- Responsive
- Animaciones suaves
- Búsqueda en tiempo real
- Filtros por categoría
- Cards interactivas
- Estados visuales
tests/
├── unit/
│ ├── test_repositories/
│ ├── test_services/
│ └── test_schemas/
├── integration/
│ ├── test_api/
│ └── test_database/
└── fixtures/
└── test_data.py
pip install pytest pytest-asyncio httpx
pytest
pytest --cov=app- Configurar
.env - Usar Gunicorn + Uvicorn
- Logging, monitoreo
- Seguridad: CORS, middleware
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]- FastAPI (0.115.12)
- SQLAlchemy (2.0.40)
- Pydantic (2.11.4)
- PyMySQL (1.1.1)
- Uvicorn (0.34.2)