Este repositorio contiene el Backend (API REST con Express) de Readify.
Se encarga de toda la lógica de la app, gestión de datos y autenticación de usuarios.
- Usuarios (registro, login, autenticación)
- Libros (consulta y búsqueda)
- Biblioteca personal del usuario
- Progreso de lectura
- Estanterías personalizadas (shelves)
- (Opcional) Integración con IA para recomendaciones o chat
Este repositorio corresponde EXCLUSIVAMENTE al Backend (Express API).
El Frontend (React) se encuentra aquí: -> https://github.com/danielbailon06/readify-client
- Clonar el repositorio git clone https://github.com/tu-usuario/readify-backend.git cd readify-backend
- Instalar dependencias npm install
- Variables de entorno
Crea un archivo .env en la raíz con:
PORT=5005 MONGODB_URI=mongodb://127.0.0.1:27017/readify TOKEN_SECRET=super_secret_key OPENAI_API_KEY=tu_api_key_opcional
PORT → Puerto del servidor MONGODB_URI → Conexión a la base de datos Puedes usar MongoDB local o MongoDB Atlas TOKEN_SECRET → Clave para firmar tokens JWT OPENAI_API_KEY → Solo necesario si usas funcionalidades de IA 4. Ejecutar el servidor npm run dev
Servidor disponible en:
API desplegada en: -> https://readify-backend-ten.vercel.app
- Node.js
- Express
- MongoDB + Mongoose
- JSON Web Tokens (JWT)
- Bcrypt (hash de contraseñas)
- CORS
- Dotenv
POST /api/auth/signup → Registro de usuario → Crea usuario con avatar por defecto si no se proporciona POST /api/auth/login → Login → Devuelve authToken (JWT) GET /api/auth/verify → Devuelve los datos del usuario autenticado
GET /api/books → Obtener todos los libros
Permite búsqueda:
/api/books?search=romance GET /api/books/:bookId → Obtener detalle de un libro
GET /api/users → Devuelve 3 usuarios aleatorios (para descubrir otros lectores)
GET /api/users/:userId → Obtener perfil completo → Incluye: wantToRead currentlyReading read
PUT /api/users/:userId → Editar perfil → Campos:
{ "username": "", "email": "", "profileImage": "", "bio": "", "location": "" }
Añadir o mover libro POST /api/users/:userId/reading-status 🔒
Body:
{ "bookId": "id_del_libro", "status": "wantToRead | currentlyReading | read" }
Mueve el libro automáticamente entre listas
DELETE /api/users/:userId/reading-status/:bookId
Elimina el libro de todas las listas
PUT /api/users/:userId/progress/:bookId
Body:
{ "currentPage": 120 }
Guarda el progreso en readingProgress (Map en MongoDB)
Gestión de estanterías GET /api/shelves → Obtener todas las shelves del usuario
POST /api/shelves → Crear nueva shelf
{ "name": "Romance cozy", "description": "Libros para leer con mantita" } GET /api/shelves/:shelfId → Obtener detalle de una shelf PUT /api/shelves/:shelfId → Editar shelf DELETE /api/shelves/:shelfId → Eliminar shelf Libros en shelves
POST /api/shelves/:shelfId/books → Añadir libro
{ "bookId": "id_del_libro" } DELETE /api/shelves/:shelfId/books/:bookId → Quitar libro
POST /api/chat
Body:
{ "message": "Recomiéndame algo cozy", "previousResponseId": "opcional" }
Devuelve:
respuesta del asistente (Lumi) memoria actualizada del usuario
GET /api/chat/history
Devuelve:
historial de conversación memoria del usuario (gustos, mood, etc.)
GET / → Test del servidor → Respuesta: "All good in here" Autenticación