@@ -13,20 +13,24 @@ Este proyecto es una **prueba técnica frontend** que implementa una aplicación
1313## 🎯 Objetivos de la Prueba
1414
1515### 1. ** Estructura de Carpetas (25 puntos)**
16+
1617- Mantener la arquitectura ` core ` con módulos dinámicos
1718- Validar que la estructura siga las convenciones establecidas
1819- Cada módulo debe tener las 8 carpetas requeridas
1920
20- ### 2. ** Resolución de Errores (50 puntos)**
21+ ### 2. ** Resolución de Errores (50 puntos)**
22+
2123- Identificar y corregir ** 2 errores principales** (8 errores de TypeScript en total)
2224- Hacer que la aplicación funcione sin warnings ni errores
2325
2426### 3. ** Testing Dinámico (25 puntos)**
27+
2528- Entender el sistema de testing de estructura
2629- Ejecutar y validar que todos los tests pasen
2730- Opcional: Agregar tests adicionales
2831
2932### 4. ** Funcionalidad (25 puntos)**
33+
3034- Completar el módulo de productos
3135- Navegar y usar todas las funcionalidades
3236- Opcional: Agregar nuevas características
@@ -36,11 +40,13 @@ Este proyecto es una **prueba técnica frontend** que implementa una aplicación
3640## 🚀 Setup Inicial
3741
3842### Prerrequisitos
39- - Node.js 18+
43+
44+ - Node.js 18+
4045- npm o yarn
4146- Git
4247
4348### Instalación
49+
4450``` bash
4551# Clonar el repositorio
4652git clone [repository-url]
@@ -64,15 +70,16 @@ Este proyecto contiene **múltiples tipos de errores** que debes identificar y c
6470## 🔴 ** ERRORES DE TYPESCRIPT (10 errores totales)**
6571
6672### ❌ ** Error Principal 1: LoginForm.tsx (6 errores)**
73+
6774** Archivo** : ` src/core/auth/components/forms/LoginForm.tsx `
6875** Problema** : Uso incorrecto de ` FormData ` nativo en lugar de tipo personalizado
6976** Síntomas** : Múltiples errores sobre propiedades inexistentes
7077
7178``` typescript
7279// ❌ Incorrecto (línea ~8)
7380const [formData, setFormData] = useState <FormData >({
74- email: ' ' ,
75- password: ' '
81+ email: " " ,
82+ password: " " ,
7683});
7784
7885// ✅ Correcto - usar el tipo adecuado
@@ -81,17 +88,19 @@ interface LoginFormData {
8188 password: string ;
8289}
8390const [formData, setFormData] = useState <LoginFormData >({
84- email: ' ' ,
85- password: ' '
91+ email: " " ,
92+ password: " " ,
8693});
8794```
8895
8996** Errores específicos** :
97+
9098- ` Property 'email' does not exist on type 'FormData' ` (línea 29, 34, 69)
9199- ` Property 'password' does not exist on type 'FormData' ` (línea 29, 34, 85)
92100- ` Argument of type... is not assignable ` (línea 8)
93101
94102### ❌ ** Error Principal 2: productApi.ts (1 error)**
103+
95104** Archivo** : ` src/core/products/services/productApi.ts `
96105** Problema** : Método ` searchProducts ` declarado pero no implementado
97106** Usado en** : ` src/core/products/hooks/useProducts.ts ` línea 106
@@ -104,15 +113,18 @@ const results = await productApi.searchProducts(searchTerm);
104113searchProducts : async (query : string ): Promise <Product []> => {
105114 // Simular búsqueda filtrada
106115 const allProducts = await this .getProducts ();
107- return allProducts .filter (product =>
108- product .name .toLowerCase ().includes (query .toLowerCase ()) ||
109- product .description .toLowerCase ().includes (query .toLowerCase ())
116+ return allProducts .filter (
117+ (product ) =>
118+ product .name .toLowerCase ().includes (query .toLowerCase ()) ||
119+ product .description .toLowerCase ().includes (query .toLowerCase ())
110120 );
111- }
121+ };
112122```
113123
114124### ❌ ** Errores Secundarios: Imports rotos (3 errores)**
125+
115126Estos errores aparecen por carpetas faltantes (ver sección de estructura):
127+
116128- ` Dashboard.tsx ` : No encuentra ` ../common/NavigationHeader `
117129- ` ProductsView.tsx ` : No encuentra NavigationHeader
118130
@@ -129,7 +141,7 @@ src/core/auth/
129141├── validations/ # ❌ FALTA - Para validaciones de formularios
130142└── hooks/ # ❌ FALTA - Para custom hooks de autenticación
131143
132- src/core/products/
144+ src/core/products/
133145└── utils/ # ❌ FALTA - Para utilidades del módulo
134146
135147src/core/shared/
@@ -140,15 +152,18 @@ src/core/dashboard/components/
140152```
141153
142154### 📊 ** Estado actual de módulos:**
155+
143156- ✅ ** dashboard** : 8/8 carpetas (100%) - ** ÚNICO VÁLIDO**
144157- ❌ ** auth** : 6/8 carpetas (75%) - faltan: ` validations ` , ` hooks `
145- - ❌ ** products** : 7/8 carpetas (87.5%) - falta: ` utils `
158+ - ❌ ** products** : 7/8 carpetas (87.5%) - falta: ` utils `
146159- ❌ ** shared** : 3/4 carpetas (75%) - falta: ` common `
147160
148161### 🎯 ** Requisitos estrictos:**
162+
149163Cada módulo DEBE tener las ** 8 carpetas obligatorias** :
164+
150165- ` components/ ` (con al menos 1 subcarpeta)
151- - ` validations/ `
166+ - ` validations/ `
152167- ` hooks/ `
153168- ` services/ `
154169- ` types/ `
@@ -167,11 +182,12 @@ npm run validate
167182# Verificación completa (incluye build)
168183npm run validate:full
169184
170- # Status detallado con colores y estadísticas
185+ # Status detallado con colores y estadísticas
171186npm run check-status
172187```
173188
174189### 📋 ** Orden recomendado de corrección:**
190+
1751911 . ** Crear carpetas faltantes** (arregla imports rotos)
1761922 . ** Corregir errores TypeScript** principales
1771933 . ** Verificar que tests de estructura pasen**
@@ -182,6 +198,7 @@ npm run check-status
182198## 🧪 Testing de Estructura
183199
184200### Ejecutar Tests
201+
185202``` bash
186203# Ejecutar tests de estructura
187204npm run test:structure
@@ -203,6 +220,7 @@ El proyecto incluye un **sistema de testing dinámico** que:
203220- 🏗️ ** Verifica arquitectura** de cada módulo
204221
205222### Estructura Validada
223+
206224```
207225src/core/
208226├── shared/ # ✅ Componentes compartidos
@@ -229,22 +247,25 @@ src/core/
229247### GitHub Actions Workflows
230248
231249#### 1. ** Structure Validation** (feature → developer)
250+
232251** Archivo** : ` .github/workflows/structure-validation.yml `
233252
234253``` yaml
235254# Se ejecuta cuando:
236- - PR hacia developer/develop
255+ - PR hacia developer/develop
237256- Push a developer/develop
238257- Cambios en src/core/** o tests/**
239258` ` `
240259
241260**Validaciones**:
261+
242262- ✅ Testing de estructura de carpetas
243- - ✅ Verificación de módulos dinámicos
263+ - ✅ Verificación de módulos dinámicos
244264- ✅ Validación de subcarpetas requeridas
245265- ✅ Comentarios automáticos en PR
246266
247- #### 2. **Promote to Main** (developer → main)
267+ #### 2. **Promote to Main** (developer → main)
268+
248269**Archivo**: ` .github/workflows/promote-to-main.yml`
249270
250271` ` ` yaml
@@ -254,6 +275,7 @@ src/core/
254275` ` `
255276
256277**Validaciones**:
278+
257279- ✅ Testing completo de estructura
258280- ✅ Validación de contenido en módulos
259281- ✅ Build de producción
@@ -278,36 +300,41 @@ graph LR
278300# ## Funcionalidades Implementadas
279301
280302# ### 🏠 Vista Principal (`ProductsView`)
303+
281304- **Dashboard de estadísticas** (total, en stock, sin stock)
282305- **Búsqueda avanzada** por nombre, descripción, tags
283306- **Filtros por categoría**
284307- **Lista responsive** de productos
285308- **CRUD básico** (ver, editar, eliminar)
286309
287- # ### 🃏 Tarjeta de Producto (`ProductCard`)
310+ # ### 🃏 Tarjeta de Producto (`ProductCard`)
311+
288312- **Imagen** del producto con fallback
289313- **Información detallada** (precio, stock, categoría)
290314- **Tags dinámicos** con límite visual
291315- **Estados visuales** (sin stock, nuevo, etc.)
292316- **Acciones rápidas** (ver, editar, eliminar)
293317
294318# ### 🎣 Hook Personalizado (`useProducts`)
319+
295320- **Estado centralizado** de productos
296321- **Operaciones CRUD** completas
297322- **Filtros dinámicos** aplicables
298323- **Gestión de errores** integrada
299324- **Loading states** automáticos
300325
301326# ### 🌐 API Service (`productApi`)
327+
302328- **Datos mock realistas** para demostración
303329- **5 productos de ejemplo** con imágenes
304330- **4 categorías** (Tecnología, Ropa, Hogar, Deportes)
305331- **Simulación de latencia** de red
306332- **Operaciones async** completas
307333
308334# ## Navegación
335+
3093361. **Login** → Dashboard (admin@test.com / password)
310- 2. **Dashboard** → Click en card "Productos"
337+ 2. **Dashboard** → Click en card "Productos"
3113383. **Productos** → Vista completa de gestión
312339
313340---
@@ -338,15 +365,15 @@ tecnicafrontend/
338365│ │ │ ├── validations/
339366│ │ │ └── constants/
340367│ │ │
341- │ │ ├── dashboard/ # 📊 Módulo dashboard
368+ │ │ ├── dashboard/ # 📊 Módulo dashboard
342369│ │ │ ├── components/
343370│ │ │ │ └── views/ # ❌ Dashboard (Error 1,2)
344371│ │ │ └── [ otras carpetas...]
345372│ │ │
346373│ │ └── products/ # 📦 Módulo productos
347374│ │ ├── components/
348375│ │ │ ├── cards/ # ProductCard
349- │ │ │ └── views/ # ProductsView
376+ │ │ │ └── views/ # ProductsView
350377│ │ ├── hooks/ # useProducts
351378│ │ ├── services/ # productApi
352379│ │ ├── types/ # Product interfaces
@@ -373,24 +400,28 @@ tecnicafrontend/
373400## 🎯 Instrucciones de Resolución
374401
375402### Paso 1: Identificar Errores (25 pts)
403+
3764041. **Ejecutar** `npm start` → Observar errores en consola
3774052. **Revisar** archivos mencionados en la sección "Errores"
3784063. **Corregir** uno por uno hasta que la app funcione
3794074. **Verificar** que no haya warnings en la consola
380408
381- ### Paso 2: Validar Testing (25 pts)
409+ ### Paso 2: Validar Testing (25 pts)
410+
3824111. **Ejecutar** `npm run test:structure`
3834122. **Verificar** que todos los tests pasen (11/11)
3844133. **Entender** el reporte de estructura generado
3854144. **Opcional**: Agregar un nuevo módulo y ver que se detecte
386415
387416### Paso 3: Probar Funcionalidad (25 pts)
388- 1. **Login** con credenciales: `admin@test.com` / `password`
417+
418+ 1. **Login** con credenciales: `admin@test.com` / `password`
3894192. **Navegar** desde Dashboard → Productos
3904203. **Probar** búsqueda, filtros, eliminación
3914214. **Verificar** que las estadísticas se actualicen
392422
393423### Paso 4: Entender CI/CD (25 pts)
424+
3944251. **Revisar** archivos en `.github/workflows/`
3954262. **Entender** el flujo feature → developer → main
3964273. **Opcional**: Crear una feature branch y PR
@@ -402,10 +433,10 @@ tecnicafrontend/
402433
403434```bash
404435# 🚀 Desarrollo
405- npm start # Ejecutar en modo desarrollo
436+ npm start # Ejecutar en modo desarrollo
406437npm run build # Build de producción
407438
408- # 🧪 Testing
439+ # 🧪 Testing
409440npm run test:structure # Tests de estructura
410441npm run test:structure:watch # Tests en modo watch
411442npm run test:structure:ui # Interfaz visual de tests
@@ -420,25 +451,29 @@ npm run test # Tests unitarios (React)
420451## 🏆 Criterios de Evaluación
421452
422453### Excelente (90-100 pts)
454+
423455- ✅ Todos los errores corregidos sin ayuda
424456- ✅ Tests pasando al 100%
425457- ✅ Funcionalidad completa probada
426458- ✅ Comprensión clara del CI/CD
427459- ✅ Mejoras o funcionalidades adicionales
428460
429- ### Bueno (70-89 pts)
461+ ### Bueno (70-89 pts)
462+
430463- ✅ 3-4 errores corregidos
431464- ✅ Tests mayormente pasando
432465- ✅ Funcionalidad básica funcionando
433466- ✅ Entendimiento general del proyecto
434467
435468### Aceptable (50-69 pts)
436- - ✅ 2-3 errores corregidos
469+
470+ - ✅ 2-3 errores corregidos
437471- ✅ Algunos tests pasando
438472- ✅ App ejecutándose básicamente
439473- ⚠️ Necesita ayuda para CI/CD
440474
441475### Insuficiente (<50 pts)
476+
442477- ❌ Errores sin corregir
443478- ❌ Tests fallando
444479- ❌ App no funciona correctamente
@@ -479,7 +514,7 @@ Prepárate para explicar:
479514## 💡 Tips para el Éxito
480515
481516- 🔍 ** Lee los errores** en consola cuidadosamente
482- - 🧪 ** Ejecuta tests** frecuentemente durante el desarrollo
517+ - 🧪 ** Ejecuta tests** frecuentemente durante el desarrollo
483518- 🎯 ** Usa las herramientas** de desarrollo de React
484519- 📖 ** Revisa la estructura** antes de hacer cambios
485520- 🚀 ** Prueba la navegación** completa de la app
@@ -495,4 +530,4 @@ Esta prueba técnica está diseñada para evaluar tus habilidades reales de desa
495530
496531---
497532
498- * Creado con ❤️ para evaluar desarrolladores frontend talentosos *
533+ _ Creado con ❤️ para evaluar desarrolladores frontend talentosos _
0 commit comments