Ejemplo n.º 1
0
        //--------------------------------------------------------------------------------------------------
        //FUNCION QUE REGISTRA LA INFORMACION DE UN NUEVO USUARIO EN LA BASE DE DATOS
        //--------------------------------------------------------------------------------------------------
        public async Task <ActionResult <string> > RegistroUsuario([FromBody] RequestRegistroUsuario newuser)
        {
            //SE EVALUA SI LOS SIGUIENTES CAMPOS YA SE ENCUENTRAN REGISTRADOS DENTRO DE LA TABLA PERSONAS
            if (!MatchCedula(newuser.NewUser.Persona.Cedula) &&             //TRUE: SE ENCONTRO UN REGISTRO CON LA MISMA CEDULA (ID)
                !MatchNumeroFicha(newuser.NewUser.Persona.NumeroFicha) &&   //TRUE: SE ENCONTRO UN REGISTRO CON EL MISMO NUMERO DE FICHA
                !MatchUsername(newuser.NewUser.Usuario.Username))           //TRUE: SE ENCONTRO UN REGISTRO CON EL MISMO NOMBRE DE USUARIO
            {
                //SE INICIA EL CICLO TRY... CATCH
                try
                {
                    using (var transaction = this._context.Database.BeginTransaction())
                    {
                        //--------------------------------------------------------------------------------------------------------
                        //SE CREAN LOS OBJETOS DEL TIPO "Personas" Y "Usuarios" QUE CONTENDRAN LA NUEVA INFORMACION
                        Personas persona = Personas.NewPersonas(newuser.NewUser.Persona);
                        Usuarios usuario = Usuarios.NewUsuarios(newuser.NewUser.Usuario);

                        //--------------------------------------------------------------------------------------------------------
                        //SE REGISTRA LA INFORMACION NUEVA
                        this._context.Add(persona);
                        this._context.Entry(persona).State = EntityState.Added;

                        this._context.Add(usuario);
                        this._context.Entry(usuario).State = EntityState.Added;

                        //--------------------------------------------------------------------------------------------------------
                        //SE CREA E INICIALIZA UN NUEVO OBJETO "HistorialSolicitudesWeb"
                        Historialsolicitudesweb solicitudweb =
                            Historialsolicitudesweb.NewHistorialSolocitudesWeb(newuser.UserId, 5);

                        //--------------------------------------------------------------------------------------------------------
                        //SE AÑADE EL NUEVO REGISTRO A LA BASE DE DATOS
                        this._context.Historialsolicitudesweb.Add(solicitudweb);      //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA HistorialSolicitudesWeb.
                        this._context.Entry(solicitudweb).State = EntityState.Added;  //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA.

                        //--------------------------------------------------------------------------------------------------------
                        //SE COMPRUEBAN QUE LAS TABLAS "Personas" Y "Usuarios" TENGAN LA MISMA CANTIDAD DE REGISTROS
                        //NOTA: ESTO DEBIDO A QUE ESTAS DOS TABLAS LLEVAN REGISTROS PARALELOS QUE SE CORRESPONDEN
                        if (this._context.Personas.Count() != this._context.Usuarios.Count()) //=> true => LAS DOS TABLAS TIENEN CANTIDAD DE REGISTROS DISTINTOS
                        {
                            //SE RETORNA UNA RESPUESTA A LA SOLICITUD Y SE PROCEDE A INFORMAR AL USUARIO
                            return(BadRequest("Error al intentar regitrar datos. Intente nuevente"));
                        }

                        //--------------------------------------------------------------------------------------------------------
                        //SE GUARDAN LOS CAMBIOS
                        await this._context.SaveChangesAsync();

                        //SE CIERRA 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"));
                }
            }
            //NO SE CUMPLIO ALGUNA DE LAS TRES CONDICIONES, SE RETORNA UN MENSAJE INFORMANDO CUAL CONDICION FALLO.
            else
            {
                //===============================================================================================
                //SI ALGUNA DE LOS CONDICIONALES EN LA EVALUACION ANTERIOR ES FALSA SE PROCEDE A INFORMAR CUAL
                //DE LOS CAMPOS EVALUADOS YA SE ENCUENTRA REGISTRADO

                //SE EVALUA SI EXISTE ALGUN REGISTRO DE USUARIO CON EL MISMO ID (CEDULA) DEL USUARIO QUE DESEA REGISTRAR
                if (MatchCedula(newuser.NewUser.Persona.Cedula))
                {
                    return(BadRequest("Numero de cedula ya registrado: " + newuser.NewUser.Persona.Cedula.ToString()));
                }

                //SE EVALUA SI EXISTE ALGUN REGISTRO DE USUARIO CON EL MISMO NUMERO DE FICHA DEL USUARIO QUE DESEA REGISTRAR
                if (MatchNumeroFicha(newuser.NewUser.Persona.NumeroFicha))
                {
                    return(BadRequest("Numero de ficha ya registrado: " + newuser.NewUser.Persona.NumeroFicha.ToString()));
                }

                //SE EVALUA SI EXISTE ALGUN REGISTRO DE USUARIO CON EL NOMBRE DE USUARIO DEL USUARIO QUE DESEA REGISTRAR
                if (MatchUsername(newuser.NewUser.Usuario.Username))
                {
                    return(BadRequest("Nombre de usuario" + newuser.NewUser.Usuario.Username + "ya se encuentra registrado"));
                }
            }

            //SI TODAS LAS CONDICIONES SE CUMPLEN SE REGISTRA EL USUARIO, SE RETORNA EL CODIGO DE ESTATUS 200
            //OK Y SE INFORMA MEDIANTE UN MENSAJE QUE SE REGISTRO CON EXITO EL TABLERO.
            return(Ok("Registro Exitoso"));
        }