Crear una aplicación web en PHP utilizando el framework Laravel que permita realizar las siguientes acciones:
-
Acceder a la zona de inicio: para acceder a la zona de inicio se debe enviar por la URL el código: A765. En caso de que el código sea válido se desplegarán 3 enlaces:
- Registrar vehículos
- Listar vehículos
- Estadísticas vehículos. En caso contrario deberá desplegar un mensaje que diga zona prohibida (Se cambió a "No esta autorizado a acceder esta sección!").
-
Registrar vehículos: Cree un sistema que permita registrar tanto vehículos como dueños al mismo tiempo. En un mismo formulario recoja todos los datos y registre los datos de las 2 tablas.
Nota: se recomienda registrar primero los datos de los dueños para evitar problemas de claves foráneas inexistentes. Registre 2 vehículos y 2 dueños. Verifique únicamente que la marca sea válida.
-
Listar vehículos: Liste todos los vehículos con los siguientes datos: placa y marca; para los vehículos tipo Mazda muestre al lado de la placa un mensaje en verde que diga (“Los de Mazda son los mejores”) y para los vehículos tipo Toyota muestra la placa en rojo y negrilla.
-
Estadísticas vehículos: Muestre cuántos vehículos de cada tipo existen registrados en el sistema(por ejemplo: 3 Mazda, 2 Toyota, 0 Chevrolet).
La aplicación se encuentra alojada en un servidor de Heroku y se puede acceder a través de este link
Dependiendo de cómo se ejecute la aplicación, de aquí en adelante no hablaremos de la url completa, nos referiremos únicamente al path de la sección que se esté hablando y para probarse se deberá agregar una url base de las mencionadas a continuación:
- Local: http://localhost:8000/
- Heroku: http://vehicle-controller.herokuapp.com/
Además de las tablas users
, password_resets
y migrations
creadas por el framework, para implementar la solución se crearon:
people
: Tabla para almacenar la información de los propietarios de vehículos.brands
: Tabla para almacenar la información de las marcas de vehículos a registrar.vehicules
: Tabla para almacenar los distintos vehículos que se registren en el sistema.authorized_codes
: Tabla para almacenar los códigos válidos para realizarLogin
en la aplicación.
Se crearon los seeders BrandSeed y AuthorizedCodeSeed para cargar las marcas de vehículos y códigos de login respectivamente mencionados en el enunciado del problema. Estos seeders crean registros en la base de datos, únicamente si las tablas asociadas no contienen registros.
Para acceder a la zona de inicio se debe ingresar a /{code}
, reemplazando el placeholder por un valor válido que exista en la DB para poder loguearse; el controlador VehicleController en su método index
se encarga de hacer las validaciones, crear la sesión del usuario si este envíó un código correcto o enviandolo a la pantalla de Acceso prohíbido
Si el usuario está logueado, podrá acceder a esta sección desde Zona de inicio o a través de la URL /register
. La pantalla presentará un formulario solicitando los datos del propietario y del vehículo que se desean registrar. Las reglas de registro de los datos se manejan a través de un request en el método store
del controlador VehicleController
Si el usuario está logueado, podrá acceder a esta sección desde Zona de inicio o a través de la URL /vehicles
. Si el usuario no ha hecho log-in en la aplicación será redireccionado a la pantalla de Acceso prohíbido
Si el usuario está logueado, podrá acceder a esta sección desde Zona de inicio o a través de la URL /stats
. Si el usuario no ha hecho log-in en la aplicación será redireccionado a la pantalla de Acceso prohíbido
Pantalla que se muestra cuando el usuario intenta acceder a una sección de la aplicación sin haber realizado log-in.
La lógica de las diferentes secciones de la aplicación es manejada por un único controlador: VehicleController
El middleware AuthenticatedUserMiddleware se encarga de validar que el usuario haya realizado previamente login en la aplicación para poder acceder a cualquier sección de esta.
- Local
- MySQL -> 5.7
- Heroku
- PostgreSQL -> 11.5
- PHP 7.2+
- Composer
- MySQL 5.2+
Para poner el proyecto en ejecución se deben seguir una serie de pasos que se detallan a continuación, a modo de ejemplo todos los snippets de comandos se ejecutan en el directorio /tmp
del OS.
Clonar el repositorio:
user@host:/tmp/$ git clone [email protected]:leonplondon/vehicles-controller.git
Entrar en el directorio de la app ejecutar:
user@host:/tmp$ cd vehicles-controller
user@host:/tmp/vehicles-controller$ composer i
Cear archivo de variables de entorno y actualizar las que tienen como prefijo DB_
con los valores deseados:
user@host:/tmp/vehicles-controller$ cp .env.example .env
Generar id de la aplicación:
user@host:/tmp/vehicles-controller$ php artisan key:generate
Ejecutar la aplicación:
user@host:/tmp/vehicles-controller$ php artisan migrate
user@host:/tmp/vehicles-controller$ php artisan db:seed
user@host:/tmp/vehicles-controller$ php artisan serve