# ADR: Team vs Guild Terminology **Estado**: ✅ Aceptado **Fecha**: 2025-11-07 **Contexto**: Discrepancia P0-4 identificada durante validación Fase 1 --- ## Contexto Durante la validación exhaustiva del código contra la documentación, se identificó una inconsistencia semántica: - **Documentación** (`/docs`): Usa consistentemente los términos "Guild" y "GuildMember" - **Implementación** (`/src/modules/social`): Usa los términos "Team" y "TeamMember" Esta discrepancia afecta: - Entidades de base de datos (`teams`, `team_members`) - DTOs y tipos de TypeScript - Comentarios y documentación inline - Nomenclatura de APIs --- ## Decisión **Se adopta el término "Team" como estándar oficial** en lugar de "Guild". --- ## Justificación ### 1. **Claridad y Simplicidad** - **"Team"** es un término más universal y claro: - Familiar para usuarios no-gamers - Usado comúnmente en contextos educativos - Menos ambiguo que "Guild" (que tiene connotaciones de juegos MMORPG) - **"Guild"** tiene connotaciones específicas: - Asociado principalmente con videojuegos (WoW, RPGs) - Puede confundir a educadores y administradores - Menos apropiado en contexto educativo formal ### 2. **Alineación con Contexto Educativo** Gamilit es una plataforma educativa con gamificación, no un juego puro: - Los educadores hablan de "equipos de estudio" - Los administradores gestionan "grupos de trabajo" - "Team" se integra mejor con terminología académica ### 3. **Código Ya Implementado** La implementación actual usa "Team" en: - 3 entidades TypeORM (`Team`, `TeamMember`, `TeamInvite`) - Múltiples servicios y controllers - Endpoints de API (`/api/teams/*`) - Tablas de base de datos (`social_features.teams`) Cambiar a "Guild" requeriría: - Refactoring masivo de código - Migración de base de datos - Actualización de APIs (breaking changes) - Re-testing completo **Costo estimado**: 20+ horas de desarrollo **Riesgo**: Alto (posibles bugs en migración) ### 4. **Compatibilidad Frontend** El frontend ya puede estar usando "teams" en: - Componentes React - Store/State management - Llamadas a API - Mensajes de UI Cambiar el backend a "Guild" crearía mayor inconsistencia. ### 5. **Internacionalización (i18n)** "Team" se traduce fácilmente a múltiples idiomas: - Español: "Equipo" - Inglés: "Team" - Francés: "Équipe" "Guild" es más difícil de traducir apropiadamente en contexto educativo. --- ## Consecuencias ### Positivas ✅ 1. **Terminología consistente** en código implementado 2. **Menor deuda técnica** (no requiere refactoring) 3. **Mejor UX** para audiencia educativa 4. **Facilita i18n** con términos estándar 5. **Reduce confusión** entre developers ### Negativas ❌ 1. **Requiere actualizar documentación** (`/docs`) para usar "Team" 2. **Posible confusión temporal** si docs no se actualizan 3. **Divergencia inicial** con especificaciones originales --- ## Plan de Acción ### Inmediato (P0) - [x] Crear este ADR documentando la decisión - [x] Actualizar comentarios en entities para clarificar - [ ] Crear issue para actualizar docs (`/docs`) ### Corto Plazo (P1) - [ ] Actualizar `/docs/02-especificaciones-tecnicas/TYPES-SOCIAL.md` - Reemplazar "Guild" → "Team" - Reemplazar "GuildMember" → "TeamMember" - [ ] Actualizar `/docs/02-especificaciones-tecnicas/SOCIAL-SCHEMAS.md` - Actualizar esquemas de base de datos - Actualizar ejemplos de API - [ ] Actualizar `/docs/01-requerimientos/casos-uso/` - Reemplazar referencias a "Guild" en user stories ### Mediano Plazo (P2) - [ ] Crear glosario de términos oficiales - [ ] Agregar a style guide del proyecto - [ ] Training para developers sobre terminología estándar --- ## Mapping de Términos | Documentación (Old) | Código (Current) | Uso | |---------------------|------------------|-----| | Guild | Team | Entidad principal de equipo | | GuildMember | TeamMember | Miembro de un equipo | | GuildInvite | TeamInvite | Invitación a equipo | | guild_id | team_id | ID de equipo | | guildName | teamName | Nombre del equipo | | guildRole | teamRole | Rol dentro del equipo | --- ## Ejemplos de Código ### Entidad (Correcto) ```typescript /** * Team Entity * * Representa un equipo de colaboración/competencia entre estudiantes. * Los equipos pueden estar asociados a un classroom o ser independientes. * * @table social_features.teams * @note Anteriormente referenciado como "Guild" en documentación legacy */ @Entity({ schema: 'social_features', name: 'teams' }) export class Team { @Column('text') name: string; @Column('integer', { name: 'max_members', default: 5 }) maxMembers: number; } ``` ### API Endpoint (Correcto) ```typescript @Controller('api/teams') export class TeamsController { @Post() async createTeam(@Body() dto: CreateTeamDto) { // ... } @Get(':teamId/members') async getTeamMembers(@Param('teamId') teamId: string) { // ... } } ``` --- ## Referencias - **Issue**: Discrepancia P0-4 - Reporte Final Fase 1 - **Archivos Afectados**: - `/src/modules/social/entities/team.entity.ts` - `/src/modules/social/entities/team-member.entity.ts` - `/src/modules/social/services/teams.service.ts` - `/src/modules/social/controllers/teams.controller.ts` - **Docs a Actualizar**: - `/docs/02-especificaciones-tecnicas/TYPES-SOCIAL.md` - `/docs/02-especificaciones-tecnicas/SOCIAL-SCHEMAS.md` - `/docs/01-requerimientos/casos-uso/student/` --- ## Revisiones | Fecha | Cambio | Autor | |-------|--------|-------| | 2025-11-07 | Decisión inicial - Team sobre Guild | Claude Code (Sonnet 4.5) | --- ## Notas - Este ADR debe ser revisado con el equipo de producto - Si hay fuerte preferencia por "Guild" en UX research, se puede reconsiderar - La decisión es reversible pero costosa (requiere migración completa) --- **Aprobado por**: Backend Lead (pendiente) **Revisión siguiente**: Q1 2026 (post-launch user feedback)