Skip to content

Asterium360/Aster-Server

Repository files navigation

🌠 ASTERIUM SERVER

Node.js Express TypeScript Sequelize MySQL Cloudinary JWT

Asterium es una API REST desarrollada con Node.js, Express, TypeScript y Sequelize,
diseñada para gestionar descubrimientos astronómicos con autenticación, roles y carga de imágenes.


📚 Índice


✨ Descripción general

  • Usuarios con roles (admin y user).
  • CRUD completo de descubrimientos astronómicos.
  • Carga flexible de imágenes por archivo o URL (Cloudinary).
  • Validación de datos con Zod.
  • ORM Sequelize + MySQL.
  • Middlewares personalizados para autenticación, validación y seguridad.
  • Pruebas con Jest y Supertest.

🪐 Roles y permisos

Rol Listar Ver detalle Crear Editar Eliminar
Usuario ✅ (solo propios) ✅ (solo propios)
Admin ✅ (todos) ✅ (todos)

Solo los usuarios autenticados pueden crear, editar o eliminar sus propios descubrimientos.
Los administradores tienen control total sobre todos los registros.


⚙️ Tecnologías utilizadas

Categoría Tecnologías
Lenguaje TypeScript
Framework Express.js
ORM / DB Sequelize + MySQL
Validación Zod
Seguridad Helmet · CORS · JWT
Imágenes Cloudinary + Multer
Testing Jest · Supertest
Documentación Postman

🗂️ Estructura del proyecto

src/
 ├─ config/               # Configuración (p.ej. Cloudinary)
 ├─ controllers/          # Lógica de negocio (Asterium, Auth, Users)
 ├─ middlewares/          # Auth, roles, validaciones
 ├─ models/               # Modelos Sequelize
 ├─ routes/               # Endpoints
 ├─ schemas/              # Validaciones Zod
 ├─ seeders/              # Datos iniciales
 ├─ tests/                # Pruebas unitarias
 ├─ db.ts                 # Conexión MySQL
 ├─ app.ts                # Configuración Express
 └─ index.ts              # Punto de entrada

💻 Instalación y ejecución

1️⃣ Clonar el repositorio

git clone https://github.com/Asterium360/Aster-Server.git
cd Aster-Server

2️⃣ Instalar dependencias

npm install

3️⃣ Variables de entorno Crea un archivo .env en la raíz del proyecto con el siguiente contenido:

DB_NAME=asterium
DB_USER=root
DB_PASSWORD=tu_contraseña
DB_HOST=localhost
DB_PORT=3306
JWT_SECRET=tu_token_secreto
PORT=4000

4️⃣ Ejecutar el servidor

npm run dev

Servidor disponible en 👉 http://localhost:4000

☁️ Integración con Cloudinary

Multer + CloudinaryStorage

📁 Carpeta automática: Asterium_Discoveries

🌐 Se aceptan archivos locales y URLs externas:

const image_url = req.file?.path || body.image_url || null;

Si el usuario pega un link desde una web externa, la API también lo guarda sin subir archivo.

🚀 Endpoints principales

🔑 Autenticación – /auth

Método Endpoint Descripción Auth
POST /auth/register Registrar usuario
POST /auth/login Iniciar sesión (JWT)
PUT /auth/promote/:id Promover usuario a admin ✅ Solo admin

🌌 Descubrimientos – /asterium

Método Endpoint Descripción Auth
GET /asterium Lista de descubrimientos ✅ Logueados
GET /asterium/:id Ver detalle ✅ Logueados
POST /asterium Crear nuevo descubrimiento ✅ user/admin
PUT /asterium/:id Editar (propio) o admin ✅ user/admin
DELETE /asterium/:id Eliminar (propio) o admin ✅ user/admin

🗄️ Modelo de base de datos

📊 Diagrama en dbdiagram.io 📁 Ver colección en db.io

Table users {
  id int [pk, increment]
  email varchar(191) [unique, not null]
  username varchar(50) [unique, not null]
  password_hash varchar(100) [not null]
  role_id int
  display_name varchar(100)
  is_active boolean [default: true]
  created_at datetime
  updated_at datetime
}

Table roles {
  id int [pk, increment]
  name varchar(50) [unique, not null]
}

Table asteriums {
  id int [pk, increment]
  author_id int [not null]
  title varchar(255) [not null]
  excerpt text
  content_md text [not null]
  status varchar(20) [default: 'draft']
  image_url varchar(500)
  like_count int [default: 0]
  published_at datetime
  created_at datetime
  updated_at datetime
}

Table contact_messages {
  id int [pk, increment]
  user_id int [not null]
  name varchar(120) [not null]
  email varchar(191) [not null]
  subject varchar(200)
  message text [not null]
  status varchar(20) [default: 'new']
  created_at datetime
  updated_at datetime
}

Ref: users.role_id > roles.id
Ref: asteriums.author_id > users.id
Ref: contact_messages.user_id > users.id

🧪 Testing

Archivo Propósito auth.test.ts Registro, login y JWT asterium.test.ts CRUD de descubrimientos auth.ts Middleware de autenticación checkRole.ts Middleware de control de roles

Ejecutar pruebas:

npm run test

📬 Documentación Postman

📎 Ver colección en Postman

Esta colección incluye todos los endpoints organizados por módulos, con ejemplos funcionales, tokens de prueba y respuestas esperadas.

📦 Módulo 🌐 Endpoint ⚙️ Método 📝 Descripción
Usuarios (Auth) /auth/register POST Registra un nuevo usuario
Usuarios (Auth) /auth/login POST Inicia sesión y devuelve un token JWT
Usuarios (Auth) /auth/promote/:id PUT Promueve un usuario normal a admin
Descubrimientos (Asterium) /asterium GET Lista todos los descubrimientos
Descubrimientos (Asterium) /asterium/:id GET Obtiene el detalle de un descubrimiento
Descubrimientos (Asterium) /asterium POST Crea un nuevo descubrimiento
Descubrimientos (Asterium) /asterium/:id PUT Actualiza un descubrimiento existente
Descubrimientos (Asterium) /asterium/:id DELETE Elimina un descubrimiento

🔐 Autenticación

Las rutas protegidas requieren autenticación mediante token JWT:

Authorization: Bearer <tu_token>

Importar la colección manualmente:

Descarga el archivo Asterium_API.postman_collection.json

Abre Postman → pestaña Collections

Clic en Import → selecciona el archivo JSON

Verás todas las peticiones organizadas por módulos con ejemplos de uso. Ideal para equipos: asegura que todos trabajen con la misma versión documentada de la API.

👩💻 Equipo de desarrollo

Rol Integrante
🧭 Scrum Master Anggy Pereira
🚀 Backend Developer Maryori Cruz
🚀 Backend Developer Sofía Reyes

📜 Notas finales

Proyecto desarrollado en Factoría F5 – Bootcamp FullStack & DevOps (2025) Diseñado aplicando buenas prácticas de arquitectura, seguridad y documentación profesional.

✨ "El universo es infinito y nuestra curiosidad también." Asterium Backend Team – 2025

About

Proyecto full-stack dedicado a un blog sobre astronomía. Parte backend.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors