|
| 1 | +## Selecciona tu lenguaje |
| 2 | + |
| 3 | +- 🇺🇸 [Inglés](README.md) |
| 4 | +- 🇩🇪 [Alemán](README.de.md) |
| 5 | + |
| 6 | +## URL del Proyecto mediante GitHub Pages |
| 7 | +[https://pablosch26.github.io/keepcoding-frontend-javascript-submission-5/](https://pablosch26.github.io/keepcoding-frontend-javascript-submission-5/) |
| 8 | + |
| 9 | +# Entrega Proyecto de Desarrollo Frontend con JavaScript |
| 10 | +## Conocimientos trabajados |
| 11 | +- Funcionamiento de un Navegador. |
| 12 | +- Composicion de un href. |
| 13 | +- Browser Object Model (BOM) y Document Object Model (DOM). |
| 14 | +- Nodos y Element del DOM. |
| 15 | +- Seleccionar nodos. |
| 16 | +- Crear y eliminar elementos del nodo. |
| 17 | +- Manipulanr atributos del nodo más sus estilos y clases CSS. |
| 18 | +- Manejar eventos del DOM. |
| 19 | +- Comportamiento por defecto en los componentes del HTML. |
| 20 | +- Event Bubbling & Capturing. |
| 21 | +- Promesas y sus estados: pending, fulfilled y rejected. |
| 22 | +- Peticiones HTTP con fetch. |
| 23 | +- localStorage & sessionStorage |
| 24 | +- Almacenamiento local de datos de HTML5: cookies, storage y indexed DB. |
| 25 | + |
| 26 | +## Descripción del Proyecto |
| 27 | +Con el fin de ejercitar y demostrar los conocimientos adquiridos en clases virtuales este proyecto consiste en desarrollar una aplicación web similar a Wallapop. No se tiene permitido utilizar librerías o frameworks de JavaScript. En cambio, sí está permitido utilizar utilidades de CSS externas. |
| 28 | +Además, se debe proporcionar un archivo db.json para el backend con los datos de ejemplo para la corrección de la práctica. |
| 29 | + |
| 30 | +1. Listado de anuncios. |
| 31 | +- Cada anuncio debe mostrar su imagen (si tiene), nombre, descripción, precio y si es |
| 32 | +compra o venta. Los anuncios publicados deben obtenerse a través de un endpoint, |
| 33 | +mencionado más adelante. |
| 34 | +- La pantalla de listado de los anuncios deberá gestionar todos los estados de |
| 35 | +interfaz correctamente: vacío (no hay anuncios), error (cuando se produce un error al cargar |
| 36 | +los anuncios), carga (mientras se cargan los anuncios desde el backend) y éxito |
| 37 | +(cuando se han recuperado los anuncios y están listos para ser mostrados). |
| 38 | +- Al pulsar sobre un anuncio, iremos a la pantalla de detalle de anuncio. |
| 39 | +- Si el usuario ha hecho login, hay que mostrar al usuario un botón que le permita |
| 40 | +acceder a la pantalla de creación de un anuncio. |
| 41 | + |
| 42 | +2. Detalle de anuncio. |
| 43 | +- La página de detalle de anuncio deberá mostrar foto (si tiene), nombre, descripción, |
| 44 | +precio y si es compra o venta. |
| 45 | +- En este detalle de anuncio se deberá gestionar todos los estados de interfaz |
| 46 | +correctamente: vacío (no existe el anuncio), error (cuando se produce un error al |
| 47 | +cargar la información del anuncio), carga (mientras se cargan la información del |
| 48 | +anuncio desde el backend) y éxito (cuando se ha recuperado la información del |
| 49 | +anuncio y está listo para ser mostrado). |
| 50 | +- Si el usuario está autenticado y el anuncio le pertenece, deberá además mostrar un |
| 51 | +botón que permita eliminar el anuncio (aunque antes de eliminarlo, deberá confirmar |
| 52 | +con el usuario si realmente quiere eliminar o no el anuncio). |
| 53 | + |
| 54 | +3. Creación de un anuncio. |
| 55 | + |
| 56 | +- En la página para crear un anuncio se deberá mostrar al usuario un formulario con los siguientes campos: |
| 57 | + - Foto (opcional): permitirá subir una foto del producto. |
| 58 | + - Nombre (obligatorio): nombre del producto. |
| 59 | + - Descripción (obligatorio): descripción del producto. |
| 60 | + - Precio (obligatorio): precio del producto. |
| 61 | + - Compra/venta (obligatorio): indica si el anuncio se trata de una compra o una |
| 62 | + venta. |
| 63 | +- Cuando el usuario envíe el formulario, deberá enviar al backend una petición para |
| 64 | +guardar el anuncio. |
| 65 | +- Se deberá gestionar todos los estados de interfaz correctamente: error (cuando se |
| 66 | +produce un error al guardar la información del anuncio), carga (mientras se guarda la |
| 67 | +información del anuncio en el backend) y éxito (cuando se han guardado |
| 68 | +correctamente la información del anuncio). |
| 69 | +- A esta pantalla sólo podremos acceder si estamos logados. En caso contrario, |
| 70 | +habrá que redireccionar al usuario a la página de listado de anuncios, informándole |
| 71 | +del motivo. |
| 72 | + |
| 73 | +4. Login. |
| 74 | + |
| 75 | +- La página de login deberá mostrar un formulario solicitando el nombre de usuario y |
| 76 | +contraseña. |
| 77 | +- Cuando el usuario envíe el formulario, deberá autenticar al usuario contra el |
| 78 | +backend para obtener un token JWT que será utilizado en las siguientes |
| 79 | +comunicaciones con el backend para autenticar al usuario. |
| 80 | +- Se deberá gestionar todos los estados de interfaz correctamente: carga, error y |
| 81 | +éxito. |
| 82 | + |
| 83 | +5. Registro. |
| 84 | + |
| 85 | +- Muy parecida a la de login. Deberá mostrar un formulario solicitando el nombre de |
| 86 | +usuario y contraseña. |
| 87 | +- Cuando el usuario envíe el formulario, deberá registrar al usuario en el backend. |
| 88 | +- Se deberá gestionar todos los estados de interfaz correctamente: carga, error y |
| 89 | +éxito. |
| 90 | + |
| 91 | +### Opcional |
| 92 | +- Gestionar la paginación de anuncios en el listado, ya que por defecto la API |
| 93 | +sólo devuelve 10 elementos. |
| 94 | +- Implementar un buscador de anuncios en el listado. |
| 95 | +- Permitir editar un anuncio, sólo si el usuario autenticado es el propietario del |
| 96 | +anuncio. |
| 97 | +- Permitir el filtrado de anuncios usando tags. Por lo que en el formulario de anuncio |
| 98 | +deberán poder incluirse tags de los mismos. Estos tags inicialmente pueden ser |
| 99 | +estáticos (siempre los mismos). |
| 100 | +- Unido al anterior, hacer que los tags sean dinámicos. |
| 101 | + |
| 102 | + |
| 103 | +### API REST de apoyo para la práctica |
| 104 | +Se utilizará sparrest.js como API REST de apoyo para la práctica (creado por el docente de KeepCoding Alberto Casero), este proyecto está basado en la utilidad json-server , el cual nos ofrece un completo API REST para simular un backend real y adaptarse a las necesidades de esta práctica. |
| 105 | + |
| 106 | +## Tecnologías Utilizadas |
| 107 | + |
| 108 | +- **HTML**: Para la estructuración del contenido y la creación de la estructura de la página web. |
| 109 | +- **CSS**: Para el diseño y estilo visual de la página, asegurando una experiencia de usuario atractiva y coherente. |
| 110 | + |
| 111 | +## Instrucciones de Instalación y Uso |
| 112 | + |
| 113 | +### Requisitos de Software |
| 114 | + |
| 115 | +- **Git** (Requerido) |
| 116 | +- **SourceTree** (Opcional) |
| 117 | +- **Visual Studio** (Ejecutado en la versión 1.99.0) (Requerido) |
| 118 | + |
| 119 | +### Descripción de los Programas |
| 120 | + |
| 121 | +- **Git**: Herramienta de control de versiones. Es imprescindible para clonar el repositorio. |
| 122 | +- **SourceTree**: Una herramienta visual para gestionar repositorios Git. Permite interactuar con Git de forma sencilla sin necesidad de utilizar la línea de comandos. |
| 123 | +- **Visual Studio**: Entorno de desarrollo integrado (IDE) necesario para ejecutar el proyecto. Asegúrate de utilizar la versión 1.99.0 para evitar problemas de compatibilidad. |
| 124 | + |
| 125 | +### Pasos para utilizar este proyecto |
| 126 | + |
| 127 | +1. Clona el repositorio de GitHub utilizando **SourceTree** o directamente con el siguiente comando mediante Git: |
| 128 | + |
| 129 | + ```bash |
| 130 | + git clone https://github.com/PabloSch26/keepcoding-frontend-javascript-submission-5.git |
| 131 | + |
| 132 | +2. Una vez clonado el repositorio: |
| 133 | + |
| 134 | +2.1 Abre el proyecto en Visual Studio agregando el directorio del proyecto a tu espacio de trabajo. |
| 135 | + |
| 136 | +2.2 - |
| 137 | + |
| 138 | +### Notas |
| 139 | + |
| 140 | +- Asegúrate de tener correctamente instalados todos los programas necesarios antes de proceder con la ejecución del proyecto. |
| 141 | +- Si no deseas usar SourceTree, puedes clonar el repositorio directamente usando la terminal con el comando git clone. |
| 142 | + |
| 143 | +## Sin contribuciones ni licencias |
| 144 | + |
| 145 | +Este proyecto no cuenta con contribuciones externas ni licencia en este momento. |
| 146 | + |
| 147 | +## Vista previa del proyecto |
| 148 | + |
| 149 | +- |
0 commit comments