Video de Investigación Proy Integrador 2B
Video de Investigación Proy Integrador 2B
Video de Investigación Proy Integrador 2B
Video de investigación
Salón: 4204
Grupo: 003
Se elabora un sistema que realice una venta de productos, que contenga clientes,
productos y toda esta información se guarde en una base de datos. El back end en
.Net core, el Front End en Angular, y otro Front End en Xamarin.
Diagrama UML
Después se inicio con el diseño de la base de datos, que sirve para guardar
información que se pueda recurrir a ella en un futuro ya sea para hacer reportes o
consultarla, para poder entrar se tiene que especificar el servicio el usuario y la
contraseña.
Una nota importante que se tiene que considerar es que al momento de crear la
tabla, en la parte de data type, se debe considerar si se utiliza un bigint cuando mi
base de datos tiene miles de datos o si ya se habla de millones se utiliza gits.
Campo venta
Otro campo que tiene la venta es la fecha, es importante para saber en qué hora
se guardó la venta. El siguiente campo seria la venta total, para así poder tener los
totales de las ventas por si se desea hacer un reporte con todos los totales, este
es un dato que se puede llegar a necesitar.
Campo concepto
La tabla llamada concepto se esta ligando al campo total al igual que la Cantidad
de productos, Precio unitario, Importe
Campo producto
Estas tres tablas se van a ligar con una llave, para poder hacer la conexión o la
unión de la información.
Para ejecutar y probar los servicios se utiliza una herramienta llamada postman,
en esta herramienta se insertará la URL para que el controlador me la indique. Al
momento de agregar dos campos me da el servicio en el postman.
Un Entity framework es un ORM, que sirve para mapear a una base de datos y las
construya para poder acceder a la base de datos, y usar los métodos que genera
automáticamente y manipularlos. Se instalan dos herramientas, después se crea
una carpeta que se llama models, esto viene siendo una clase que sirve de molde,
e identifica un conjunto de campos y atributos. Con la consola de visual studio se
escribe scaffool-DB contexts, en la cual se pondrá dentro de ella la base de datos.
Con esto se van a crear las clases automaticamente que se tienen en la base de
datos, para poder realizar las consultas.
CRUD
Hay que darle un formato a nuestra respuesta, se crea una clase en models,
dentro de la carpeta llamada reponse, sirve de molde para todas las respuestas,
un object se heredea puede meterse cualquier información, y asi se puede tener
comunicación con nuestro front end.
CRUD (Create, Read, Update, Delete) es un acrónimo para las maneras en las
que se puede operar sobre información almacenada. Es un nemónico para las
cuatro funciones del almacenamiento persistente. CRUD usualmente se refiere a
operaciones llevadas a cabo en una base de datos o un almácen de datos, pero
también pude aplicar a funciones de un nivel superior de una aplicación como soft
deletes donde la información no es realmente eliminada, sino es marcada como
eliminada a tráves de un estatus.
Para hacer la inserción en la base de datos se utiliza un public, el que que recibe
el dato será el protocolo, los datos que se insertan es la tabla de clientes, se
reciben nombre del cliente, con un solo campo. Después de ya tener esto se da de
alta este request del cliente.
El núcleo del sistema será la venta, se hace la inserción, que se une el contexto
de venta real con el contest, se utiliza el modelo clientey se crea un objeto de esa
clase para hacer la conexión.
Para hacer el eliminar, es por el protocolo delete, ahí se recibe un campo llamada
delete, se hace la búsqueda por id, se elimina con la palbara DB. remove. Esto
hace un delete en la base de datos o borrado físico. En el body se manda el id que
se borrara.
Instalación de angular
Angular se basa en clases tipo "Componentes", cuyas propiedades son las usadas
para hacer el binding de los datos. En dichas clases tenemos propiedades
(variables) y métodos (funciones a llamar).
Programación de angular
Servicios en angular
Se analiza que en postman tiene tres atributos éxito, mensaje y data, estos se
quieren representar en angular de modelo, para que angula ya se tenga una
carpeta de base o molde, estos atributos los tiene el objeto.
Directiva ngFor
Como insertar datos desde angular al servicio, pero antes en .net se tienen que
agregar dos cosas, una nueva línea en le métodos post para que nos acepte
todos, para que se vea un poco más presentable el controlador de clientes hacer
un order by, y la forma en que se desea ordenar.
El método HTTP POST envía datos al servidor. El tipo del cuerpo de la solicitud es
indicada por la cabecera Content-Type.
La diferencia entre PUT y POST es que PUT es idempotente: llamarlo una o varias
veces sucesivamente tiene el mismo efecto (no tiene efecto secundario //
colateral), mientras que varios POST idénticos pueden tener efectos adicionales,
como pasar una orden muchas veces.
Ng Model
El modelo trabaja con los datos, así que podemos entender que el enlace creado
con ngModel permite que desde la vista pueda usar un dato. Sin embargo, con
expresiones ya se podía usar un dato, volcando su valor en la vista como {{dato}}.
La diferencia es que al usar ese dato en campos de formulario, debes aplicar el
valor mediante la directiva ngModel.
Hasta ahora con lo que sabemos podemos usar los servicios para leer y escribir
datos, pero simulados o guardados en la memoria del navegador, para leer o
escribir de una API REST tenemos que hacer llamadas HTTP.
Por cierto, una API es un conjunto de endpoints (o rutas) que provee un servidor
(backend) que permiten acceder a datos o realizar operaciones. Normalmente lo
que se suele hacer es primero generar una API en un servidor usando un lenguaje
como Java o Python (ojo porque no puedes generar una API con Angular, tiene
que estar creada en un servidor).
Para poder autenticar un usuario o aplicación, este envía una petición a una
dirección URL específica informando de todos los datos necesarios para ello
(normalmente usuario y contraseña). El API recibe esa información y valida si los
datos son correctos. En caso de que la validación sea exitosa, genera un token y
lo devuelve al solicitante para que este lo guarde y posteriormente lo envíe en
cada una de sus peticiones.
Utilizar este tipo de autenticación en nuestras APIs nos abre un amplio abanico de
posibilidades a la hora de consumirla desde cualquier parte. Es utilizada en apps,
webs e incluso servicios de integración de datos.
CanLoad: Sirve para evitar que la aplicación cargue los módulos perezosamente si
el usuario no está autorizado a hacerlo.
Los guards se implementan para ser inyectandos por lo tanto tenemos que usar la
etiqueta Inyectable, como si fuera un servicio. Si necesitas saber como crear
servicios te recomiendo un artículo anterior que escribí sobre este tema
Lo primero que hacemos es poner la etiqueta Injectable, como hemos dicho antes,
y a continuación, creamos la clase con el nombre que queramos y implementamos
de CanActivate. LLamamos al constructor con las dependencias que necesitemos,
en este caso, el authService para recuperar el user que esté logueado, y el router,
para redirigir al usuario a la página de inicio en caso de que no esté logueado.
Después llamamos al método canActivate() y hacemos la comprobación. si el
usuario no está logueado lo llevamos a la página de inicio con router.navigate y
devolvemos false. Si esta logueado, devolvemos true.
Si lo que queremos es que todas las páginas hijas de una ruta estén protegidas lo
que tenemos que hacer es cambiarle un par de cosas del guard. EL guard ahora
no implementará de CanActivate sino de CanActivateChild, y el método de dentro
de la clase, como es obvio, también cambiará a CanActivateChild(). El resto de
cosas del guard se mantienen.
Para usar este guard para todos los hijos hacemos lo mismo que antes (añadiendo
el guard en el componente padre), añadiéndolo a la ruta, pero esta vez el campo
de la ruta se llamará canActivateChild.
Lo bueno de los guards de Angular es que puedes crear varios para usarlos en
varias rutas. Además, si quieres usar varios guards en la misma ruta, también
puedes hacerlo, simplemente separando los guards con una coma.
Para crear el login se crea una nueva carpeta login component y dentro se crean
dos archivos, en el app routing hay que mandarlo al login component, después se
tiene que crear la clase.
Interceptors y local storage
Para crear nuestro interceptor, tenemos que generar un servicio usando el CLI de
angular. Una vez creado el servicio implementa la interfaz HttpInterceptor y otras
clases extras que se encuentran en ‘@angular/common/http.
Una vez hecho todo eso implementaremos la parte en que nuestro interceptor
agrega la cabecera ‘Authorization’ con el token que vayamos a usar, como modo
de ejemplo, imaginemos que tenemos el token almacenado en localStorage con la
clave ‘token’ y para obtener el token tendremos que hacer lo siguiente:
localStorage.getItem(‘token’).
ahora declaramos una constante que guarde el token obteniendolo del
localStorage. El token puede o no existir en nuestro localStorage, y para no estar
enviando la cabecera ‘Authorization’ vacía, condicionamos si existe algún token,
posteriormente si existe un token, modificamos el request agregándole la
cabecera, utilizando el método clone que viene en nuestro request de tipo
HttpRequest y pasándole la cabecera con el token. una vez modificado el request
lo retornamos de nuestro método.
Ahora bien, hay que recordar que los interceptors se ejecutan en cada petición
que se realiza al servidor, siempre y cuando sean registrados. Para registrar un
interceptor se tiene que proveer en el array de providers: [] en nuestro módulo raíz,
por lo general AppModule. Importamos HTTP_INTERCEPTORS y
HttpClientModule, luego proveémos nuestro interceptor.
Otra cosa que podríamos realizar en nuestro interceptor sería redirigir al usuario a
la página de login cuando el token haya expirado o no tenga un token válido por
ejemplo.
Los formularios son indispensables estos permiten tener control de los elementos
o inputs. Los formularios basados en plantillas utilizan el “FormsModule”, mientras
que los formularios reactivos se basan en “ReactiveFormsModule”. Los formularios
basados en plantillas son de naturaleza asincrónica, mientras que los formularios
reactivos son en su mayoría sincrónicos. En un enfoque basado en plantillas, la
mayor parte de la lógica se basa en la plantilla, mientras que en el enfoque basado
en reactivos, la lógica reside principalmente en el componente .
Primero ejecutamos los comandos del CLI para crear un componente para los
formularios mediante plantillas y para formularios reactivos. No hay que olvidarse
de importar los componentes y el módulo para los formularios Reactivos
(ReactiveFormsModule) en el módulo correspondiente, en este caso sin aplicar
LazyLoading lo hago en el propio app.module.ts para centrarnos en los formularios
únicamente.
Trabajar con varios Observables al mismo tiempo, es una de las tareas más
truculentas en RxJs como veremos a lo largo del post, pero vamos por partes.
RxJs posee distintos operadores de combinación, que nos permiten coger los
valores emitidos por distintos Observables y combinarlos, dando como resultado
un único Observable, mucho más fácil de manejar.
json en el backend en C#
Vamos a realizar una petición a la API, por ejemplo desde el navegador, para
copiar la respuesta que nos da. Vamos a entrar en json2csharp y vamos a copiar
la respuesta de la API. Le damos al botón de generar, para que nos cree la clase o
clases necesarias para mapear cada uno de los campos del JSON, en
propiedades de las clases. Copiamos el código de las clases resultantes en Visual
Studio, teniendo en cuenta que renombraremos la clase RootObject, con el
nombre que nosotros queramos usar, en este caso Meteorologia. Yo normalmente
renombro las propiedades para que tengan la primera letra en mayúsculas, pero
esto es una cuestión de estilo y no es obligatorio.
Entity Framework en C#
Las transacciones son útiles cuando hablamos de base de datos y debemos hacer
muchas consultas en conjunto, ya que nos permiten realizar un retroceso en la
manipulación de datos si una de las consultas del conjunto falla.
Con Entity Framework es posible realizar transacciones, y no solo eso, sino que
podemos tener el poder de realizar otras funciones distintas a manipulación de
datos y decidir si fallan estas otras funciones aplicar un rollback.
Hacer que una clase reciba referencias a los componentes que necesite para
funcionar, en lugar de permitir que sea ella misma quien los instancie de forma
directa o a través de factorías.
En este caso es con los data notations, son utilidades que da el framework para
validar los modelos, en este caso el principal de ventas, para que el id venga. El
estado del modelo representa errores que provienen de dos subsistemas: enlace
de modelo y validación de modelo. Los errores que se originan en el enlace del
modelo son generalmente errores de conversión de datos. Por ejemplo, se ingresa
una "x" en un campo de número entero. La validación del modelo se produce
después de la vinculación del modelo y notifica errores en los que los datos no se
ajustan a las reglas comerciales. Por ejemplo, se ingresa un 0 en un campo que
espera una calificación entre 1 y 5.
Tanto el enlace del modelo como la validación del modelo se producen antes de la
ejecución de una acción de controlador o un método de controlador de Razor
Pages. Para las aplicaciones web, es responsabilidad de la aplicación
inspeccionar ModelState.IsValidy reaccionar adecuadamente. Las aplicaciones
web suelen volver a mostrar la página con un mensaje de error
https://www.youtube.com/watch?
v=b5iZ2cJyIi0&list=PLWYKfSbdsjJghGaiXPs3fbuZWk2EDdNZf