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
+[](https://www.oracle.com/java/)
4
+[](https://spring.io/projects/spring-boot)
5
+[](https://www.mysql.com/)
6
+[](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