Skip to content
DantrotelPublic

About

Plataforma web para coordinar y gestionar los procesos de titulación de las carreras de informática de la Universidad del Bío-Bío

Topics

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

AcTitUBB - Sistema para las actividades de titulación en la Universidad del Bío-Bío

Universidad del Bío-Bío

Universidad del Bío-Bío

Plataforma de apoyo completa para la gestión de propuestas de tesis, proyectos de título y seguimiento académico

Docker Angular Node.js MySQL TypeScript
Último Commit Tamaño del Repo


Índice


Capturas de Pantalla del Sistema

A continuación se muestran todas las vistas y flujos principales de la plataforma:

Acceso y Páginas Principales (Haz clic para expandir)

Login

Login

Home Estudiante

Home Estudiante

Home Profesor

Home Profesor

Home Jefe de Curso

Home Jefe de Curso

Gestión de Propuestas y Proyectos (Haz clic para expandir)

Formulario de Propuesta

Formulario Propuesta

Periodo de Propuestas

Periodo Propuestas

Gestión de Proyecto

Gestión de Proyecto

Gestión Proyectos (Vista Profesor)

Gestión Proyectos Profe

Propuestas Asignadas

Propuestas Asignadas

Asignaciones y Comisiones (Haz clic para expandir)

Asignación de Evaluador

Asignacion Evaluador

Asignación de Informante

Asignacion Informante

Comisión

Comision

Administración y Calendario (Haz clic para expandir)

Gestión de Alumnos

Gestion de Alumnos

Gestión de Profesores

Gestion de Profesores

Gestión de Horarios

Gestion de Horarios

Calendario General

Calendario


Descripción

AcTitUBB es una aplicación web avanzada diseñada para el apoyo de la gestión académica en la Universidad del Bío-Bío. El sistema abarca desde la creación de propuestas de tesis hasta el seguimiento de hitos, calendario académico, y gestión de archivos, proporcionando una experiencia integral para estudiantes, profesores y administradores.

Características Principales

Gestión de Propuestas

  • Creación, edición y seguimiento completo de propuestas
  • Estados de propuesta: Borrador, En Revisión, Aprobada, Rechazada
  • Gestión avanzada de archivos con validaciones estrictas
  • Sistema de comentarios bidireccional profesor-estudiante

Sistema de Hitos de Proyectos

  • Definición y seguimiento de hitos por proyecto
  • Entrega de archivos con validaciones automáticas
  • Control de fechas límite y estados dinámicos
  • Visualización de progreso en tiempo real
  • Revisión y calificación por parte de profesores

Sistema de Fechas Importantes

  • Gestión centralizada del calendario académico
  • Fechas específicas por proyecto y globales
  • Marcado de fechas como completadas
  • Notificaciones automáticas de vencimientos
  • Vista responsive para móviles y escritorio

Gestión de Usuarios Avanzada

  • Autenticación JWT segura con blacklist
  • ‍ Estudiantes: Dashboard personalizado, entrega de hitos, seguimiento
  • ‍ Profesores: Revisión de entregas, gestión de cronogramas
  • Administradores: Control total del sistema y asignaciones

Dashboard Inteligente

  • Estadísticas en tiempo real por rol
  • Resumen de actividades pendientes
  • Métricas de progreso visual
  • Interfaz completamente responsive

Stack Tecnológico Avanzado

Frontend (Angular 18+)

Tecnología Versión Propósito
Angular 18.2+ Framework principal SPA
TypeScript 5.0+ Tipado estático y desarrollo robusto
Angular Material 18+ Componentes UI consistentes
SCSS Latest Estilos avanzados con variables
Vite Latest Build tool ultra-rápido
Nginx 1.21+ Servidor web optimizado

Backend (Node.js)

Tecnología Versión Propósito
Node.js 20+ Runtime JavaScript del servidor
Express.js 4.18+ Framework web minimalista
MySQL2 3.6+ Driver MySQL optimizado
JWT 9.0+ Autenticación segura
Multer 1.4+ Manejo de archivos
Nodemailer 6.9+ Sistema de emails

Base de Datos y DevOps

Tecnología Versión Propósito
MySQL 8.0+ Base de datos relacional
Docker 24+ Contenedorización
Docker Compose 2.0+ Orquestación de servicios

Arquitectura del Sistema

Flujo de Datos

graph TD
    A[Estudiante / Profesor] -->|HTTPS| B(Nginx / Angular Frontend)
    B -->|API REST| C{Node.js + Express Backend}
    C -->|Validaciones| D[JWT / Middlewares]
    D -->|Lectura/Escritura| E[(MySQL Database)]
    C -->|Subida de Archivos| F[Uploads Storage]
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#dd0031,stroke:#333,stroke-width:2px,color:#fff
    style C fill:#026e00,stroke:#333,stroke-width:2px,color:#fff
    style E fill:#00758f,stroke:#333,stroke-width:2px,color:#fff
Loading

Estructura Completa del Proyecto

AcTitUBB/
├──  backend/                          # API REST con Node.js
│   ├──  src/
│   │   ├──  controllers/              # Controladores MVC
│   │   │   ├── admin.controller.js      # Gestión administrativa
│   │   │   ├── calendario.controller.js  # Fechas importantes
│   │   │   ├── login.controller.js      # Autenticación
│   │   │   ├── project.controller.js    # Proyectos y hitos
│   │   │   ├── propuesta.controller.js  # Propuestas de tesis
│   │   │   └── role.controller.js       # Gestión de roles
│   │   ├──  services/                 # Lógica de negocio
│   │   │   ├── email.service.js         # Notificaciones por email
│   │   │   ├── project.service.js       # Lógica de proyectos
│   │   │   ├── propuesta.service.js     # Lógica de propuestas
│   │   │   └── RutVal.service.js        # Validación RUT chileno
│   │   ├──  models/                   # Modelos de datos
│   │   │   ├── avance.model.js          # Modelo de avances
│   │   │   ├── calendario.model.js      # Modelo de fechas
│   │   │   ├── fecha-importante.model.js # Fechas importantes
│   │   │   ├── project.model.js         # Modelo de proyectos
│   │   │   ├── propuesta.model.js       # Modelo de propuestas
│   │   │   ├── role.model.js            # Modelo de roles
│   │   │   └── user.model.js            # Modelo de usuarios
│   │   ├──  routes/                   # Definición de endpoints
│   │   │   ├── admin.route.js           # Rutas administrativas
│   │   │   ├── calendario.route.js      # Rutas de calendario
│   │   │   ├── download.route.js        # Descarga de archivos
│   │   │   ├── login.route.js           # Rutas de autenticación
│   │   │   ├── project.route.js         # Rutas de proyectos
│   │   │   ├── propuesta.routes.js      # Rutas de propuestas
│   │   │   └── role.route.js            # Rutas de roles
│   │   ├──  middlewares/              # Middlewares personalizados
│   │   │   ├── blacklist.js             # JWT blacklist
│   │   │   ├── uploader.js              # Subida de archivos
│   │   │   └── verifySession.js         # Verificación de sesión
│   │   ├──  db/                       # Base de datos
│   │   │   ├── connectionDB.js          # Pool de conexiones
│   │   │   └── database.sql             # Schema completo
│   │   └── index.js                     # Servidor principal
│   ├──  uploads/                      # Archivos del sistema
│   │   └──  propuestas/               # Documentos de propuestas
│   ├── dockerfile                       # Imagen Docker backend
│   └── package.json                     # Dependencias Node.js
│
├──  frontend/                         # Aplicación Angular
│   ├──  src/app/
│   │   ├──  pages/                    # Páginas principales
│   │   │   ├──  estudiante/           # Módulo estudiante
│   │   │   │   └──  home/             # Dashboard estudiante
│   │   │   ├──  profesor/             # Módulo profesor
│   │   │   │   └──  cronograma/       # Gestión de cronogramas
│   │   │   ├──  admin/                # Panel administrativo
│   │   │   │   ├──  asignaciones/     # Asignación profesor-estudiante
│   │   │   │   ├──  gestion-calendario/ # Calendario global
│   │   │   │   └──  gestion-profesores/ # Gestión de profesores
│   │   │   ├──  propuestas/           # CRUD de propuestas
│   │   │   ├──  login/                # Autenticación
│   │   │   └──  register/             # Registro de usuarios
│   │   ├──  services/                 # Servicios Angular
│   │   │   └── api.ts                   # Cliente HTTP centralizado
│   │   ├──  guards/                   # Guards de seguridad
│   │   │   └── auth.guard.ts            # Protección de rutas
│   │   ├──  interceptors/             # Interceptors HTTP
│   │   │   └── auth.interceptor.ts      # Inyección automática de JWT
│   │   └──  components/               # Componentes reutilizables
│   │       └──  calendar-modal/       # Modal de calendario
│   ├──  public/                       # Recursos estáticos
│   │   ├── Escudo_Universidad_del_Bío-Bío.png
│   │   └── favicon.ico
│   ├── dockerfile                       # Imagen Docker frontend
│   ├── nginx.conf                       # Configuración Nginx
│   ├── angular.json                     # Configuración Angular
│   ├── vite.config.ts                   # Configuración Vite
│   └── package.json                     # Dependencias Angular
│
├──  mysql/                            # Configuración MySQL
│   └──  init.sql/                     # Scripts de inicialización
├── docker-compose.yml                   # Orquestación completa
└── README.md                            # Documentación (este archivo)

Roles y Funcionalidades Detalladas

Estudiante

Dashboard Personalizado

  • Vista general: Resumen de propuestas, hitos y fechas importantes
  • Progreso visual: Indicadores de avance por proyecto
  • Notificaciones: Alertas de vencimientos y actualizaciones

Gestión de Propuestas

  • Crear propuestas: Formulario completo con validaciones
  • Adjuntar archivos: PDF, Word con validaciones de tamaño
  • Seguimiento: Estados en tiempo real y comentarios

Sistema de Hitos

  • Entrega de hitos: Subida de archivos con validaciones estrictas
  • Control de fechas: Visualización de deadlines y tiempo restante
  • Estados dinámicos: Pendiente, Entregado, En Revisión, Aprobado, Vencido
  • Comentarios: Comunicación bidireccional con profesores

Calendario Personal

  • Fechas importantes: Vista personalizada por proyecto
  • Completar fechas: Marcado de hitos cumplidos
  • Filtros avanzados: Por proyecto, estado, fecha

‍ Profesor

Panel de Gestión

  • Propuestas asignadas: Lista completa con filtros
  • Estudiantes: Vista de todos los estudiantes asignados
  • Estadísticas: Métricas de desempeño y progreso

Revisión de Hitos

  • Evaluar entregas: Sistema de calificación integrado
  • Feedback detallado: Comentarios estructurados
  • Aprobación/Rechazo: Flujo de trabajo simplificado
  • Seguimiento de progreso: Vista cronológica de avances

Gestión de Cronogramas

  • Crear fechas específicas: Por estudiante o proyecto
  • Definir hitos: Configuración de deliverables
  • Notificaciones automáticas: Alertas de vencimientos
  • Dashboard de seguimiento: Vista general de todos los proyectos

Administrador

Gestión de Usuarios

  • CRUD completo: Crear, editar, eliminar usuarios
  • Gestión de roles: Asignación y modificación de permisos
  • Estadísticas de uso: Métricas del sistema

Asignaciones Académicas

  • Profesor-Estudiante: Sistema de asignación inteligente
  • Gestión de proyectos: Vista global de todos los proyectos
  • Reportes: Estadísticas de rendimiento académico

Calendario Global

  • Fechas institucionales: Gestión del calendario académico
  • Eventos globales: Fechas que afectan a todos los usuarios
  • Notificaciones masivas: Comunicados importantes

Instalación y Despliegue

Prerrequisitos

Instalación con Docker (Recomendado)

  1. Clonar el repositorio

    git clone https://github.com/Dantrotel/AcTitUBB.git
    cd AcTitUBB
  2. Configurar variables de entorno (opcional)

    # Crear archivo .env en /backend/ si necesitas configuraciones específicas
    cp backend/.env.example backend/.env
  3. Levantar todos los servicios

    docker-compose up --build
  4. Acceder a la aplicación

Desarrollo Local (Sin Docker)

Click para expandir instrucciones de desarrollo local

Prerrequisitos de desarrollo:

  • Node.js 20+
  • MySQL 8.0+
  • Angular CLI 18+

Backend:

cd backend
npm install
npm run dev

Frontend:

cd frontend
npm install
ng serve
# O con Vite (más rápido)
npm run dev

Base de Datos:

# Instalar MySQL 8.0+
mysql -u root -p < backend/src/db/database.sql

# Configurar variables en backend/.env
DB_HOST=localhost
DB_PORT=3306
DB_NAME=actitubb
DB_USER=root
DB_PASSWORD=tu_password

Configuración Avanzada

Note

La configuración detallada de Docker, NGINX y variables de entorno ha sido movida a su propio documento para mayor comodidad. 📄 Ver Guía de Configuración Avanzada


Documentación de API Completa

Autenticación

Endpoint Método Descripción Body Respuesta
/api/v1/login POST Iniciar sesión {email, password} JWT Token
/api/v1/register POST Registro de usuario {usuario, email, password, rut} Usuario creado
/api/v1/logout POST Cerrar sesión - Token invalidado

Ejemplo de Login:

POST /api/v1/login
{
  "email": "estudiante@alumnos.ubiobio.cl",
  "password": "contraseña123"
}

// Respuesta exitosa
{
  "success": true,
  "message": "Login exitoso",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": 1,
      "usuario": "estudiante",
      "email": "estudiante@alumnos.ubiobio.cl",
      "rol": "estudiante"
    }
  }
}

Gestión de Propuestas

Endpoint Método Descripción Rol Requerido Parámetros
/api/v1/propuestas GET Listar propuestas Todos ?estado=, ?page=, ?limit=
/api/v1/propuestas POST Crear propuesta Estudiante FormData con archivo
/api/v1/propuestas/:id GET Obtener propuesta Todos -
/api/v1/propuestas/:id PUT Editar propuesta Estudiante/Admin FormData
/api/v1/propuestas/:id/comentarios POST Agregar comentario Profesor/Admin {comentario}
/api/v1/propuestas/:id/estado PUT Cambiar estado Profesor/Admin {estado}

Sistema de Hitos

Endpoint Método Descripción Rol Requerido Body/Params
/api/v1/projects/:projectId/hitos GET Listar hitos Todos -
/api/v1/projects/:projectId/hitos POST Crear hito Profesor/Admin {nombre, descripcion, fecha_limite}
/api/v1/hitos/:hitoId/entregar POST Entregar hito Estudiante FormData con archivo
/api/v1/hitos/:hitoId/revisar POST Revisar hito Profesor {aprobado, calificacion, comentarios}
/api/v1/hitos/:hitoId/detalle GET Detalle del hito Todos -

Sistema de Fechas Importantes

Endpoint Método Descripción Rol Requerido Body/Params
/api/v1/fechas-importantes/proyecto/:projectId GET Fechas del proyecto Todos -
/api/v1/fechas-importantes POST Crear fecha Profesor/Admin {titulo, descripcion, fecha, proyecto_id}
/api/v1/fechas-importantes/:fechaId PUT Editar fecha Profesor/Admin {titulo, descripcion, fecha}
/api/v1/fechas-importantes/:fechaId DELETE Eliminar fecha Admin -
/api/v1/fechas-importantes/:fechaId/completar POST Marcar completada Estudiante -

Administración

Endpoint Método Descripción Rol Requerido Body/Params
/api/v1/admin/usuarios GET Listar usuarios Admin ?rol=, ?page=
/api/v1/admin/usuarios/:userId/asignar POST Asignar profesor Admin {profesor_id, proyecto_id}
/api/v1/admin/estadisticas GET Estadísticas globales Admin -
/api/v1/admin/calendario/global POST Crear fecha global Admin {titulo, descripcion, fecha}

Testing y Calidad de Código

Ejecución de Tests

# Tests del Backend
cd backend
npm test                    # Unit tests
npm run test:coverage      # Coverage report
npm run test:integration   # Integration tests

# Tests del Frontend  
cd frontend
ng test                    # Unit tests con Jest
ng test --coverage        # Coverage report
ng e2e                    # End-to-end tests con Cypress
npm run test:lint         # Linting con ESLint

Calidad de Código

# Backend
npm run lint              # ESLint
npm run lint:fix          # Auto-fix linting issues
npm run format            # Prettier formatting

# Frontend
ng lint                   # Angular ESLint
ng lint --fix            # Auto-fix
npm run format           # Prettier formatting

Métricas de Calidad

  • Coverage: >80% en componentes críticos
  • Linting: Configuración ESLint estricta
  • TypeScript: Strict mode habilitado
  • Security: Dependencias auditadas regularmente

Troubleshooting Avanzado

Note

La guía de solución de problemas comunes, errores de base de datos y comandos útiles ha sido movida a su propio documento. 📄 Ver Guía de Troubleshooting


Métricas y Monitoring

Estadísticas del Sistema

El sistema incluye endpoints para métricas:

# Estadísticas generales
GET /api/v1/admin/estadisticas

{
  "usuarios_totales": 150,
  "propuestas_activas": 45,
  "hitos_pendientes": 23,
  "fechas_proximas": 8
}

# Métricas por rol
GET /api/v1/admin/estadisticas/rol/:roleId

Performance Monitoring

# Backend performance
npm run test:performance

# Frontend bundle analysis
ng build --stats-json
npx webpack-bundle-analyzer dist/stats.json

# Database performance
SHOW PROCESSLIST;  # En MySQL
EXPLAIN SELECT * FROM propuestas;  # Query analysis

Seguridad

Características de Seguridad Implementadas

Autenticación y Autorización

  • JWT con blacklist: Tokens seguros con invalidación
  • Bcrypt: Hash de contraseñas con salt rounds configurable
  • CORS configurado: Origen específico para producción

Validación de Datos

  • Sanitización: Input sanitization en backend
  • Validación de RUT: Algoritmo específico para RUT chileno
  • Validación de archivos: Tipo y tamaño
  • SQL Injection: Prepared statements en todas las queries

Configuración de Seguridad

# Configuración de seguridad en backend/.env
JWT_SECRET=clave_super_segura_de_al_menos_64_caracteres
BCRYPT_ROUNDS=12
MAX_LOGIN_ATTEMPTS=5
RATE_LIMIT_WINDOW=15  # minutos
RATE_LIMIT_REQUESTS=100

Deployment en Producción

Preparación para Producción

  1. Configurar variables de entorno de producción
  2. Configurar SSL/TLS con Let's Encrypt
  3. Configurar backup automático de base de datos
  4. Configurar monitoring y logging

Docker Compose para Producción

version: '3.8'
services:
  backend:
    build: ./backend
    environment:
      - NODE_ENV=production
      - DB_HOST=mysql
      - JWT_SECRET=${JWT_SECRET}
    restart: unless-stopped
    networks:
      - app-network
    volumes:
      - ./backend/uploads:/app/uploads
      - ./logs:/app/logs

  frontend:
    build: ./frontend
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - backend

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: actitubb
      MYSQL_USER: actitubb_user
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    restart: unless-stopped
    volumes:
      - mysql_data:/var/lib/mysql
      - ./backup:/backup
    networks:
      - app-network

  backup:
    image: alpine:latest
    restart: unless-stopped
    volumes:
      - mysql_data:/var/lib/mysql
      - ./backup:/backup
    command: |
      sh -c 'while true; do
        mysqldump -h mysql -u actitubb_user -p$$MYSQL_PASSWORD actitubb > /backup/backup_$$(date +%Y%m%d_%H%M%S).sql
        find /backup -name "backup_*.sql" -mtime +7 -delete
        sleep 86400
      done'

volumes:
  mysql_data:

networks:
  app-network:
    driver: bridge

Monitoreo con Prometheus y Grafana

# Agregar al docker-compose.yml
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}

Recursos Adicionales y Referencias

Documentación Extendida del Proyecto

Para no saturar este archivo principal, hemos dividido algunas documentaciones específicas en la carpeta documentacion/:

Documentación Técnica

Recursos de Desarrollo

Herramientas Útiles


Contribución y Desarrollo

Important

Hemos movido las directrices de contribución, ramas, y estándares de código a su propio archivo para facilitar la lectura. ¡Cualquier PR es bienvenido! 🤝 Ver Guía de Contribución (CONTRIBUTING.md)

Licencia y Términos de Uso

Licencia Académica

Este proyecto está desarrollado para uso académico en la Universidad del Bío-Bío bajo los siguientes términos:

  • Uso académico: Libre para investigación y educación
  • Modificación: Permitida para propósitos educativos
  • Distribución: Con atribución apropiada
  • Uso comercial: Requiere autorización expresa

‍ Equipo de Desarrollo

Desarrollador Principal

Daniel Aguayo
Full Stack Developer & Student

GitHub Email

Universidad del Bío-Bío
2026
Ingeniería de ejecución en computación e Informática

Agradecimientos

  • Universidad del Bío-Bío - Por el soporte académico
  • Facultad de Ciencias empresariales - Por los recursos y guidance
  • Profesores guía - Por la mentoría técnica
  • Comunidad Open Source - Por las herramientas utilizadas

Soporte y Contacto

Soporte Técnico

¿Encontraste un bug o tienes una pregunta técnica?

  1. ** Revisa Issues existentes**: GitHub Issues
  2. ** Contacto directo**: daniel.aguayo2001@alumnos.ubiobio.cl

¡Gracias por usar AcTitUBB!

**Si este proyecto te ayuda en tu trabajo académico, ¡considera darle una estrella! **


Desarrollado con para la comunidad académica de la Universidad del Bío-Bío

** 2025 Daniel Aguayo - Universidad del Bío-Bío**


About

Plataforma web para coordinar y gestionar los procesos de titulación de las carreras de informática de la Universidad del Bío-Bío

Topics

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages