Este producto ha sido elaborado como primer proyecto para el bootcamp Laboratoria, cohort DEV001.
En los últimos años se ha incrementado la venta por internet de toda variedad de productos, así como la preferencia de las personas de adquirir artículos a través de esta modalidad, ya sea por la ventaja que supone recibir sus compras en la puerta de su hogar, como por la posibilidad de tener a su disposición una gran variedad de ofertas de cualquier parte del mundo.
La emergencia sanitaria por la COVID-19 generó una explosión en el comercio electrónico. De acuerdo al Observatorio E-commerce 2021-2022 de la Cámara Peruana de Comercio Electrónico, en el Perú el número de empresas que venden a través de internet ha aumentado en 55% con relación al 2020. Según esta institución, al cierre del año 2021, 41.8% de los peruanos (13.9 millones) hizo compras por internet. Este es un aumento bastante considerable si tenemos en cuenta que antes de la pandemia solo el 18.6% de peruanos (6 millones) compraban online.
Esto ha ocasionado que los negocios hayan tenido que adaptarse a las nuevas necesidades de las personas y, pese a que algunas temían pagar en línea, los negocios han encontrado una salida al implementar en sus tiendas virtuales la opción de pago con tarjetas de crédito o débito.
Teniendo en cuanta lo antes mencionado, se ha pensado en aquellos negocios que desean facilitar la compra de sus productos de manera online y en aquellos consumidores interesados en hacer compras por internet con una tarjeta de crédito de manera segura.
Objetivo: Verificar si la tarjeta de crédito utilizada por el usuario es válida para completar su compra.
- El proyecto inicia mostrando los pasos finales al realizar una compra en una web. Muestra el producto seleccionado por el usuario y el botón para finalizar su compra.
- El usuario debe ingresar los datos que se le solicitan: número de tarjeta, fecha de expiración de la tarjeta y código CVV.
- Si el usuario ingresa una tarjeta válida, se le mostrará un mensaje que confirma su pago y que recibirá su número de seguimiento a su correo electrónico.
- Si el usuario ingresa una tarjeta inválida, se le mostrará un mensaje que le indica que deberá ingresar otro número de tarjeta.
- 1. Objetivos de aprendizaje generales
- 2. Preámbulo
- 3. Resumen del proyecto
- 4. Consideraciones generales
- 5. Hito 1: Criterios de aceptación mínimos del proyecto
- 6. Hito 2 (opcional): Mostrar la franquicia de tarjeta
- 7. Consideraciones técnicas
- 8. Objetivos de aprendizaje
- 9. Pistas, tips y lecturas complementarias
- 10. Para considerar Project Feedback
Como continuación del proyecto de preadmisión, volverás a trabajar sobre fundamentos de JavaScript, incluyendo conceptos como variables, condicionales, y funciones, así como eventos y manipulación básica del DOM, fundamentos de HTML y CSS.
Mientras desarrollas este proyecto, te familiarizarás con estos nuevos conceptos:
- Un boilerplate, la estructura básica de un proyecto en distintas carpetas (a través
modulos
en JS). - Las herramientas de mantenimiento y mejora del código (linters y pruebas unitarias).
- Objetos en JavaScript, su estructura y métodos.
- Iteración (bucles) en JavaScript.
- Control de versiones con git (y la plataforma github)
El algoritmo de Luhn, también llamado algoritmo de módulo 10, es un método de suma de verificación, se utiliza para validar números de identificación; tales como el IMEI de los celulares, tarjetas de crédito, etc.
Este algoritmo es simple. Obtenemos el reverso del número a verificar (que solamente contiene dígitos [0-9]); a todos los números que ocupan una posición par se les debe multiplicar por dos, si este número es mayor o igual a 10, debemos sumar los dígitos del resultado; el número a verificar será válido si la suma de sus dígitos finales es un múltiplo de 10.
En este proyecto tendrás que construir una aplicación web que le permita a un usuario validar el número de una tarjeta de crédito. Además, tendrás que implementar funcionalidad para ocultar todos los dígitos de una tarjeta menos los últimos cuatro.
La temática es libre. Tú debes pensar en qué situaciones de la vida real se necesitaría validar una tarjeta de crédito y pensar en cómo debe ser esa experiencia de uso (qué pantallas, explicaciones, mensajes, colores, ¿marca?) etc.
Trabajando en parejas aprenderán a construir una aplicación web que interactuará con la usuaria final a través del navegador, utilizando HTML, CSS y JavaScript como tecnologías.
- Este proyecto lo resolvemos de manera individual. Te recomendamos una duracion de 1-3 sprints.
- Enfócate en aprender y no solamente en "completar" el proyecto. Te va a costar.
- Te sugerimos que no intentes saberlo todo antes de empezar a codear.
No te preocupes demasiado ahora por lo que todavía no entiendas. Irás aprendiendo.
Estos son los requisitos que tu proyecto debe que cumplir para asegurar que tu trabajo cubra los objetivos principales.
1. Una interfaz que debe permitir a la usuaria validar un numero
- Insertar un numero (texto) que quieres validar. Usa solo caracteres numéricos (dígitos) en la tarjeta a validar [0-9].
- Ver si el resultado es válido o no.
- Ocultar todos los dígitos del número de tarjeta a exepción de los últimos 4 caracteres.
- No debes poder ingresar un campo vacío.
2. Pruebas unitarias de los métodos.
Los metódos de validator
(isValid
y maskify
) deben tener cobertura con pruebas unitarias.
3. Código de tu proyecto subido a tu repo y interfaz "desplegada".
El código final debe estar subido en un repositorio en GitHub. La interfaz o pagina web, debe ser "desplegada" usando GitHub Pages.
4. Un README que contiene una definición del producto.
En el README cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso para definir el producto final a nivel de experiencia y de interfaz.
Estas preguntas sirven como guía:
- Quiénes son los principales usuarios de producto.
- Cuáles son los objetivos de estos usuarios en relación con tu producto.
- Cómo crees que el producto que estás creando está resolviendo sus problemas.
Con estos requisitos cumplidos puedes considerar agendar un Project Feedback con unx coach.
Las partes "opcionales" tienen como intención permitirte profundizar un poco más sobre los objetivos de aprendizaje del proyecto. Todo en la vida tiene pros y contras, decide sabiamente si quieres invertir el tiempo en profundizar/perfeccionar o aprender cosas nuevas en el siguiente proyecto.
En hito 2 puedes además de validar si el número de la tarjeta es válida, mostrar la franquicia de la tarjeta (ej: Visa, MasterCard, etc) usando estas reglas de validación. Si escribes un nuevo método para eso, hay que hacer pruebas unitarias.
La lógica del proyecto debe estar implementada completamente en JavaScript. En este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro también conocido como Vanilla JavaScript.
Para comenzar este proyecto tendrás que hacer un fork y clonar este repositorio que contiene un boilerplate con tests (pruebas). Un boilerplate es la estructura basica de un proyecto que sirve como un punto de partida con archivos inicial y configuración basica de dependencias y tests.
Los tests unitarios deben cubrir un mínimo del 70% de statements, functions
y lines, y un mínimo del 50% de branches. El boilerplate ya contiene el
setup y configuración necesaria para ejecutar los tests (pruebas) así como code
coverage para ver el nivel de cobertura de los tests usando el comando npm test
.
El boilerplate que les damos contiene esta estructura:
./
├── .babelrc
├── .editorconfig
├── .eslintrc
├── .gitignore
├── README.md
├── package.json
├── src
│ ├── validator.js
│ ├── index.html
│ ├── index.js
│ └── style.css
└── test
├── .eslintrc
└── validator.spec.js
README.md
: debe explicar la información necesaria para el uso de tu aplicación web, así como una introducción a la aplicación, su funcionalidad y decisiones de diseño que tomaron.src/index.html
: este es el punto de entrada a tu aplicación. Este archivo debe contener tu markup (HTML) e incluir el CSS y JavaScript necesario.src/style.css
: este archivo debe contener las reglas de estilo. Queremos que escribas tus propias reglas, por eso NO está permitido el uso de frameworks de CSS (Bootstrap, Materialize, etc).src/validator.js
: acá debes implementar el objetovalidator
, el cual ya está exportado en el boilerplate. Este objeto (validator
) debe contener dos métodos:-
validator.isValid(creditCardNumber)
:creditCardNumber
es unstring
con el número de tarjeta que se va a verificar. Esta función debe retornar unboolean
dependiendo si es válida de acuerdo al algoritmo de Luhn. -
validator.maskify(creditCardNumber)
:creditCardNumber
es unstring
con el número de tarjeta y esta función debe retornar unstring
donde todos menos los últimos cuatro caracteres sean reemplazados por un numeral (#
) o 🐱. Esta función deberá siempre mantener los últimos cuatro caracteres intactos, aún cuando elstring
sea de menor longitud.Ejemplo de uso
maskify('4556364607935616') === '############5616' maskify( '64607935616') === '#######5616' maskify( '1') === '1' maskify( '') === ''
-
src/index.js
: acá debes escuchar eventos del DOM, invocarvalidator.isValid()
yvalidator.maskify()
según sea necesario y actualizar el resultado en la UI (interfaz de usuario).test/validator.spec.js
: este archivo contiene algunos tests de ejemplo y acá tendrás que implementar los tests paravalidator.isValid()
yvalidator.maskify()
.
El boilerplate incluye tareas que ejecutan eslint y
htmlhint para verificar el HTML
y
JavaScript
con respecto a una guías de estilos. Ambas tareas se ejecutan
automáticamente antes de ejecutar las pruebas (tests) cuando usamos el comando
npm run test
. En el caso de JavaScript
estamos usando un archivo de
configuración de eslint
que se llama .eslintrc
que contiene un mínimo de
información sobre el parser que usar (qué version de JavaScript/ECMAScript), el
entorno (browser en este caso) y las reglas recomendadas ("eslint:recommended"
).
En cuanto a reglas/guías de estilo en sí,
usaremos las recomendaciones por defecto de tanto eslint
como htmlhint
.
Hacer que los sitios estén publicados (o desplegados) para que usuarias de la web puedan acceder a él es algo común en proyectos de desarrollo de software.
En este proyecto, utilizaremos Github Pages para desplegar nuestro sitio web.
El comando npm run deploy
puede ayudarte con esta tarea y también puedes
consultar su documentación oficial.
Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.
-
Uso de HTML semántico
-
Uso de selectores de CSS
-
Modelo de caja (box model): borde, margen, padding
-
Uso de selectores del DOM
-
Manejo de eventos del DOM (listeners, propagación, delegación)
-
Manipulación dinámica del DOM
-
Tipos de datos primitivos
-
Strings (cadenas de caracteres)
-
Variables (declaración, asignación, ámbito)
-
Uso de condicionales (if-else, switch, operador ternario, lógica booleana)
-
Uso de bucles/ciclos (while, for, for..of)
-
Funciones (params, args, return)
-
Pruebas unitarias (unit tests)
-
Módulos de ECMAScript (ES Modules)
-
Uso de linter (ESLINT)
-
Uso de identificadores descriptivos (Nomenclatura y Semántica)
-
Git: Instalación y configuración
-
Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)
-
GitHub: Creación de cuenta y repos, configuración de llaves SSH
-
GitHub: Despliegue con GitHub Pages
- Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro
-
Crear prototipos de alta fidelidad que incluyan interacciones
-
Seguir los principios básicos de diseño visual
- Antes que nada, asegúrate de tener un 📝 editor de texto en condiciones, algo como Atom o Code.
- Para ejecutar los comandos a continuación necesitarás una 🐚
UNIX Shell,
que es un programita que interpreta líneas de comando (command-line
interpreter) así como tener git
instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS,
ya tienes una shell (terminal) instalada por defecto (y probablemente
git
también). Si usas Windows puedes usar la versión completa de Cmder que incluye Git bash y si tienes Windows 10 o superior puedes usar Windows Subsystem for Linux. - Una de las integrantes del equipo debe realizar un 🍴
fork del repo de tu cohort,
tus coaches te compartirán un link a un repo y te darán acceso de lectura
en ese repo. La otra integrante del equipo deber hacer un fork del
repositorio de su compañera y
configurar un
remote
hacia el mismo. - ⬇️ Clona tu fork a tu computadora (copia local).
- 📦 Instala las dependencias del proyecto con el comando
npm install
. Esto asume que has instalado Node.js (que incluye npm). - Si todo ha ido bien, deberías poder ejecutar las 🚥
pruebas unitarias (unit tests) con el comando
npm test
. - Para ver la interfaz de tu programa en el navegador, usa el comando
npm start
para arrancar el servidor web y dirígete ahttp://localhost:5000
en tu navegador. - A codear se ha dicho! 🚀
Súmate al canal de Slack #project-card-validation para conversar y pedir ayuda de proyecto.
A continuación un video de Michelle que te lleva a través del algoritmo de Luhn y un par de cosas más que debes saber para resolver este proyecto. ¡Escúchala con detenimiento y sigue sus consejos! :)
Terminal y shell de UNIX:
Control de versiones y trabajo colaborativo con Git y GitHub:
Desarrollo Front-end:
Organización del Trabajo:
- Metodologías Ágiles
- Scrum en menos de 2 minutos
- Scrum en Detalle. No esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a poco a lo largo del -bootcamp.
- Blog: cómo funciona el algoritmo de Luhn.
En resumen, los criterios de aceptación mínimos del proyecto para considerar Project Feedback:
- Tiene una interfaz que permite a la usuaria saber si la tarjeta es valido y ocultar el numero hasta las 4 ultimos digitos
- El proyecto será entregado incluyendo pruebas unitarios de los métodos de
validator
(isValid
ymaskify
) - El proyecto será entregado libre de errores de
eslint
(warnings son ok) - El proyecto será entregado subiendo tu código a GitHub.
- La interfaz será "desplegada" usando GitHub Pages.
- El README contiene una definición del producto