Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 106 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,110 @@
# Obelisco-api
# Proyecto Node.js + MariaDB

## Crear base de datos
Este proyecto implementa un backend desarrollado en Node.js con TypeScript, utilizando MariaDB como base de datos. A continuación se detallan los pasos para configurar, instalar dependencias y ejecutar el entorno en modo producción.

En psql o similar:
CREATE DATABASE obelisco_db_testing;
---

## Seed base de datos
## 📦 Requisitos

npm run seed
- Node.js (v18 o superior)
- npm (v9 o superior)
- MariaDB (v11.8.2 o compatible)

---

## 🗃️ Base de datos

### 1. Crear la base de datos y tablas

El archivo de configuración SQL se encuentra en:

database/config.sql

Podés ejecutar el script usando el cliente de MariaDB:

```bash

mysql -u tu_usuario -p < database/config.sql

```

---

### Esto creará:

- La base de datos
- Las tablas necesarias
- Los registros iniciales

## Levantar el proyecto

```bash

cd source/

```

### Instalar dependencias

```bash

npm install

```

## Configurar las variables de entorno

Creá un archivo .env en la raíz del directorio source/ con las siguientes variables:

```bash

env
NODE_ENV=production
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=tu_usuario
DB_PASSWORD=tu_password
DB_NAME=nombre_de_base

```

Asegurate de que NODE_ENV esté en production para el entorno productivo.

## Iniciar el servidor

```bash

npm start

```

📁 Estructura del proyecto
├── database/
│ └── config.sql # Script de creación de base de datos y tablas
├── source/
│ ├── dist/ # Código compilado (si está presente)
│ ├── .env # Variables de entorno
│ ├── package.json
│ └── ...

### RUTA RAIZ

```bash
# Ruta raíz
http://localhost:3000/api/
```

```bash
# Ruta no existente
http://localhost:3000/api/
```

```bash
# Ruta footer completo
http://localhost:3000/api/footer/complete
```

```bash
# Ruta footer legales
http://localhost:3000/api/footer/legales
```
9 changes: 8 additions & 1 deletion api.http
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,11 @@ GET http://localhost:3000/api/footer/legales


### RUTA header
GET http://localhost:3000/api/header/complete
GET http://localhost:3000/api/header/complete
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywidXJsIjoiaHR0cHM6Ly9taS1mcm9udGVuZC5jb20iLCJpYXQiOjE3NTc5NjIwNzIsImV4cCI6MTc1Nzk2NTY3Mn0.76rmtC6h_gScmso5sKT5g0cVWZAdsDYgdopAabap5Yg


### RUTA AUTH
GET http://localhost:3000/api/auth/login
Origin: https://mi-frontend.com
Referer: https://mi-frontend.com/dashboard
113 changes: 113 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"devDependencies": {
"@types/cors": "^2.8.18",
"@types/express": "^5.0.1",
"@types/jsonwebtoken": "^9.0.10",
"@types/module-alias": "^2.0.4",
"@types/node": "^22.15.3",
"@types/swagger-jsdoc": "^6.0.4",
Expand Down Expand Up @@ -35,6 +36,7 @@
"cors": "^2.8.5",
"dotenv": "^16.5.0",
"express": "^5.1.0",
"jsonwebtoken": "^9.0.2",
"mariadb": "^3.4.2",
"module-alias": "^2.2.3",
"mysql2": "^3.14.1",
Expand Down
29 changes: 29 additions & 0 deletions src/controllers/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Request, Response } from 'express';
import { login as loginS } from '@services/auth';
import sendResponse from '@utils/sendResponse';

const login = (req: Request, res: Response) => {
// const referer = req.get('referer'); // o "referrer"
const origin = req.get('origin');
if (!origin) {
sendResponse(res, 400, {
status: 'error',
message: 'API Obelisco: No se espesifico un origen',
});
return;
}
try {
const response = loginS({ credential: origin });
sendResponse(res, 200, {
token: response,
});
} catch (error) {
console.log('[ERROR]: ', error);
sendResponse(res, 500, {
status: 'error',
message: 'API Obelisco: Error al intentar validar credencial',
});
}
};

export { login };
2 changes: 1 addition & 1 deletion src/controllers/headeer.ts → src/controllers/header.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export const getComplete = async (req: Request, res: Response) => {
} catch (error) {
sendResponse(res, 500, {
status: 'error',
message: 'API Obelisco: Error al obtener footer.',
message: 'API Obelisco: Error al obtener headeer.',
});
}
};
25 changes: 25 additions & 0 deletions src/middlewares/jwt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import 'dotenv/config';
import { JWT_PAYLOAD } from '@utils/types';

const verifyToken = (req: Request, res: Response, next: NextFunction) => {
const token = req.headers.authorization?.split(' ')[1];

if (!token) {
return next(new Error('No token'));
}

try {
const decoded = jwt.verify(
token,
process.env.JWT_SECRET || ''
) as JWT_PAYLOAD;
req.user = decoded;
next();
} catch (error) {
return next(new Error('Invalid token'));
}
};

export { verifyToken };
8 changes: 8 additions & 0 deletions src/routes/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { login } from '@controllers/auth';
import express from 'express';

const router = express.Router();

router.get('/login', login);

export default router;
Loading