//-------------------------------------------------------------------------------------------------- //FUNCION QUE ACTUALIZARA LA INFORMACION DE UN USUARIO CUANDO SE REALICE EL LLAMADO DESDE //LA PAGINA "PaginaConfiguracion" DE LA APLICACION "Mtto App". EN ESTA FUNCION SE RECIBEN //LOS PARAMETROS: // -cedula => DATO DEFINIDO EN EL URL DE LA SOLICITUD (POR ESTA RAZON EL ROUTING "Route" //CONTIENE LA PALABRA "{cedula}") // -newinfo => OBJETO ENVIADO EN EL BODY DE LA SOLICITUD HTTP EL CUAL CONTIENE TODA LA //INFORMACION (VIEJA Y ACTUALIZADA) DEL USUARIO A ACTUALIZAR/CONFIGURAR //-------------------------------------------------------------------------------------------------- public async Task <IActionResult> ActualizarUsuario(double cedula, [FromBody] ConfiguracionU newinfo) { //SE EVALUA SI PARAMETRO "cedula" Y LA PROPIEDAD "cedula" DEL OBJETO "newinfo" SON DIFERENTES if (cedula != newinfo.Cedula) //=> LAS PROPIEDADES SON DISTINTAS { //SE DA RETORNO A LA SOLICITUD CON LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO AL USUARIO return(BadRequest("La cedula no coincide con la informacion del objeto enviado")); } //SI EL PARAMETRO "cedula" Y LA PROPIEDAD "cedula" DEL OBJETO "newinfo" SON SIMILARES //SE INICIA LA TRASACCION using (var transaction = this._context.Database.BeginTransaction()) { //SE INICIA EL CICLO TRY... CATCH try { //CON LA INFORMACION ENVIADA SE PROCEDE A BUSCAR LA INFORMACION DE USUARIO DENTRO DE LA BASE DE DATOS //SE CREA EL OBJETO "persona", Y SE INICIALIZA CON EL METODO DE BUSQUEDA PROPIO DEL OBJETO "Context" //DECRITO AL INICIO DE LA CLASE Personas persona = await this._context.Personas.FindAsync(newinfo.Cedula); //SE EVALUA SI EL OBJETO "persona" NO SE ENCUENTRA NULO if (persona != null) { //EL OBJETO "persona" NO SE ENCUENTRA NULO. //PUESTO QUE SE UTILIZO LA CLASE "Context" PARA REALIZAR LA BUSQUEDA DE INFORMACION DE UN REGISTRO //EN UNA TABLA ESPECIFICA SE DEBE "desechar" EL OBJETO QUE ACABA DE SER BUSCADO. this._context.Entry(persona).State = EntityState.Detached; } //CON LA INFORMACION ENVIADA SE PROCEDE A BUSCAR LA INFORMACION DE USUARIO DENTRO DE LA BASE DE DATOS //SE CREA EL OBJETO "usuario", Y SE INICIALIZA CON EL METODO DE BUSQUEDA PROPIO DEL OBJETO "Context" //DECRITO AL INICIO DE LA CLASE Usuarios usuario = await this._context.Usuarios.FindAsync(newinfo.Cedula); if (usuario != null) { //EL OBJETO "persona" NO SE ENCUENTRA NULO. //PUESTO QUE SE UTILIZO LA CLASE "Context" PARA REALIZAR LA BUSQUEDA DE INFORMACION DE UN REGISTRO //EN UNA TABLA ESPECIFICA SE DEBE "desechar" EL OBJETO QUE ACABA DE SER BUSCADO. this._context.Entry(usuario).State = EntityState.Detached; } //SE VERIFICA SI LOS OBJETOS "personas" Y "usuarios" CREADOS E INICIALIZADOS PREVIAMENTE //SE ENCUENTRAN NULOS (SE EVALUA LA "NULIDAD" DE AMBOS) if (persona == null && usuario == null) { //SI LOS OBJETOS (AMBOS O SOLO UNO) SE ENCUENTRAN NULOS ESTO IMPLICA QUE LA CLASE "Context" NO //ENCONTRO NINGUN REGISTRO QUE RESPONDIERA AL NUMERO DE CEDULA ENVIADO COMO PARAMETRO. //SE RETORNA LA RESPUESTA "NotFound" JUNTO CON UN MENSAJE INFORMANDO AL USUARIO. return(NotFound("Numero de cedula no registrado: " + cedula)); } //-------------------------------------------------------------------------------------------------------- //SE CREA E INICIALIZA UN OBJETO DEL TIPO "ModificacionesUsuario" QUE SERVIRA PARA CONTENER //LA INFORMACION DEL NUEVO REGISTRO DENTRO DE LA TABLA "Modificacionesusuario" Modificacionesusuario newmodificacionesiusuario = Modificacionesusuario.NewModificacionesUsuarios(persona, Personas.NewPersonaInfo(persona, newinfo), usuario, Usuarios.NewUsuarioInfo(usuario, newinfo), DateTime.Now, newinfo.Cedula); //-------------------------------------------------------------------------------------------------------- //SE ACTUALIZA LA INFORMACION DENTRO DE LOS OBJETOS "persona" Y "usuario" persona = Personas.NewPersonaInfo(persona, newinfo); usuario = Usuarios.NewUsuarioInfo(usuario, newinfo); //-------------------------------------------------------------------------------------------------------- //SE ACTUALIZA LA INFORMACION DE LAS RESPECTIVAS TABLAS DENTRO DE LA BASE DE DATOS this._context.Personas.Update(persona); //=> SE ACTUALIZA LA INFORMACION EN LA TABLA PERSONA this._context.Entry(persona).State = EntityState.Modified; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //_____________________________________________________________________________________________________________ //NOTA: CAMBIAR EL ESTADO DE LOS OBJETOS CREADO COMO REFERENCIA PERMITE A LA CLASE CONTEXTO SEPARAR OBJETOS //MODIFICADOS, AÑADIDOS, DESECHADOS. DE ESTA MANERA CADA QUE SE EJECUTE UN CAMBIO EN LA BASE DE DATOS CON ALGUN //OBJETO DE REFERENCIA LUEGO DE SU USO SE DEBE REFERENCIAR QUE SE HIZO CON DICHO OBJETO. //_____________________________________________________________________________________________________________ this._context.Usuarios.Update(usuario); //=> SE ACTUALIZA LA INFORMACION EN LA TABLA USUARIO this._context.Entry(usuario).State = EntityState.Modified; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA this._context.Modificacionesusuario.Add(newmodificacionesiusuario); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA MODIFICACIONESUSUARIOS this._context.Entry(newmodificacionesiusuario).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //-------------------------------------------------------------------------------------------------------- //SE CREA E INICIALIZA UN OBJETO DEL TIPO "HistorialSolicitudesWeb" CON LA INFORMACION DEL NUEVO REGISTRO //DE LA TABLA "HistorialSolicitudesWeb". Historialsolicitudesweb solicitudesweb = Historialsolicitudesweb.NewHistorialSolocitudesWeb(cedula, 12); //SE ALMACENA EL REGISTRO DENTRO DE LA BASE DE DATOS this._context.Historialsolicitudesweb.Add(solicitudesweb); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA HistorialSolicitudesWeb this._context.Entry(solicitudesweb).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //------------------------------------------------------------------------------------------------------- //SE GUARDAN LOS CAMBIOS await this._context.SaveChangesAsync(); //SE TERMINA LA TRANSACCION await transaction.CommitAsync(); } //SI OCURRE ALGUNA EXCEPCION EN EL PROCESO DE LECTURA Y ESCRITURA DE LA BASE DE DATOS EL CODIGO //SE REDIRIGE A LA SECCION CATCH DEL CICLO TRY...CATCH catch (Exception ex) when(ex is DbUpdateException || ex is DbUpdateConcurrencyException) { Console.WriteLine("\n================================================="); Console.WriteLine("================================================="); Console.WriteLine("\nHa ocurrico un error:\n" + ex.Message.ToString()); Console.WriteLine("================================================="); Console.WriteLine("=================================================\n"); //SE RETONA LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO SOBRE EL ERROR return(BadRequest("\nHa ocurrico un error, intentelo nuevamente")); } } //SI NO EXISTIERON ERRORES O EXCEPCIONES EN EL PROCESO DE LECTURA Y ESCRITURA, Y LA INFORMACION //FUE ACTUALIZADA SATISFACTORIAMENTE SE RETORNA LA RESPUESTA "Ok" JUNTO CON UN MENSAJE INFORMANDO //SOBRE LA ACTUALIZACION EXITOSA. return(Ok("Datos actualizados")); }
//-------------------------------------------------------------------------------------------------- //FUNCION QUE ACTUALIZARA LA INFORMACION DE UN USUARIO CUANDO SE REALICE EL LLAMADO DESDE //LA PAGINA "PaginaConfiguracionAdmin" DE LA APLICACION "Mtto App". EN ESTA FUNCION SE RECIBEN //LOS PARAMETROS: // -cedula => DATO DEFINIDO EN EL URL DE LA SOLICITUD (POR ESTA RAZON EL ROUTING "Route" //CONTIENE LA PALABRA "{cedula}") // -newinfo => OBJETO ENVIADO EN EL BODY DE LA SOLICITUD HTTP EL CUAL CONTIENE TODA LA //INFORMACION (VIEJA Y ACTUALIZADA) DEL USUARIO A ACTUALIZAR/CONFIGURAR //-------------------------------------------------------------------------------------------------- public async Task <IActionResult> ActualizarUsuarioAdm(double cedula, [FromBody] ConfiguracionA newinfo) { //SE EVALUA SI PARAMETRO "cedula" Y LA PROPIEDAD "cedula" DEL OBJETO "newinfo" SON DIFERENTES if (cedula != newinfo.Cedula) { //SE DA RETORNO A LA SOLICITUD CON LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO AL USUARIO return(BadRequest("La cedula no coincide con la información del objeto enviado")); } //SI EL PARAMETRO "cedula" Y LA PROPIEDAD "cedula" DEL OBJETO "newinfo" SON SIMILARES //SE INICIA LA TRASACCION using (var transaction = this._context.Database.BeginTransaction()) { //SE INICIA EL CICLO TRY... CATCH try { //SE RECIBE INFORMACION QUE SE TIENE ACTUALMENTE EN LA BASE DE DATOS Personas persona = await this._context.Personas.FindAsync(newinfo.Cedula); if (persona != null) { this._context.Entry(persona).State = EntityState.Detached; } Usuarios usuario = await this._context.Usuarios.FindAsync(newinfo.Cedula); if (usuario != null) { this._context.Entry(usuario).State = EntityState.Detached; } //SE VERIFICA QUE LOS OBJETOS ENVIADOS NO SEAN NULOS if (persona == null && usuario == null) { return(NotFound("Número de cedula no registrado: " + cedula)); } //SE CREA E INICIALIZA UN OBJETO DEL TIPO "ModificacionesUsuario" QUE SERVIRA PARA CONTENER //LA INFORMACION DEL NUEVO REGISTRO DENTRO DE LA TABLA "Modificacionesusuario" //---------------------------------------------------------------------------------------------- //NOTA: SE ENVIA EL NUMERO CERO (0) COMO ULTIMO PARAMETRO EN EL METODO NewModificacionesUsuarios //DEBIDO A QUE EL USUARIO ADMINISTRATOR ES EL UNICO CON ACCESO A DICHO METODO //---------------------------------------------------------------------------------------------- Modificacionesusuario newmodificacionesiusuario = Modificacionesusuario.NewModificacionesUsuarios(persona, Personas.NewPersonaInfo(persona, newinfo), usuario, Usuarios.NewUsuarioInfo(usuario, newinfo), DateTime.Now, 0); //-------------------------------------------------------------------------------------------------------- //SE ACTUALIZA LA INFORMACION DENTRO DE LOS OBJETOS PERSONAS persona = Personas.NewPersonaInfo(persona, newinfo); usuario = Usuarios.NewUsuarioInfo(usuario, newinfo); //-------------------------------------------------------------------------------------------------------- //SE ACTUALIZA LA INFORMACION DENTRO DE LA BASE DE DATOS //SE ACTUALIZA LA INFORMACION DE LAS RESPECTIVAS TABLAS DENTRO DE LA BASE DE DATOS this._context.Personas.Update(persona); //=> SE ACTUALIZA LA INFORMACION EN LA TABLA PERSONA this._context.Entry(persona).State = EntityState.Modified; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA this._context.Usuarios.Update(usuario); //=> SE ACTUALIZA LA INFORMACION EN LA TABLA USUARIO this._context.Entry(usuario).State = EntityState.Modified; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //SE AÑADE A LA TABLA "ModificacionesUsuarios" UN NUEVO REGISTRO this._context.Modificacionesusuario.Add(newmodificacionesiusuario); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA MODIFICACIONESUSUARIOS this._context.Entry(newmodificacionesiusuario).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //-------------------------------------------------------------------------------------------------------- //SE CREA E INICIALIZA UN OBJETO DEL TIPO "HistorialSolicitudesWeb" CON LA INFORMACION DEL NUEVO REGISTRO //DE LA TABLA "HistorialSolicitudesWeb". Historialsolicitudesweb solicitudesweb = Historialsolicitudesweb.NewHistorialSolocitudesWeb(0, 13); //SE ALMACENA EL REGISTRO DENTRO DE LA BASE DE DATOS this._context.Historialsolicitudesweb.Add(solicitudesweb); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA HistorialSolicitudesWeb this._context.Entry(solicitudesweb).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA //------------------------------------------------------------------------------------------------------- //SE GUARDAN LOS CAMBIOS await this._context.SaveChangesAsync(); //SE TERMINA LA TRANSACCION await transaction.CommitAsync(); } //SI OCURRE ALGUNA EXCEPCION EN EL PROCESO DE LECTURA Y ESCRITURA DE LA BASE DE DATOS EL CODIGO //SE REDIRIGE A LA SECCION CATCH DEL CICLO TRY...CATCH catch (Exception ex) when(ex is DbUpdateException || ex is DbUpdateConcurrencyException) { Console.WriteLine("\n================================================="); Console.WriteLine("================================================="); Console.WriteLine("\nHa ocurrico un error:\n" + ex.Message.ToString()); Console.WriteLine("================================================="); Console.WriteLine("=================================================\n"); //SE RETONA LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO SOBRE EL ERROR return(BadRequest("\nHa ocurrico un error, intentelo nuevamente")); } } //SI NO EXISTIERON ERRORES O EXCEPCIONES EN EL PROCESO DE LECTURA Y ESCRITURA, Y LA INFORMACION //FUE ACTUALIZADA SATISFACTORIAMENTE SE RETORNA LA RESPUESTA "Ok" JUNTO CON UN MENSAJE INFORMANDO //SOBRE LA ACTUALIZACION EXITOSA. return(Ok("Datos Actualizados")); }