Esta es una API RESTful construida con TypeScript, Express y PrismaORM. Permite realizar operaciones CRUD (Crear, Leer, Actualizar, Borrar) en un conjunto de noticias.
- Node.js v20+
- npm v10+
- SQLite (opcional, Prisma se encargará de crear la base de datos)
- Clona el repositorio:
git clone git@github.com:IonVillarreal/news-api.git
cd news-api
- Instala las dependencias:
npm install
- Configura Prisma:
npx prisma migrate dev --name init
npx prisma generate
- Carga los datos iniciales (opcional):
npm run seed
Para iniciar el servidor en modo desarrollo:
npm run dev
Para compilar el código TypeScript:
npm run build
Para iniciar el servidor en modo producción:
npm start
Para aplicar las migraciones de Prisma:
npm run migrate
Para generar el cliente Prisma después de modificar el esquema:
npm run generate
Para cargar datos iniciales en la base de datos:
npm run seed
curl --location 'http://localhost:3000/auth/login' \
--header 'Content-Type: application/json' \
--data '{
"username": "testuser1",
"password": "password1"
}'
curl --location 'http://localhost:3000/user/me' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImlhdCI6MTcyODMyNDcwNSwiZXhwIjoxNzI4MzI4MzA1fQ.EFj2Re2yDaq341_7YXfSjIsoAD3AI51qXI60-WvQJQ4'
GET /news
Parámetros opcionales de paginación:
page
: Número de página (por defecto: 1)pageSize
: Tamaño de la página (por defecto: 10)
Ejemplo de petición:
curl --location 'http://localhost:3000/news?page=1&pageSize=5'
GET /news/:id
Ejemplo de petición:
curl --location 'http://localhost:3000/news/1'
POST /news
Cuerpo de la solicitud:
{
"title": "Título de la noticia",
"description": "Descripción de la noticia",
"date": "2024-05-17T00:00:00.000Z"
}
Ejemplo de petición:
curl --location --request POST 'http://localhost:3000/news' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "Nueva noticia",
"description": "Descripción de la nueva noticia",
"date": "2024-10-07T12:00:00.000Z"
}'
PUT /news/:id
Cuerpo de la solicitud:
{
"title": "Nuevo título de la noticia",
"description": "Nueva descripción de la noticia",
"date": "2024-05-17T00:00:00.000Z"
}
Ejemplo de petición:
curl --location --request PUT 'http://localhost:3000/news/1' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "Título actualizado",
"description": "Descripción actualizada",
"date": "2024-10-07T12:00:00.000Z"
}'
DELETE /news/:id
Ejemplo de petición:
curl --location --request DELETE 'http://localhost:3000/news/1'