Una API RESTful robusta para un sistema de blogs, construida con Node.js, Express y Prisma ORM (v7). Utiliza SQLite como base de datos por defecto para facilitar el desarrollo local.
- Gestión de Usuarios (Bio, Avatar, Roles).
- Gestión de Posts (Slug automático, Vistas, Categorías, Comentarios).
- Sistema de Comentarios.
- Clasificación por Categorías.
- Paginación y Filtrado en endpoints de listado.
- Arquitectura escalable con TypeScript.
-
Clona el repositorio:
git clone <url-del-repositorio> cd blog-api
-
Instala las dependencias:
npm install
-
Configura las variables de entorno:
- El archivo
.envya viene preconfigurado con:DATABASE_URL="file:./dev.db" SERVER_PORT=3000
- El archivo
-
Ejecuta las migraciones de Prisma y genera el cliente:
npx prisma migrate dev --name init npx prisma generate
-
(Opcional) Carga datos de prueba:
npm run seed
npm run dev: Inicia el servidor en modo desarrollo contsx watch.npm start: Inicia el servidor en modo producción.npm run build: Compila el proyecto TypeScript a JavaScript.npm run seed: Ejecuta el script de seeding de la base de datos.
GET /api/users: Listar todos los usuarios.GET /api/users/:id: Obtener detalles de un usuario específico (incluye sus posts publicados).
GET /api/posts: Listar posts (soporta query paramspage,limit,published).GET /api/posts/:slug: Obtener un post por su slug (incrementa el contador de vistas).POST /api/posts: Crear un nuevo post.PUT /api/posts/:id: Actualizar un post existente.DELETE /api/posts/:id: Eliminar un post.
erDiagram
User ||--o{ Post : "escribe"
User ||--o{ Comment : "escribe"
Post ||--o{ Comment : "tiene"
Post }o--o{ Category : "pertenece"
User {
Int id PK
String email UK
String password
String name
String bio
String avatar
Enum role
DateTime createdAt
}
Post {
Int id PK
String title
String slug UK
String content
String excerpt
Boolean published
Int views
Int authorId FK
DateTime createdAt
}
Category {
Int id PK
String name UK
String slug UK
}
Comment {
Int id PK
String content
Int postId FK
Int authorId FK
DateTime createdAt
}
ISC -prisma