docs: Comprehensive README with project specification

- Add complete project vision and problem statement - Document all 8 functional modules with details - Include 3-layer architecture with diagram - Add 22 database entities documentation - Add API endpoints with examples - Detail JWT security implementation - Include database constraints and restrictions - Add development setup and deployment guide - Add complete role-based permissions matrix - Include environment variables for production Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Daniel Silva committed Aug 17, 2026 at 18:12 UTC 588131b16e0ed3ebeb491572b97a9aa21c6293dd
1 file changed +673 -46
README.md
+673 -46
@@ -1,95 +1,722 @@
1 # MAPS Connect - Backend API
2
3 -Plataforma académica y de mentoría MAPS de Universidad Tecmilenio.
3 +[![Java](https://img.shields.io/badge/Java-25-ED8B00?style=flat-square&logo=openjdk)](https://www.oracle.com/java/)
4 +[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.3.0-6DB33F?style=flat-square&logo=spring-boot)](https://spring.io/projects/spring-boot)
5 +[![MySQL](https://img.shields.io/badge/MySQL-8.0-4479A1?style=flat-square&logo=mysql)](https://www.mysql.com/)
6 +[![Maven](https://img.shields.io/badge/Maven-3.8%2B-C71A36?style=flat-square&logo=apache-maven)](https://maven.apache.org/)
7
5 -## Requisitos Previos
8 +**MAPS Connect** es una plataforma académica y de mentoría integral para la Universidad Tecmilenio que conecta estudiantes, docentes y egresados mediante un sistema colaborativo de redes de conocimiento, círculos de estudio y asesorías personalizadas.
9
7 -- Java 17+
8 -- Maven 3.8+
9 -- MySQL 8.0+
10 +## 📋 Tabla de Contenidos
11
11 -## Configuración de Base de Datos
12 +- [Visión General](#visión-general)
13 +- [Características Principales](#características-principales)
14 +- [Requisitos Previos](#requisitos-previos)
15 +- [Instalación y Configuración](#instalación-y-configuración)
16 +- [Arquitectura del Sistema](#arquitectura-del-sistema)
17 +- [Módulos Funcionales](#módulos-funcionales)
18 +- [Estructura del Proyecto](#estructura-del-proyecto)
19 +- [Endpoints de API](#endpoints-de-api)
20 +- [Seguridad y Autenticación](#seguridad-y-autenticación)
21 +- [Base de Datos](#base-de-datos)
22 +- [Desarrollo](#desarrollo)
23 +- [Contacto](#contacto)
24
13 -Crear base de datos antes de ejecutar:
25 +## 🎯 Visión General
26 +
27 +En el modelo educativo de Universidad Tecmilenio, los estudiantes del programa **MAPS (Modelo de Aprendizaje Personalizado y Significativo)** combinan materias disciplinares, componentes de bienestar, certificados de especialización y participan en el Semestre Empresarial. Sin embargo, frecuentemente enfrentan:
28 +
29 +- ❌ Incertidumbre al seleccionar certificados especializados
30 +- ❌ Dificultad para resolver dudas académicas específicas
31 +- ❌ Falta de grupos de estudio organizados
32 +- ❌ Desconocimiento sobre opciones de empresas para vinculación
33 +
34 +**MAPS Connect** resuelve estos desafíos centralizando el intercambio de conocimiento académico, fomentando el aprendizaje colaborativo y facilitando decisiones curriculares informadas.
35 +
36 +## ✨ Características Principales
37 +
38 +### 🔐 Autenticación y Usuarios
39 +- Registro seguro mediante correo institucional (@tecmilenio.mx)
40 +- Autenticación con **JWT (JSON Web Tokens)**
41 +- Perfiles especializados: **Estudiantes**, **Profesores** y **Administradores**
42 +- Gestión de credenciales y sesiones seguras
43 +- Validación de dominios institucionales
44 +
45 +### 💬 Foro Colaborativo
46 +- Dudas académicas segmentadas por carrera y materia
47 +- Respuestas de la comunidad con sistema de soluciones verificadas
48 +- Insignias automáticas para aportaciones de docentes
49 +- Reputación basada en participación
50 +
51 +### 💡 Tips Académicos
52 +- Microconsejos y metodologías de estudio por materia
53 +- Sistema de votación única por usuario
54 +- Ranking dinámico de mejores consejos
55 +- Contenido enfocado en técnicas probadas
56 +
57 +### 📚 Repositorio de Recursos
58 +- Biblioteca centralizada de apuntes y material (PDFs, diagramas, resúmenes)
59 +- Clasificación por materia y tema
60 +- Control de descargas y reportes
61 +- Validación automática de cumplimiento comunitario
62 +
63 +### 👥 Círculos de Estudio
64 +- Comunidades colaborativas por materia, certificado o carrera
65 +- Privacidad configurable (pública/privada)
66 +- Integración con salas virtuales (Microsoft Teams/Google Meet)
67 +- Muro interno de avisos y discusiones
68 +
69 +### 💌 Mensajería Privada
70 +- Canal 1 a 1 entre estudiantes o profesor-estudiante
71 +- Asesorías académicas personalizadas
72 +- Trazabilidad completa de conversaciones
73 +- Respeto a disponibilidad horaria docente
74 +
75 +### 🏢 Semestre Empresarial
76 +- Directorio de empresas vinculadas
77 +- Reseñas y evaluaciones de experiencias reales
78 +- Consejos de postulación y acreditación
79 +- Retroalimentación de estudiantes avanzados
80 +
81 +### 🎓 Gestión Académica MAPS
82 +- Catálogo de carreras y certificados de especialización
83 +- Estructura de malla curricular por programa
84 +- Materias tronco común, disciplinares, certificados y bienestar
85 +- Modelado de microcredenciales
86 +
87 +## 📦 Requisitos Previos
88 +
89 +- **Java 25** o superior
90 +- **Maven 3.8** o superior
91 +- **MySQL 8.0** o superior
92 +- **Git** para control de versiones
93 +- **IDE** recomendado: IntelliJ IDEA Community Edition
94 +
95 +### Validar Instalación
96 +
97 +```bash
98 +java -version
99 +mvn -version
100 +mysql --version
101 +```
102 +
103 +## 🚀 Instalación y Configuración
104 +
105 +### 1. Clonar el Repositorio
106 +
107 +```bash
108 +git clone https://github.com/danielsilva7577-bit/maps-conect.git
109 +cd maps-conect
110 +```
111 +
112 +### 2. Crear Bases de Datos
113
114 ```sql
16 -CREATE DATABASE maps_conect;
17 -CREATE DATABASE maps_conect_dev;
115 +CREATE DATABASE maps_conect CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
116 +CREATE DATABASE maps_conect_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
117 ```
118
20 -Actualizar credenciales en `application.yml`:
119 +### 3. Configurar Credenciales
120 +
121 +Editar `src/main/resources/application.yml`:
122
123 ```yaml
124 spring:
125 + application:
126 + name: MAPS Connect
127 +
128 datasource:
129 url: jdbc:mysql://localhost:3306/maps_conect
130 username: root
131 password: tu_contraseña
132 + driver-class-name: com.mysql.cj.jdbc.Driver
133 +
134 + jpa:
135 + hibernate:
136 + ddl-auto: update
137 + show-sql: false
138 + properties:
139 + hibernate:
140 + dialect: org.hibernate.dialect.MySQL8Dialect
141 + format_sql: true
142 +
143 +server:
144 + port: 8080
145 + servlet:
146 + context-path: /api
147 +
148 +jwt:
149 + secret: tu_clave_secreta_muy_segura_aqui
150 + expiration: 86400000 # 24 horas en milisegundos
151 +
152 +cors:
153 + allowed-origins: http://localhost:3000,http://localhost:5173
154 ```
155
30 -## Compilación
156 +### 4. Compilar el Proyecto
157
158 ```bash
33 -cd C:\Users\danie\IdeaProjects\maps-conect
159 mvn clean install
160 ```
161
37 -## Ejecución
162 +### 5. Ejecutar la Aplicación
163
39 -### Desarrollo
164 +**Desarrollo (con perfil dev):**
165 ```bash
166 mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev"
167 ```
168
44 -### Producción
169 +**Producción (con perfil prod):**
170 ```bash
171 mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=prod"
172 ```
173
49 -## API Health Check
174 +La aplicación estará disponible en: `http://localhost:8080/api`
175 +
176 +### 6. Verificar Salud de la API
177
178 ```bash
179 curl http://localhost:8080/api/health
180 ```
181
55 -## Estructura del Proyecto
182 +Respuesta esperada:
183 +```json
184 +{
185 + "status": "UP",
186 + "components": {
187 + "db": {
188 + "status": "UP"
189 + }
190 + }
191 +}
192 +```
193 +
194 +## 🏗️ Arquitectura del Sistema
195 +
196 +MAPS Connect implementa una **arquitectura de 3 capas**:
197 +
198 +### Capa de Presentación (Frontend)
199 +- **Tecnologías**: HTML5, CSS3, JavaScript Vanilla
200 +- **Responsabilidades**:
201 + - Renderizado dinámico del DOM
202 + - Interfaz minimalista con contornos rectos
203 + - Menú colapsable
204 + - Validación de formularios en cliente
205 + - Consumo asincrónico de endpoints REST vía JSON
206 +
207 +### Capa de Aplicación (Backend)
208 +- **Tecnologías**: Java, Spring Boot, Spring Security
209 +- **Responsabilidades**:
210 + - Implementación de reglas de negocio
211 + - Validación de dominios institucionales
212 + - Manejo de sesiones y seguridad
213 + - Orquestación de servicios y repositorios
214 + - Procesamiento de requests y responses
215 +
216 +### Capa de Datos (Base de Datos)
217 +- **Tecnologías**: MySQL 8.0
218 +- **Responsabilidades**:
219 + - Almacenamiento persistente normalizado en 3FN
220 + - Integridad referencial con claves foráneas
221 + - Restricciones de dominio y lógica
222 + - Vistas operativas para consultas complejas
223 +
224 +```
225 +┌─────────────────────────────────┐
226 +│ Frontend (Web Browser) │
227 +│ HTML5 | CSS3 | JavaScript │
228 +└──────────────┬──────────────────┘
229 + │ REST JSON
230 +┌──────────────▼──────────────────┐
231 +│ Spring Boot REST API │
232 +│ Controllers | Services | DAO │
233 +│ JWT Security | Validation │
234 +└──────────────┬──────────────────┘
235 + │ SQL
236 +┌──────────────▼──────────────────┐
237 +│ MySQL 8.0 Database │
238 +│ 22 Tablas | 3FN | Constraints │
239 +└─────────────────────────────────┘
240 +```
241 +
242 +## 📚 Módulos Funcionales
243 +
244 +### 1️⃣ Gestión Académica y Modelo MAPS
245 +Administra el catálogo académico de la institución.
246 +
247 +**Entidades**:
248 +- `carreras` - Programas profesionales ofertados
249 +- `certificados` - Especializaciones y microcredenciales MAPS
250 +- `materias` - Asignaturas curriculares
251 +- `plan_estudios` - Relación N:M de materias por carrera/semestre
252 +- `certificado_materias` - Asignaturas que integran certificados
253 +
254 +**Funcionalidades**:
255 +- ✅ Definir carreras y planes de estudio
256 +- ✅ Configurar certificados de especialización
257 +- ✅ Asignar materias a carreras y certificados
258 +- ✅ Estructurar malla curricular
259 +
260 +### 2️⃣ Usuarios, Perfiles y Roles
261 +Administración integral de credenciales e identidades.
262 +
263 +**Entidades**:
264 +- `usuarios` - Credenciales y autenticación
265 +- `estudiantes` - Datos específicos del alumno (matrícula, semestre, propósito)
266 +- `estudiante_certificados` - Ruta MAPS (hasta 3 certificados)
267 +- `profesores` - Datos de nómina, especialidad y horarios
268 +- `profesores_materias` - Relación N:M de materias impartidas
269 +
270 +**Roles y Permisos**:
271 +| Operación | Estudiante | Profesor | Admin |
272 +|-----------|-----------|----------|-------|
273 +| Editar Perfil | ✅ | ✅ | ✅ |
274 +| Publicar Duda | ✅ | ❌ | 🔧 |
275 +| Responder Dudas | ✅ | ✅ (con insignia) | 🔧 |
276 +| Crear Círculos | ✅ | ✅ (Líder) | 🔧 |
277 +| Moderación | ❌ | ✅ | ✅ |
278 +| Administrar Catálogos | ❌ | ❌ | ✅ |
279 +
280 +### 3️⃣ Foro de Dudas y Respuestas Colaborativas
281 +Canal principal de interacción académica.
282 +
283 +**Entidades**:
284 +- `publicaciones` - Dudas académicas por carrera/materia
285 +- `respuestas` - Soluciones y comentarios de la comunidad
286 +
287 +**Características**:
288 +- Dudas asociadas a materias (opcional)
289 +- Comunidad aporta respuestas
290 +- Autor marca solución definitiva
291 +- Sistema automático de insignias para docentes
292 +- Ranking de respuestas por utilidad
293 +
294 +### 4️⃣ Tips Académicos y Sistema de Reputación
295 +Microconsejos y metodologías de estudio.
296 +
297 +**Entidades**:
298 +- `tips_academicos` - Recomendaciones y técnicas
299 +- `votos_tips` - Control de votos únicos por usuario
300 +
301 +**Características**:
302 +- Tips por materia
303 +- Voto único por usuario (evita manipulación)
304 +- Sistema de reputación basado en contribuciones
305 +- Feed ranking por utilidad
306 +
307 +### 5️⃣ Repositorio de Apuntes y Material de Estudio
308 +Biblioteca centralizada de recursos.
309 +
310 +**Entidades**:
311 +- `recursos_academicos` - Metadatos de archivos y apuntes
312 +
313 +**Características**:
314 +- Clasificación por materia
315 +- Monitoreo de descargas
316 +- Reportes de calidad
317 +- Ocultamiento automático de material no conforme
318 +
319 +### 6️⃣ Mensajería Directa y Asesorías Privadas
320 +Canal 1 a 1 para comunicación personalizada.
321 +
322 +**Entidades**:
323 +- `conversaciones` - Canales 1 a 1
324 +- `mensajes` - Mensajes individuales
325 +
326 +**Características**:
327 +- Entre estudiantes o estudiante-profesor
328 +- Trazabilidad completa
329 +- Confirmación de lectura
330 +- Respeto a disponibilidad docente
331 +
332 +### 7️⃣ Semestre Empresarial
333 +Retroalimentación y experiencias de vinculación.
334 +
335 +**Entidades**:
336 +- `empresas_vinculadas` - Directorio de empresas
337 +- `resenas_empresarial` - Evaluaciones y aprendizajes
338 +
339 +**Características**:
340 +- Reseñas de experiencias reales
341 +- Evaluación de 1 a 5 estrellas
342 +- Consejos de postulación
343 +- Recomendaciones de acreditación
344 +
345 +### 8️⃣ Comunidades y Círculos de Estudio
346 +Espacios colaborativos para aprendizaje grupal.
347 +
348 +**Entidades**:
349 +- `comunidades_estudio` - Grupos de estudio
350 +- `miembros_comunidad` - Relación N:M de usuarios
351 +- `mensajes_comunidad` - Muro de publicaciones internas
352 +
353 +**Características**:
354 +- Por materia, certificado o carrera
355 +- Privacidad configurable (pública/privada)
356 +- Integración con salas virtuales (Teams/Meet)
357 +- Muro interno de avisos
358 +- Liderazgo y modración
359 +
360 +## 📂 Estructura del Proyecto
361 +
362 +```
363 +maps-conect/
364 +├── src/
365 +│ ├── main/
366 +│ │ ├── java/com/tecmilenio/mapsconect/
367 +│ │ │ ├── MapsConectApplication.java # Punto de entrada
368 +│ │ │ │
369 +│ │ │ ├── config/
370 +│ │ │ │ ├── CorsConfig.java # Configuración CORS
371 +│ │ │ │ └── SecurityConfig.java # Configuración seguridad
372 +│ │ │ │
373 +│ │ │ ├── controller/
374 +│ │ │ │ ├── AuthController.java # Endpoints autenticación
375 +│ │ │ │ └── HealthController.java # Health check
376 +│ │ │ │
377 +│ │ │ ├── service/
378 +│ │ │ │ └── UsuarioService.java # Lógica usuarios
379 +│ │ │ │
380 +│ │ │ ├── repository/
381 +│ │ │ │ └── UsuarioRepository.java # Acceso a datos
382 +│ │ │ │
383 +│ │ │ ├── entity/
384 +│ │ │ │ └── Usuario.java # Entidades JPA
385 +│ │ │ │
386 +│ │ │ ├── dto/
387 +│ │ │ │ ├── LoginDTO.java
388 +│ │ │ │ ├── RegistroDTO.java
389 +│ │ │ │ ├── TokenDTO.java
390 +│ │ │ │ ├── UsuarioDTO.java
391 +│ │ │ │ └── ApiResponse.java
392 +│ │ │ │
393 +│ │ │ ├── security/
394 +│ │ │ │ ├── JwtTokenProvider.java # Generación JWT
395 +│ │ │ │ └── JwtAuthenticationFilter.java # Filtro JWT
396 +│ │ │ │
397 +│ │ │ ├── exception/
398 +│ │ │ │ ├── GlobalExceptionHandler.java # Manejo global excepciones
399 +│ │ │ │ └── ResourceNotFoundException.java # Excepciones custom
400 +│ │ │ │
401 +│ │ │ └── util/
402 +│ │ │ └── (utilidades compartidas)
403 +│ │ │
404 +│ │ └── resources/
405 +│ │ ├── application.yml # Config principal
406 +│ │ ├── application-dev.yml # Config desarrollo
407 +│ │ └── application-prod.yml # Config producción
408 +│ │
409 +│ └── test/
410 +│ └── java/com/tecmilenio/mapsconect/
411 +│ └── (tests unitarios e integración)
412 +│
413 +├── .gitignore
414 +├── pom.xml # Dependencias Maven
415 +├── README.md # Este archivo
416 +└── target/ # Artifacts compilados
417 +```
418 +
419 +## 🔌 Endpoints de API
420 +
421 +### Autenticación
422 +```http
423 +POST /api/auth/register
424 +Content-Type: application/json
425 +
426 +{
427 + "nombre": "Juan Pérez",
428 + "email": "juan.perez@tecmilenio.mx",
429 + "password": "Password123!",
430 + "rol": "STUDENT"
431 +}
432 +```
433 +
434 +```http
435 +POST /api/auth/login
436 +Content-Type: application/json
437 +
438 +{
439 + "email": "juan.perez@tecmilenio.mx",
440 + "password": "Password123!"
441 +}
442 +```
443 +
444 +**Respuesta (200 OK)**:
445 +```json
446 +{
447 + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
448 + "tipo": "Bearer",
449 + "expiresIn": 86400000,
450 + "usuario": {
451 + "id": 1,
452 + "nombre": "Juan Pérez",
453 + "email": "juan.perez@tecmilenio.mx",
454 + "rol": "STUDENT"
455 + }
456 +}
457 +```
458 +
459 +### Health Check
460 +```http
461 +GET /api/health
462 +```
463 +
464 +**Respuesta**:
465 +```json
466 +{
467 + "status": "UP",
468 + "timestamp": "2024-08-17T18:00:00Z"
469 +}
470 +```
471 +
472 +## 🔐 Seguridad y Autenticación
473 +
474 +### JWT (JSON Web Tokens)
475 +
476 +La aplicación utiliza **JWT** para autenticación stateless:
477 +
478 +```
479 +Header:
480 +{
481 + "alg": "HS256",
482 + "typ": "JWT"
483 +}
484 +
485 +Payload:
486 +{
487 + "sub": "usuario@tecmilenio.mx",
488 + "id": 1,
489 + "rol": "STUDENT",
490 + "iat": 1692291600,
491 + "exp": 1692378000
492 +}
493 +
494 +Signature:
495 +HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
496 +```
497 +
498 +### Restricciones de Seguridad
499 +
500 +✅ **Dominio Institucional**: Solo correos @tecmilenio.mx o @servicios.tecmilenio.mx
501 +✅ **Contraseñas Hasheadas**: Almacenadas con bcrypt (algoritmo seguro)
502 +✅ **Expiración de Token**: 24 horas por defecto
503 +✅ **CORS**: Restringido a orígenes permitidos
504 +✅ **Validación de Entrada**: DTOs con @Valid annotations
505 +✅ **Manejo Global de Excepciones**: Respuestas consistentes
506 +
507 +### Uso del Token
508 +
509 +Incluir en todas las requests:
510 +```http
511 +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
512 +```
513 +
514 +### Cambiar Secreto en Producción
515 +
516 +**CRÍTICO**: Cambiar `jwt.secret` en `application-prod.yml`:
517 +
518 +```yaml
519 +jwt:
520 + secret: una_clave_secreta_aleatoria_muy_larga_y_compleja
521 + expiration: 86400000
522 +```
523 +
524 +Generar clave segura:
525 +```bash
526 +# Linux/Mac
527 +openssl rand -base64 32
528 +
529 +# PowerShell
530 +[Convert]::ToBase64String([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32))
531 +```
532 +
533 +## 💾 Base de Datos
534 +
535 +### Modelado en 3FN (Tercera Forma Normal)
536 +
537 +La base de datos implementa 3FN para garantizar:
538 +- ✅ Normalización completa
539 +- ✅ Eliminación de redundancias
540 +- ✅ Integridad referencial
541 +- ✅ Eficiencia en consultas
542 +
543 +### 22 Entidades Principales
544 +
545 +| ID | Entidad | Módulo | Propósito |
546 +|----|---------|--------|-----------|
547 +| 1 | `carreras` | Académico | Programas profesionales |
548 +| 2 | `certificados` | Académico | Microcredenciales MAPS |
549 +| 3 | `materias` | Académico | Asignaturas curriculares |
550 +| 4 | `plan_estudios` | Académico | Relación materia-carrera |
551 +| 5 | `certificado_materias` | Académico | Materias por certificado |
552 +| 6 | `usuarios` | Usuarios | Credenciales y autenticación |
553 +| 7 | `estudiantes` | Usuarios | Datos del alumno |
554 +| 8 | `estudiante_certificados` | Usuarios | Ruta MAPS del alumno |
555 +| 9 | `profesores` | Usuarios | Datos docentes |
556 +| 10 | `profesores_materias` | Usuarios | Materias por docente |
557 +| 11 | `publicaciones` | Comunidad | Dudas académicas |
558 +| 12 | `respuestas` | Comunidad | Respuestas y comentarios |
559 +| 13 | `tips_academicos` | Tips | Microconsejos de estudio |
560 +| 14 | `votos_tips` | Tips | Votos únicos por usuario |
561 +| 15 | `recursos_academicos` | Apuntes | Metadatos de archivos |
562 +| 16 | `conversaciones` | Chat | Canales 1 a 1 |
563 +| 17 | `mensajes` | Chat | Mensajes individuales |
564 +| 18 | `empresas_vinculadas` | Empresarial | Directorio de empresas |
565 +| 19 | `resenas_empresarial` | Empresarial | Evaluaciones de empresas |
566 +| 20 | `comunidades_estudio` | Círculos | Grupos de estudio |
567 +| 21 | `miembros_comunidad` | Círculos | Usuarios en comunidades |
568 +| 22 | `mensajes_comunidad` | Círculos | Muro de comunidades |
569 +
570 +### Restricciones Técnicas
571 +
572 +**1. Restricción de Dominio Institucional**
573 +```sql
574 +ALTER TABLE usuarios ADD CONSTRAINT chk_email_domain
575 +CHECK (email LIKE '%@tecmilenio.mx' OR email LIKE '%@servicios.tecmilenio.mx');
576 +```
577 +
578 +**2. Restricción de Rango Semestral**
579 +```sql
580 +ALTER TABLE estudiantes ADD CONSTRAINT chk_semestre
581 +CHECK (semestre_actual BETWEEN 1 AND 12);
582 +```
583 +
584 +**3. Límite de Ruta Curricular**
585 +```sql
586 +ALTER TABLE estudiantes ADD CONSTRAINT chk_max_certificados
587 +CHECK (LENGTH(CONCAT_WS(',', certificado_1, certificado_2, certificado_3)) > 0);
588 +```
589 +
590 +**4. Integridad en Mensajería**
591 +```sql
592 +ALTER TABLE conversaciones ADD CONSTRAINT chk_usuarios_distintos
593 +CHECK (id_usuario_1 <> id_usuario_2);
594 +ALTER TABLE conversaciones ADD CONSTRAINT uq_usuarios
595 +UNIQUE KEY (id_usuario_1, id_usuario_2);
596 +```
597 +
598 +**5. Calificaciones Numéricas (1-5)**
599 +```sql
600 +ALTER TABLE resenas_empresarial ADD CONSTRAINT chk_calificacion
601 +CHECK (calificacion BETWEEN 1 AND 5);
602 +```
603 +
604 +**6. Integridad en Cascada**
605 +```sql
606 +ALTER TABLE miembros_comunidad ADD CONSTRAINT fk_comunidad
607 +FOREIGN KEY (id_comunidad) REFERENCES comunidades_estudio(id)
608 +ON DELETE CASCADE;
609 +```
610 +
611 +## 🛠️ Desarrollo
612 +
613 +### Requisitos de Desarrollo
614 +
615 +```bash
616 +# Verificar Java
617 +java -version
618 +# Debe mostrar Java 25+
619 +
620 +# Verificar Maven
621 +mvn -version
622 +# Debe mostrar Maven 3.8+
623 +
624 +# Verificar MySQL
625 +mysql --version
626 +# Debe mostrar MySQL 8.0+
627 +```
628 +
629 +### Compilación
630 +
631 +**Build completo (ejecutar una sola vez)**:
632 +```bash
633 +mvn clean install
634 +```
635 +
636 +**Build rápido (cambios menores)**:
637 +```bash
638 +mvn compile
639 +```
640 +
641 +**Limpiar build anterior**:
642 +```bash
643 +mvn clean
644 +```
645 +
646 +### Ejecutar con Perfil Dev
647 +
648 +```bash
649 +mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev"
650 +```
651 +
652 +Verá logs detallados y SQL ejecutado.
653 +
654 +### Ejecutar Tests
655 +
656 +```bash
657 +# Todos los tests
658 +mvn test
659
660 +# Test específico
661 +mvn test -Dtest=UsuarioServiceTest
662 +
663 +# Con cobertura
664 +mvn test jacoco:report
665 ```
58 -src/main/java/com/tecmilenio/mapsconect/
59 -├── config/ # Configuración (CORS, Seguridad, JWT)
60 -├── controller/ # Endpoints REST
61 -├── service/ # Lógica de negocio
62 -├── repository/ # Acceso a datos
63 -├── entity/ # Entidades JPA
64 -├── dto/ # Transfer Objects
65 -├── exception/ # Manejo de excepciones
66 -├── security/ # JWT y autenticación
67 -└── util/ # Utilidades
666 +
667 +### Empaquetar para Producción
668 +
669 +```bash
670 +mvn package
671 +# Crea: target/maps-conect-1.0.0.jar
672 ```
673
70 -## Configuración de Seguridad
674 +**Ejecutar JAR**:
675 +```bash
676 +java -Dspring.profiles.active=prod -jar target/maps-conect-1.0.0.jar
677 +```
678 +
679 +### IDE Recomendado: IntelliJ IDEA
680 +
681 +1. Abrir proyecto: `File > Open > maps-conect`
682 +2. Configurar SDK Java 25: `File > Project Structure > Project > SDK`
683 +3. Configurar Maven: `File > Settings > Build Tools > Maven`
684 +4. Ejecutar aplicación: `Run > Run 'MapsConectApplication'`
685 +5. Debug: `Run > Debug 'MapsConectApplication'`
686 +
687 +### Variables de Entorno
688 +
689 +Para producción, usar variables de entorno en lugar de archivos properties:
690
72 -- JWT Token: Cambiar `jwt.secret` en `application.yml` en producción
73 -- Expiración: 24 horas por defecto
74 -- CORS: Configurado para localhost:3000 y 5173
691 +```bash
692 +export SPRING_DATASOURCE_URL=jdbc:mysql://prod-db:3306/maps_conect
693 +export SPRING_DATASOURCE_USERNAME=user_prod
694 +export SPRING_DATASOURCE_PASSWORD=secure_password
695 +export JWT_SECRET=your_production_secret_key
696 +export SPRING_PROFILES_ACTIVE=prod
697 +
698 +java -jar maps-conect-1.0.0.jar
699 +```
700
76 -## Módulos Implementados
701 +### Estructura de Carpeta de Trabajo
702
78 -✅ Autenticación con JWT
79 -✅ Registro de usuarios
80 -✅ Login
81 -✅ CORS configurado
82 -✅ Manejo global de excepciones
83 -✅ DTOs y validaciones
703 +```
704 +C:\Users\danie\
705 +├── IdeaProjects/
706 +│ ├── maps-conect/ # Este proyecto
707 +│ └── ...
708 +├── .m2/ # Maven local repository
709 +└── ...
710 +```
711
85 -## Próximos Pasos
712 +## 📞 Contacto
713
87 -1. Crear entidades adicionales (Carrera, Materia, Foro, etc.)
88 -2. Implementar repositorios y servicios
89 -3. Crear controllers para cada módulo
90 -4. Implementar lógica de foros y comunidades
91 -5. Agregar tests
714 +**Institución**: Universidad Tecmilenio
715 +**Proyecto**: MAPS Connect - Plataforma Académica y de Mentoría
716 +**Repositorio**: [GitHub - danielsilva7577-bit/maps-conect](https://github.com/danielsilva7577-bit/maps-conect)
717
93 -## Contacto
718 +---
719
95 -Universidad Tecmilenio - Proyecto MAPS Connect
\ No newline at end of file
720 +**Última actualización**: Agosto 2024
721 +**Versión**: 1.0.0
722 +**Estado**: En Desarrollo
\ No newline at end of file