Saltar al contenido principal

👥 Formación de Equipos

Visión General

El sistema de formación de equipos en PuntoHack permite a los participantes crear equipos, unirse mediante códigos, y gestionar miembros con restricciones basadas en el estado del hackathon.

Flujo de Formación

Crear Equipo

Proceso

Validaciones

  1. RBAC: Solo PARTICIPANT puede crear equipos
  2. Un equipo por hackathon: No puede tener equipo en el mismo hackathon
  3. Estado del hackathon: Debe estar en REGISTRATION o RUNNING
  4. Deadline: now < submissionDeadline
  5. Código único: Generado automáticamente (6 caracteres alfanuméricos)

Código de Invitación

Formato: 6 caracteres alfanuméricos (sin 0, O, I, 1)

Generación:

function generateInviteCode(): string {
const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
let code = '';
for (let i = 0; i < 6; i++) {
code += chars.charAt(Math.floor(Math.random() * chars.length));
}
return code;
}

Validación de Unicidad:

async function isInviteCodeUnique(code: string): Promise<boolean> {
const existing = await db.team.findUnique({
where: { code },
});
return existing === null;
}

Unirse a Equipo

Proceso

Validaciones

  1. Código existe: El código debe corresponder a un equipo
  2. Sin equipo previo: No puede tener equipo en el mismo hackathon
  3. Estado del hackathon: Debe estar en REGISTRATION o RUNNING
  4. Deadline: now < submissionDeadline
  5. Equipo no lleno: team.members.length < hackathon.maxTeamSize

Salir de Equipo

Proceso

Reglas Especiales

  1. Último miembro con submission: No puede salir si es el último miembro y el equipo tiene submission
  2. Equipo vacío sin submission: Si el equipo queda vacío y no tiene submission, se elimina automáticamente
  3. Deadline: Solo puede salir antes de submissionDeadline

Invitaciones por Email

Proceso

Validaciones

  1. Es miembro: Solo miembros del equipo pueden invitar
  2. Estado del hackathon: Debe estar en REGISTRATION o RUNNING
  3. Deadline: now < submissionDeadline
  4. Usuarios registrados: Los emails deben corresponder a usuarios registrados en el hackathon
  5. Sin equipo: Los usuarios no deben tener equipo en el hackathon
  6. Sin invitación pendiente: No debe haber invitación pendiente previa

Restricciones por Estado

REGISTRATION

Permitido:

  • ✅ Crear equipos
  • ✅ Unirse a equipos
  • ✅ Salir de equipos
  • ✅ Invitar por email

RUNNING

Permitido:

  • ✅ Crear equipos (hasta submissionDeadline)
  • ✅ Unirse a equipos (hasta submissionDeadline)
  • ✅ Salir de equipos (hasta submissionDeadline)
  • ✅ Invitar por email (hasta submissionDeadline)

Restricciones:

  • ❌ Después de submissionDeadline: No se pueden crear/unirse/salir equipos

JUDGING / FINISHED

Restricciones:

  • ❌ No se pueden crear equipos
  • ❌ No se pueden unirse a equipos
  • ❌ No se pueden salir de equipos
  • ❌ No se pueden invitar

Validación de Tamaño

Al Crear Submission

Regla: El equipo debe tener al menos hackathon.minTeamSize miembros

const team = await getTeamById(teamId);
if (team.members.length < hackathon.minTeamSize) {
throw new Error(`Team must have at least ${hackathon.minTeamSize} members`);
}

Al Unirse

Regla: El equipo no debe exceder hackathon.maxTeamSize miembros

const team = await getTeamById(teamId);
if (team.members.length >= hackathon.maxTeamSize) {
throw new Error(`Team is full (max ${hackathon.maxTeamSize} members)`);
}

Líder del Equipo

Asignación

  • El creador del equipo se convierte automáticamente en líder (isLeader: true)
  • Solo puede haber un líder por equipo

Privilegios

  • ✅ Puede invitar miembros
  • ✅ Puede eliminar miembros (futuro)
  • ✅ Puede editar información del equipo (futuro)

Diagrama de Estados del Equipo

Próximos Pasos


Siguiente: Evaluation System