|
| 1 | +# Tarjeta de crédito válida |
| 2 | + |
| 3 | +## Índice |
| 4 | + |
| 5 | +* [1. Preámbulo](#1-preámbulo) |
| 6 | +* [2. Resumen del proyecto](#2-resumen-del-proyecto) |
| 7 | +* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje) |
| 8 | +* [4. Consideraciones generales](#4-consideraciones-generales) |
| 9 | +* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptación-mínimos-del-proyecto) |
| 10 | +* [6. Pistas, tips y lecturas complementarias](#6-pistas-tips-y-lecturas-complementarias) |
| 11 | + |
| 12 | +*** |
| 13 | + |
| 14 | +## 1. Preámbulo |
| 15 | + |
| 16 | +El [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn), |
| 17 | +también llamado algoritmo de módulo 10, es un método de suma de verificación, |
| 18 | +se utiliza para validar números de identificación; tales como el IMEI de los |
| 19 | +celulares, tarjetas de crédito, etc. |
| 20 | + |
| 21 | +Este algoritmo es simple. Obtenemos la reversa del número a verificar (que |
| 22 | +solamente contiene dígitos [0-9]); a todos los números que ocupan una posición |
| 23 | +par se les debe multiplicar por dos, si este número es mayor o igual a 10, |
| 24 | +debemos sumar los dígitos del resultado; el número a verificar será válido si |
| 25 | +la suma de sus dígitos finales es un múltiplo de 10. |
| 26 | + |
| 27 | + |
| 28 | + |
| 29 | +## 2. Resumen del proyecto |
| 30 | + |
| 31 | +En este proyecto tendrás que construir una aplicación web que le permita a un |
| 32 | +usuario validar el número de una tarjeta de crédito. Además, tendrás que |
| 33 | +implementar funcionalidad para ocultar todos los dígitos de una tarjeta menos |
| 34 | +los últimos cuatro. |
| 35 | + |
| 36 | +La temática es libre. Tú debes pensar en qué situaciones de la vida real se |
| 37 | +necesitaría validar una tarjeta de crédito y pensar en cómo debe ser esa |
| 38 | +experiencia de uso (qué pantallas, explicaciones, mensajes, colores, ¿marca?) |
| 39 | +etc. |
| 40 | + |
| 41 | +## 3. Objetivos de aprendizaje |
| 42 | + |
| 43 | +Trabajando en parejas aprenderán a construir una aplicación web que interactuará |
| 44 | +con lx usuarix final a través del navegador, utilizando HTML, CSS y JavaScript |
| 45 | +como tecnologías. |
| 46 | + |
| 47 | +Dicho en palabras sencillas, aprenderás a: |
| 48 | + |
| 49 | +* Organizar tu tiempo y priorizar tareas en un entorno de |
| 50 | + **alta incertidumbre**. |
| 51 | +* Entender las **necesidades del usuario** y cómo proponer una solución. |
| 52 | +* Entender la importancia del proceso de prototipado durante la creación de un |
| 53 | + producto digital. |
| 54 | +* Conocer los principios básicos del diseño visual. |
| 55 | +* Utilizar etiquetas semánticas de HTML y elementos de formulario. |
| 56 | +* Mostrar elementos de formulario en la pantalla usando **HTML** y **CSS**. |
| 57 | +* Utilizar diversos tipos de selectores en CSS: de elemento, de clase, de id. |
| 58 | +* Utilizar el modelo de cajas de CSS (border, margin, padding). |
| 59 | +* Definir reglas de estilo en CSS. |
| 60 | +* Permitir al usuario interactuar con elementos del DOM y hacer que la |
| 61 | + aplicación responda cuando ocurran esos **eventos del DOM**. |
| 62 | +* Manipular _**strings**_ (cadenas de texto). |
| 63 | +* Usar **control de flujo** (bucles, condicionales, ...). |
| 64 | +* Actualizar la pantalla con los resultados (**manipular el DOM**) a través de |
| 65 | + **innerHTML** o **textContent**. |
| 66 | +* **Implementar funciones** dada una descripción de su comportamiento. |
| 67 | +* Verificar que tus funciones hagan las cosas para las que fueron creadas |
| 68 | + (**pruebas unitarias (_unit tests_) con [Jest](https://jestjs.io/es-ES/)**). |
| 69 | +* Configurar tu cuenta de git. |
| 70 | +* Hacer _fork_ y _clonar_ el repositorio del proyecto. |
| 71 | +* Mantener actualizado los cambios en tu repositorio remoto |
| 72 | + (commit, pull, push). |
| 73 | +* Desplegar tu proyecto en [GitHub Pages](https://pages.github.com). |
| 74 | + |
| 75 | +## 4. Consideraciones generales |
| 76 | + |
| 77 | +* El equipo de coaches te dará un tiempo sugerido e indicaciones sobre si trabajar |
| 78 | + sola o en equipo. Recuerda que cada una aprende a diferente ritmo. |
| 79 | +* El proyecto será entregado subiendo tu código a GitHub (commit/push) y la |
| 80 | + interfaz será desplegada usando GitHub pages. Si no sabes lo que es GitHub, no |
| 81 | + te preocupes, lo aprenderás durante este proyecto. |
| 82 | + |
| 83 | +## 5. Criterios de aceptación mínimos del proyecto |
| 84 | + |
| 85 | +Usa solo caracteres numéricos (dígitos) en la tarjeta a validar [0-9]. |
| 86 | + |
| 87 | +### Definición del producto |
| 88 | + |
| 89 | +En el `README.md`, cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso |
| 90 | +para definir el producto final a nivel de experiencia y de interfaz. |
| 91 | + |
| 92 | +* Quiénes son los principales usuarios de producto. |
| 93 | +* Cuáles son los objetivos de estos usuarios en relación con tu producto. |
| 94 | +* Cómo crees que el producto que estás creando está resolviendo sus problemas. |
| 95 | + |
| 96 | +### Interfaz de usuario (UI) |
| 97 | + |
| 98 | +La interfaz debe permitir al usuario: |
| 99 | + |
| 100 | +* Insertar el número que queremos validar. |
| 101 | +* Ver el resultado si es válido o no. |
| 102 | +* Ocultar todos los dígitos de su número de tarjeta menos los últimos |
| 103 | +4 caracteres. |
| 104 | +* No debe poder ingresar un campo vacío. |
| 105 | + |
| 106 | +### UX (Diseño de experiencia de usuario) |
| 107 | + |
| 108 | +Antes de iniciar a codear, debes entender el problema que quieres solucionar y |
| 109 | +cómo tu aplicación lo soluciona. |
| 110 | + |
| 111 | +* Trabaja tu primer prototipo con papel y lápiz (blanco y negro). |
| 112 | +* Luego valida esta solución con una compañera (pedir feedback). |
| 113 | +* Toma lo aprendido al momento de validar tu primer prototipo y desarrolla un |
| 114 | + nuevo prototipo usando alguna herramienta para diseño de prototipos |
| 115 | + ([Balsamiq](https://balsamiq.com/), [Figma](https://www.figma.com/), |
| 116 | + [Google Slides](https://www.google.com/intl/es/slides/about/), etc.) |
| 117 | +Estos puntos los presentarás en el `README.md`. |
| 118 | + |
| 119 | +### Scripts / Archivos |
| 120 | + |
| 121 | +#### General |
| 122 | + |
| 123 | +##### `README.md` |
| 124 | + |
| 125 | +Debe contener lo siguiente: |
| 126 | + |
| 127 | +* Un título con el nombre de tu proyecto. |
| 128 | +* Un resumen de 1 o 2 líneas de qué se trata tu proyecto. |
| 129 | +* La imagen final de tu proyecto. |
| 130 | +* Investigación UX: |
| 131 | + 1. Explicar quiénes son los usuarios y los objetivos en relación con el |
| 132 | + producto. |
| 133 | + 2. Explicar cómo el producto soluciona los problemas/necesidades de dichos |
| 134 | + usuarios. |
| 135 | + 3. Luego colocarás la foto de tu primer prototipo en papel. |
| 136 | + 4. Agregar un resumen del feedback recibido indicando las mejoras a realizar. |
| 137 | + 5. Imagen del prototipo final. |
| 138 | + |
| 139 | +#### Visualmente (HTML y CSS) |
| 140 | + |
| 141 | +Deberás maquetar de forma exacta el prototipo final que hiciste en la herramienta |
| 142 | +de diseño de prototipos que escogiste utilizando HTML y CSS. En este momento elegirás |
| 143 | +los colores, tipo de fuente, etc a usar. |
| 144 | + |
| 145 | +A continuación describimos los archivos que utilizarás: |
| 146 | + |
| 147 | +##### `src/index.html` |
| 148 | + |
| 149 | +En este archivo va el contenido que se mostrará al usuario (esqueleto HTML). |
| 150 | +Encontrarás 3 etiquetas iniciales, las cuales si deseas puedes borrar y empezar |
| 151 | +de cero: |
| 152 | + |
| 153 | +* `<header>`: encabezado de tu proyecto. |
| 154 | +* `<main>`: contenido principal de tu proyecto. |
| 155 | +* `<footer>`: pie de página de tu proyecto. |
| 156 | + |
| 157 | +##### `src/style.css` |
| 158 | + |
| 159 | +Este archivo debe contener las reglas de estilo. Queremos que escribas tus |
| 160 | +propias reglas, por eso NO está permitido el uso de frameworks de CSS |
| 161 | +(Bootstrap, materialize, etc). |
| 162 | + |
| 163 | +#### Funcionalmente (JavaScript - pruebas unitarias) |
| 164 | + |
| 165 | +* La lógica del proyecto debe estar implementada completamente en JavaScript. |
| 166 | +* En este proyecto NO está permitido usar librerías o frameworks, sólo JavaScript |
| 167 | +puro también conocido como Vanilla JavaScript. |
| 168 | +* No se debe utilizar la _pseudo-variable_ `this`. |
| 169 | + |
| 170 | +Vas a tener 2 archivos JavaScript separando responsabilidades, a continuación |
| 171 | +indicamos qué harás en cada archivo: |
| 172 | + |
| 173 | +##### `src/validator.js` |
| 174 | + |
| 175 | +Acá escribirás las funciones necesarias para que el usuario pueda verificar la |
| 176 | +tarjeta de crédito y ocultar los dígitos de su número de tarjeta. |
| 177 | +Esta función debe ser pura e independiente del DOM. |
| 178 | + |
| 179 | +Para esto debes implementar el **objeto `validator`**, el cual ya se encuentra |
| 180 | +_exportado_ en el _boilerplate_. Este objeto (`validator`) contiene |
| 181 | +dos métodos (`isValid` y `maskify`): |
| 182 | + |
| 183 | +* **`validator.isValid(creditCardNumber)`**: `creditCardNumber` es un `string` |
| 184 | +con el número de tarjeta que se va a verificar. Esta función debe retornar un |
| 185 | +`boolean` dependiendo si es válida de acuerdo al [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn). |
| 186 | + |
| 187 | +* **`validator.maskify(creditCardNumber)`**: `creditCardNumber` es un `string` con |
| 188 | +el número de tarjeta y esta función debe retornar un `string` donde todos menos |
| 189 | +los últimos cuatro caracteres sean reemplazados por un numeral (`#`) o 🐱. |
| 190 | +Esta función deberá siempre mantener los últimos cuatro caracteres intactos, aún |
| 191 | +cuando el `string` sea de menor longitud. |
| 192 | + |
| 193 | + Ejemplo de uso |
| 194 | + |
| 195 | + ```js |
| 196 | + maskify('4556364607935616') === '############5616' |
| 197 | + maskify( '64607935616') === '#######5616' |
| 198 | + maskify( '1') === '1' |
| 199 | + maskify( '') === '' |
| 200 | + ``` |
| 201 | + |
| 202 | +##### `src/index.js` |
| 203 | + |
| 204 | +Acá escribirás todo el código que tenga que ver con la interacción del DOM |
| 205 | +(seleccionar, actualizar y manipular elementos del DOM y eventos). |
| 206 | +Es decir, en este archivo deberás invocar las funciones `isValid` y `maskify` |
| 207 | +según sea necesario para actualizar el resultado en la pantalla (UI). |
| 208 | + |
| 209 | +##### `test/validator.spec.js` |
| 210 | + |
| 211 | +En este archivo tendrás que completar las pruebas unitarias de las funciones |
| 212 | +`validator.isValid(creditCardNumber)` y `validator.maskify(creditCardNumber)` |
| 213 | +implementadas en `validator.js` utilizando [Jest](https://jestjs.io/es-ES/). |
| 214 | +Tus pruebas unitarias deben dar un 70% en _coverage_ (cobertura), |
| 215 | +_statements_ (sentencias), _functions_ (funciones) y _lines_ (líneas); y un |
| 216 | +mínimo del 50% de _branches_ (ramas). |
| 217 | + |
| 218 | +*** |
| 219 | + |
| 220 | +## 6. Pistas, tips y lecturas complementarias |
| 221 | + |
| 222 | +### Primeros pasos |
| 223 | + |
| 224 | +1. Antes que nada, asegúrate de tener un :pencil: editor de texto en |
| 225 | + condiciones, algo como [Atom](https://atom.io/) o |
| 226 | + [Code](https://code.visualstudio.com/). |
| 227 | +2. Para ejecutar los comandos a continuación necesitarás una :shell: |
| 228 | + [UNIX Shell](https://github.com/Laboratoria/bootcamp/tree/master/topics/shell), |
| 229 | + que es un programita que interpreta líneas de comando (command-line |
| 230 | + interpreter) así como tener [git](https://github.com/Laboratoria/bootcamp/tree/master/topics/scm/01-git) |
| 231 | + instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS, |
| 232 | + ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git` |
| 233 | + también). Si usas Windows puedes usar la versión completa de [Cmder](https://cmder.net/) |
| 234 | + que incluye [Git bash](https://git-scm.com/download/win) y si tienes Windows 10 |
| 235 | + o superior puedes usar [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10). |
| 236 | +3. Una de las integrantes del equipo debe realizar un :fork_and_knife: |
| 237 | + [fork](https://help.github.com/articles/fork-a-repo/) del repo de tu cohort, |
| 238 | + tus _coaches_ te compartirán un _link_ a un repo y te darán acceso de lectura |
| 239 | + en ese repo. La otra integrante del equipo deber hacer un fork **del |
| 240 | + repositorio de su compañera** y |
| 241 | + [configurar](https://gist.github.com/BCasal/026e4c7f5c71418485c1) un `remote` |
| 242 | + hacia el mismo. |
| 243 | +4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/) |
| 244 | + tu _fork_ a tu computadora (copia local). |
| 245 | +5. 📦 Instala las dependencias del proyecto con el comando `npm install`. Esto |
| 246 | + asume que has instalado [Node.js](https://nodejs.org/) (que incluye [npm](https://docs.npmjs.com/)). |
| 247 | +6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light: |
| 248 | + pruebas unitarias (unit tests) con el comando `npm test`. |
| 249 | +7. Para ver la interfaz de tu programa en el navegador, usa el comando |
| 250 | + `npm start` para arrancar el servidor web y dirígete a |
| 251 | + `http://localhost:5000` en tu navegador. |
| 252 | +8. A codear se ha dicho! :rocket: |
| 253 | + |
| 254 | +### Recursos y temas relacionados |
| 255 | + |
| 256 | +A continuación un video de Michelle que te lleva a través del algoritmo de Luhn |
| 257 | +y un par de cosas más que debes saber para resolver este proyecto. ¡Escúchala |
| 258 | +con detenimiento y sigue sus consejos! :) |
| 259 | + |
| 260 | +[](https://www.youtube.com/watch?v=f0zL6Ot9y_w) |
| 261 | + |
| 262 | +[Link](https://www.youtube.com/watch?v=f0zL6Ot9y_w) |
| 263 | + |
| 264 | +Terminal y shell de UNIX: |
| 265 | + |
| 266 | +[](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) |
| 267 | + |
| 268 | +[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) |
| 269 | + |
| 270 | +Control de versiones y trabajo colaborativo con Git y GitHub: |
| 271 | + |
| 272 | +[](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV) |
| 273 | + |
| 274 | +[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV) |
| 275 | + |
| 276 | +Diseño de experiencia de usuario (User Experience Design): |
| 277 | + |
| 278 | +* Ideación |
| 279 | +* Prototipado (sketching) |
| 280 | +* Testeo e Iteración |
| 281 | + |
| 282 | +Desarrollo Front-end: |
| 283 | + |
| 284 | +* Valores |
| 285 | +* Tipos |
| 286 | +* Variables |
| 287 | +* Control de flujo |
| 288 | +* Tests unitarios |
| 289 | +* [Documentación de NPM](https://docs.npmjs.com/) |
| 290 | + |
| 291 | +Organización del Trabajo: |
| 292 | + |
| 293 | +* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM) |
| 294 | +* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg) |
| 295 | +* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No |
| 296 | + esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a |
| 297 | + poco a lo largo del -_bootcamp_. |
| 298 | +* [Blog: cómo funciona el algoritmo de Luhn](http://www.quobit.mx/asi-funciona-el-algoritmo-de-luhn-para-generar-numeros-de-tarjetas-de-credito.html). |
0 commit comments