{"id":27057293,"url":"https://github.com/salog0d/employeeofthemonth","last_synced_at":"2026-04-29T14:35:30.154Z","repository":{"id":286043367,"uuid":"946911574","full_name":"salog0d/EmployeeOfTheMonth","owner":"salog0d","description":"Employee Of The Month es un videojuego educativo que simula la operación de un almacén y enseña buenas prácticas de gestión logística. Los jugadores gestionan operaciones de almacén y compiten por ser reconocidos como el \"Empleado del Mes\" basándose en su eficiencia, cumplimiento de protocolos y toma de decisiones.","archived":false,"fork":false,"pushed_at":"2025-04-04T01:44:30.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T02:32:30.131Z","etag":null,"topics":["djangorestframework","python-3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/salog0d.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-11T21:43:39.000Z","updated_at":"2025-04-04T01:45:27.000Z","dependencies_parsed_at":"2025-04-04T02:32:31.354Z","dependency_job_id":"9630060b-38da-4341-8e09-2dcce91fd252","html_url":"https://github.com/salog0d/EmployeeOfTheMonth","commit_stats":null,"previous_names":["salog0d/employeeofthemonth"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salog0d%2FEmployeeOfTheMonth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salog0d%2FEmployeeOfTheMonth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salog0d%2FEmployeeOfTheMonth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salog0d%2FEmployeeOfTheMonth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salog0d","download_url":"https://codeload.github.com/salog0d/EmployeeOfTheMonth/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247325685,"owners_count":20920715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["djangorestframework","python-3"],"created_at":"2025-04-05T11:18:25.188Z","updated_at":"2026-04-29T14:35:30.148Z","avatar_url":"https://github.com/salog0d.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Employee Of The Month\n\n\n![Screenshot From 2025-04-26 13-37-42](https://github.com/user-attachments/assets/e2006005-32ef-4b7a-844f-ba0cd50b31ec)\n\n## Descripción General\n\nEmployee Of The Month es una plataforma gamificada para entornos empresariales que transforma la gestión del rendimiento de los empleados en una experiencia interactiva y motivadora. La aplicación combina elementos de videojuegos con herramientas de productividad para crear un sistema que fomenta el reconocimiento, la sana competencia y el desarrollo profesional.\n\nDesarrollada con Django y Django REST Framework, esta plataforma ofrece tanto una interfaz web completa como una API RESTful para integración con otros sistemas empresariales.\n\n## Características Principales\n\n### Sistema de Gamificación\n\n- **Sistema de puntuación**: Los empleados acumulan puntos por completar tareas, alcanzar objetivos y recibir reconocimientos.\n- **Niveles de progresión**: Los usuarios avanzan por diferentes niveles a medida que acumulan experiencia.\n- **Tabla de clasificación (Leaderboard)**: Muestra los 15 mejores empleados según su rendimiento.\n- **Logros y medallas**: Recompensas virtuales por hitos específicos o comportamientos deseados.\n- **Misiones y desafíos**: Tareas específicas que los empleados pueden completar para ganar puntos adicionales.\n\n### Sistema de Usuarios y Autenticación\n\n- **Registro personalizado**: Proceso de registro con verificación por correo electrónico.\n- **Autenticación flexible**: Inicio de sesión con nombre de usuario o correo electrónico.\n- **Perfiles de usuario**: Cada empleado tiene un perfil personalizable con estadísticas y logros.\n- **Roles y permisos**: Diferentes niveles de acceso para empleados, gerentes y administradores.\n\n### Panel de Control\n\n- **Dashboard personalizado**: Interfaz principal con estadísticas relevantes para cada usuario.\n- **Visualización de progreso**: Seguimiento visual del avance hacia objetivos y niveles.\n- **Notificaciones**: Sistema de alertas para nuevos logros, cambios de posición en el ranking, etc.\n- **Gestión de tareas**: Asignación y seguimiento de responsabilidades laborales.\n\n### API RESTful\n\n- **Documentación completa**: Endpoints documentados con Swagger y ReDoc.\n- **Autenticación mediante Token y JWT**: Seguridad robusta para acceso a la API.\n- **Versionado**: Soporte para diferentes versiones de la API.\n- **Throttling y caché**: Limitación de tasas y optimización del rendimiento.\n\n## Arquitectura Técnica\n\n### Backend\n\n#### Django Framework (5.2)\n\n- **Estructura modular**: Aplicaciones separadas por dominio funcional.\n- **Middleware personalizado**: Para procesamiento de solicitudes, autenticación, etc.\n- **Sistema ORM**: Modelos optimizados con índices y relaciones apropiadas.\n- **Señales**: Implementación de señales de Django para operaciones asíncronas.\n- **Gestión de caché**: Configuración de Redis para almacenamiento en caché.\n\n#### Django REST Framework (3.14)\n\n- **Serializers**: Conversión bidireccional entre modelos y datos JSON.\n- **ViewSets y Routers**: Estructura consistente para endpoints de API.\n- **Filtrado, ordenación y paginación**: Funcionalidades avanzadas para consulta de datos.\n- **Validación de datos**: Sistema robusto para entrada de datos.\n\n#### Base de Datos\n\n- **PostgreSQL**: Base de datos principal con configuración optimizada.\n- **Migraciones**: Control de versiones para la estructura de la base de datos.\n- **Consultas optimizadas**: Uso de select_related, prefetch_related y funciones avanzadas de SQL.\n- **Indexación**: Índices estratégicos para consultas frecuentes.\n\n### Frontend\n\n#### Interfaz de Usuario\n\n- **TailwindCSS**: Framework de CSS utilizable para el diseño responsive.\n- **Glassmorphism Design**: Estética moderna con efectos de transparencia y desenfoque.\n- **JavaScript**: Interactividad en el lado del cliente.\n- **Componentes reutilizables**: Estructura modular para mantener la consistencia visual.\n\n#### Experiencia de Usuario\n\n- **Animaciones fluidas**: Transiciones de elemento suaves para mejorar la experiencia.\n- **Diseño responsive**: Adaptación completa a dispositivos móviles y de escritorio.\n- **Accesibilidad**: Implementación de prácticas WCAG 2.1 para accesibilidad.\n- **Modo oscuro/claro**: Soporte para diferentes preferencias de visualización.\n\n### Seguridad\n\n- **Autenticación multifactor**: Capa adicional de seguridad opcional.\n- **Protección CSRF y XSS**: Medidas contra ataques comunes.\n- **Limitación de tasa**: Protección contra ataques de fuerza bruta.\n- **Almacenamiento seguro de contraseñas**: Utilización de algoritmos de hashing robustos (Argon2).\n- **Auditoría y logging**: Registro de acciones sensibles del sistema.\n\n### Despliegue e Infraestructura\n\n- **Docker**: Contenedores para desarrollo y producción.\n- **CI/CD**: Integración continua y despliegue mediante GitHub Actions.\n- **Entornos separados**: Configuraciones distintas para desarrollo, pruebas y producción.\n- **Monitoreo**: Integración con Sentry para seguimiento de errores.\n- **Backups automatizados**: Copias de seguridad programadas de la base de datos.\n\n## Estructura del Proyecto\n\n```\nEmployeeOfTheMonth/\n├── apps/                    # Aplicaciones de Django\n│   ├── custom_auth/         # Sistema de autenticación personalizado\n│   │   ├── models.py        # Modelo CustomUser extendido\n│   │   ├── forms.py         # Formularios personalizados\n│   │   ├── views.py         # Vistas de autenticación\n│   │   ├── templates/       # Plantillas para login/registro\n│   │   └── urls.py          # URLs de la app\n│   ├── api/                 # API REST\n│   │   ├── serializers/     # Serializadores por modelo\n│   │   ├── views/           # Viewsets y vistas de API\n│   │   ├── permissions.py   # Permisos personalizados\n│   │   ├── pagination.py    # Configuración de paginación\n│   │   └── urls.py          # Rutas de API\n│   └── core/                # Funcionalidad principal\n│       ├── models/          # Modelos de datos\n│       ├── services/        # Lógica de negocio\n│       ├── templatetags/    # Tags personalizados\n│       ├── views/           # Vistas web\n│       └── templates/       # Plantillas HTML\n├── static/                  # Archivos estáticos\n│   ├── css/                 # Estilos compilados\n│   ├── js/                  # JavaScript\n│   └── images/              # Imágenes estáticas\n├── templates/               # Plantillas globales\n├── media/                   # Archivos subidos por usuarios\n├── EmployeeOfTheMonth/      # Configuración principal del proyecto\n│   ├── settings/            # Configuraciones separadas por entorno\n│   │   ├── base.py          # Configuración base\n│   │   ├── development.py   # Entorno de desarrollo\n│   │   └── production.py    # Entorno de producción\n│   ├── urls.py              # URLs principales\n│   └── wsgi.py              # Configuración WSGI\n├── manage.py                # Script de administración de Django\n├── requirements/            # Requisitos separados por entorno\n│   ├── base.txt             # Dependencias comunes\n│   ├── development.txt      # Dependencias de desarrollo\n│   └── production.txt       # Dependencias de producción\n├── docker/                  # Configuración de Docker\n│   ├── Dockerfile           # Imagen principal\n│   └── docker-compose.yml   # Composición de servicios\n├── scripts/                 # Scripts de utilidad\n├── .env.example             # Ejemplo de variables de entorno\n├── LICENSE                  # Licencia del proyecto\n└── README.md                # Este archivo\n```\n\n## Modelos de Datos\n\n### CustomUser\n```python\nclass CustomUser(AbstractUser):\n    email = models.EmailField(unique=True)\n    score = models.IntegerField(default=0)\n    level = models.IntegerField(default=1)\n    verification_token = models.CharField(max_length=100, blank=True)\n    avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)\n    department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True, blank=True)\n    position = models.CharField(max_length=100, blank=True)\n    bio = models.TextField(blank=True)\n    date_joined = models.DateTimeField(auto_now_add=True)\n    last_active = models.DateTimeField(auto_now=True)\n```\n\n### MiniGame\n\n```python\nclass Minigame(models.Model):\n    username = models.OneToOneField(CustomUser, on_delete=models.CASCADE)\n    tries = models.IntegerField(default=0)\n```\n\n\n## API REST - Endpoints Principales\n\n### Autenticación\n- `POST /api/v1/auth/token/` - Obtener token JWT\n- `POST /api/v1/auth/token/refresh/` - Refrescar token JWT\n- `POST /api/v1/auth/register/` - Registrar nuevo usuario\n\n### Usuarios\n- `GET /api/v1/users/` - Listar usuarios\n- `GET /api/v1/users/{id}/` - Detalle de usuario\n- `PATCH /api/v1/users/{id}/` - Actualizar usuario\n- `GET /api/v1/users/leaderboard/` - Obtener tabla de clasificación\n\n\n## Instalación\n\n### Requisitos previos\n\n- Python 3.10 o superior\n- PostgreSQL 13 o superior\n- Node.js 16+ (para procesamiento de assets front-end)\n- Docker y Docker Compose (opcional, para desarrollo con contenedores)\n\n### Configuración con entorno virtual\n\n1. Clonar el repositorio:\n   ```bash\n   git clone https://github.com/yourusername/EmployeeOfTheMonth.git\n   cd EmployeeOfTheMonth\n   ```\n\n2. Crear un entorno virtual e instalar dependencias:\n   ```bash\n   python -m venv venv\n   source venv/bin/activate  # En Windows: venv\\Scripts\\activate\n   pip install -r requirements/development.txt\n   ```\n\n3. Configurar variables de entorno:\n   ```bash\n   cp .env.example .env\n   # Editar .env con tus credenciales y configuración\n   ```\n\n4. Aplicar migraciones:\n   ```bash\n   python manage.py migrate\n   ```\n\n5. Crear datos iniciales (opcional):\n   ```bash\n   python manage.py loaddata initial_data\n   ```\n\n6. Crear un superusuario:\n   ```bash\n   python manage.py createsuperuser\n   ```\n\n7. Ejecutar el servidor de desarrollo:\n   ```bash\n   python manage.py runserver\n   ```\n\n\n### Preparación\n\n1. Configurar variables de entorno de producción:\n   ```bash\n   # En el servidor de producción\n   export DJANGO_SETTINGS_MODULE=EmployeeOfTheMonth.settings.production\n   export DEBUG=False\n   export SECRET_KEY=your-secure-key\n   export DATABASE_URL=postgresql://user:password@host:port/database\n   # ... otras variables de entorno\n   ```\n\n2. Recolectar archivos estáticos:\n   ```bash\n   python manage.py collectstatic --no-input\n   ```\n\n### Opciones de despliegue\n\n#### Utilizando Gunicorn y Nginx\n\n1. Instalar Gunicorn:\n   ```bash\n   pip install gunicorn\n   ```\n\n2. Configurar Gunicorn como servicio:\n   ```bash\n   # Crear archivo systemd\n   sudo nano /etc/systemd/system/employeeofthemonth.service\n   ```\n\n3. Contenido del archivo de servicio:\n   ```\n   [Unit]\n   Description=EmployeeOfTheMonth Gunicorn daemon\n   After=network.target\n\n   [Service]\n   User=www-data\n   Group=www-data\n   WorkingDirectory=/path/to/employeeofthemonth\n   ExecStart=/path/to/venv/bin/gunicorn --workers 3 --bind unix:/path/to/employeeofthemonth.sock EmployeeOfTheMonth.wsgi:application\n   Restart=on-failure\n\n   [Install]\n   WantedBy=multi-user.target\n   ```\n\n4. Configurar Nginx:\n   ```\n   server {\n       listen 80;\n       server_name yourdomain.com;\n\n       location = /favicon.ico { access_log off; log_not_found off; }\n       \n       location /static/ {\n           root /path/to/employeeofthemonth;\n       }\n\n       location /media/ {\n           root /path/to/employeeofthemonth;\n       }\n\n       location / {\n           include proxy_params;\n           proxy_pass http://unix:/path/to/employeeofthemonth.sock;\n       }\n   }\n   ```\n\n#### Utilizando Docker en producción\n\n1. Construir la imagen de producción:\n   ```bash\n   docker build -f docker/Dockerfile.prod -t employeeofthemonth:prod .\n   ```\n\n2. Ejecutar con docker-compose:\n   ```bash\n   docker-compose -f docker/docker-compose.prod.yml up -d\n   ```\n\n## Seguridad\n\n- Todas las contraseñas se almacenan con el algoritmo Argon2\n- Protección contra ataques CSRF en todos los formularios\n- Se implementa rate limiting para prevenir ataques de fuerza bruta\n- La comunicación con la API requiere autenticación mediante tokens JWT\n- Cabeceras HTTP de seguridad configuradas (HSTS, X-Content-Type-Options, etc.)\n\n## Roadmap (Próximas características)\n\n- [ ] Integración con Slack/Teams para notificaciones\n- [ ] Sistema de recompensas canjeables en el mundo real\n- [ ] Análisis de datos y dashboards para gerentes\n- [ ] Implementación de eventos temporales (competencias limitadas en el tiempo)\n- [ ] Soporte para múltiples idiomas\n- [ ] Aplicación móvil nativa\n\n## Contribución\n\nAgradecemos las contribuciones a Employee Of The Month. Por favor sigue estos pasos:\n\n1. Crear un fork del repositorio\n2. Crear una rama para tu característica (`git checkout -b feature/amazing-feature`)\n3. Formatear el código con Black (`black .`)\n4. Hacer commit de tus cambios (`git commit -m 'feat: add amazing feature'`)\n5. Hacer push a la rama (`git push origin feature/amazing-feature`)\n6. Abrir un Pull Request\n\n## Licencia\n\nEste proyecto está licenciado bajo la Licencia GNU GENERAL PUBLIC LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalog0d%2Femployeeofthemonth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalog0d%2Femployeeofthemonth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalog0d%2Femployeeofthemonth/lists"}