Proyecto integrado fin del Ciclo Formativo de Grado Superior en desarrollo de Aplicaciones Web
La finalidad principal de la aplicación, ha sido la demostración de la puesta en práctica de los conocimientos adquiridos a lo largo del ciclo formativo de desarrollo de aplicaciones web. He focalizado la aplicación en los conocimientos adquiridos sobre la gestión de privilegios de acceso de usuarios a distintos elementos (o módulos como me referiré a lo largo del documento) de la aplicación, la gestión de usuarios jerarquizados en distintos grupos (denominados roles) y la administración por parte de un usuario autorizado. No menos relevante ha sido la aplicación de los conocimientos en el diseño y gestión de bases de datos relacionales y las plataformas de implementación de estas. Otro factor que se ha tenido en cuenta ha sido la seguridad del entorno de uso (JWT) y de la aplicación (Angular), implementando funcionalidades como, la encriptación de datos sensibles, o la prevención en la utilización de elementos sensibles a la inyección de información automatizada (cracking o ataques de fuerza bruta).
Tecnologías
- Frontend: Angular 16
- Backend: Laravel 10 + JWT
- API externa: IA (Flask)
Arquitectura
Esta es la arquitectura que se ha utilizado para el entorno de producción en una VPS.
La separación lógica del frontend, el backend y la base de datos.
Entorno de ejecución - Frontend
Documentación de la API - Backend
Repositorio con el contenido
Fuentes:
Angular
- https://openwebinars.net/academia/aprende/angular/9221/
- https://www.positronx.io/laravel-angular-token-based-authentication-with-jwt/
- https://www.ultimateakash.com/blog-details/Ii1TNGAKYAo=/How-to-Implement-JWT-Authentication-in-Angular-2023
- https://www.tektutorialshub.com/angular/meta-service-in-angular-add-update-meta-tags-example/ https://angular.io/api/platform-browser/MetaDefinition
- https://www.concretepage.com/angular-2/angular-2-4-minlength-and-maxlength-validation-example#:~:text=It%20means%20the%20value%20entered,can%20write%20code%20as%20below.
- https://stackoverflow.com/questions/52389376/how-to-reload-current-page
LocalStorage y sessionStorage
Component Lifecycle
Unit testing
- https://www.infragistics.com/community/blogs/b/infragistics/posts/unit-testing-in-angular -> ng test –code-coverage
Auth guard with roles/permission based
Unsuscribing AJAX request
Laravel Creación del API rest en laravel con autenticación JWT
- https://www.positronx.io/laravel-jwt-authentication-tutorial-user-login-signup-api/
- https://www.nigmacode.com/laravel/roles-de-usuario-en-laravel/ -> php artisan vendor:publish –provider=”Spatie\Permission\PermissionServiceProvider”
- https://laraveldaily.com/post/laravel-api-errors-and-exceptions-how-to-return-responses
- https://stackoverflow.com/questions/64897053/laravel-8-return-all-exceptions-as-json
- https://www.itsolutionstuff.com/post/laravel-9-user-roles-and-permissions-tutorialexample.html https://larainfo.com/blogs/laravel-9-image-file-upload-example
- https://stackoverflow.com/questions/68128685/laravel-get-public-url-for-file-stored-in-storage-public-folder -> php artisan storage:link https://tinkerwell.app/blog/laravel-caches-and-all-ways-to-clear-them
- https://www.positronx.io/laravel-image-resize-upload-with-intervention-image-package/
Spatie permissions
- https://spatie.be/docs/laravel-permission/v5/basic-usage/direct-permissions
- https://laravelcode.com/post/laravel-8-user-roles-and-permissions-using-spatie https://spatie.be/docs/laravel-permission/v5/basic-usage/role-permissions
- https://scrutinizer-ci.com/g/spatie/laravel-permission/code-structure/master/operation/Spatie%5CPermission%5CTraits%5CHasPermissions::syncPermissions
Faker y seed imagenes
- https://styde.net/generando-datos-de-prueba-con-faker-en-laravel/
- https://github.com/fzaninotto/Faker#formatters
- https://kodementor.com/how-to-seeds-images-with-faker-in-laravel/
- https://styde.net/insercion-de-datos-con-los-seeders-de-laravel/ -> php artisan migrate:fresh –seed
Vínculo de storage -> public
- https://laravel.com/docs/10.x/filesystem#the-public-disk -> php artisan storage:link
Unit testing
- https://platzi.com/discusiones/1842-intro-laravel/85644-que-diferencia-hay-entre-unit-test-y-feature-test/
- https://laravel.com/docs/10.x/testing -> php artisan test
Docker postgreSQL database backup