예제 #1
0
        /// <summary>
        /// Este método es usado para registrar la información básica del usuario, autentificar y redireccionar al home de nuestro aplicativo.
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public ResponseModel RegistroDeLogin(Usuario usuario)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    // Guardamos la clave en formato MD5
                    usuario.Contrasena = HashHelper.MD5(usuario.Contrasena);

                    // Ignoramos la validacion para que la contraseña pase
                    context.Configuration.ValidateOnSaveEnabled = false;

                    context.Usuario.Add(usuario);
                    context.SaveChanges();

                    context.Database.ExecuteSqlCommand("UPDATE Usuario SET Url = @url WHERE id = @id",
                                                       new SqlParameter("url", ViewHelper.ConvertNameToUrl(usuario.Nombre, usuario.Apellido, usuario.id.ToString())),
                                                       new SqlParameter("id", usuario.id));

                    // Guardamos en session al usuario actual, solo necesitamos guardar su ID
                    SessionHelper.AddUserToSession(usuario.id.ToString());

                    rm.SetResponse(true);
                    rm.href = "inicio";
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }
예제 #2
0
        public ResponseModel Actualizar(Usuario usuario, HttpPostedFileBase file)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    if (file != null)
                    {
                        // Este es un helper que yo cree para crear copias de imagenes y validar, no existe en el marco de ASP.NET MVC
                        var rpta = ImageHelper.TryParse(file, 500);

                        if (rpta != "")
                        {
                            rm.SetResponse(false, rpta);

                            // Lanzamos una exception en caso que la imagen no sea válida
                            throw new Exception(rpta);
                        }

                        /* Ahora debemos guardar la foto, agregando el ID del usuario al campo Relacion de la tabla Foto
                         * Lo que hice fue crear un Modelo que implemente la logica de guardar una foto en la base de datos
                         * y crear copia usando el Helper que yo creo para Imagenes */

                        FotoModel.Registrar(context, file, new int[] { 500, 300, 100 }, FotoRelacion + usuario.id);
                    }

                    // Quitamos la validacion
                    context.Configuration.ValidateOnSaveEnabled = false;

                    // Registramos la entidad
                    var ctxUsuario = context.Entry(usuario);

                    // Le indicamos que es del tipo Update
                    ctxUsuario.State = EntityState.Modified;

                    // Seteamos la fecha al formato YYYY/MM/DD
                    usuario.FechaNacimiento = ViewHelper.ConvertToDate(usuario.FechaNacimiento);

                    // Url del Usuario
                    usuario.Url = ViewHelper.ConvertNameToUrl(usuario.Nombre, usuario.Apellido, usuario.id.ToString());

                    // Campos que no queremos que toque
                    ctxUsuario.Property(x => x.Admin).IsModified = false;

                    if (usuario.Contrasena == null)
                    {
                        ctxUsuario.Property(x => x.Contrasena).IsModified = false;                             // Retiramos contrasena de la actualizacion
                    }
                    else
                    {
                        usuario.Contrasena = HashHelper.MD5(usuario.Contrasena);  // Si la contraseña ha sido cambiada la actualizamos a MD5
                    }

                    /* Antes de agregar los conocimientos debemos borrar los conocimientos que ya tenga este usuario
                     * para evitar registros duplicados. Si seguimos el esquema de entity framework, primero tendriamos
                     * que traer todo los conocimientos que tiene este usuario e indificarle que los elimine. Pero
                     * esto no me parece muy optimo, ya que si tuviera 1000 conocimientos, hariamos demasiados querys */

                    // Asi que la solucion es hacer un query manual
                    context.Database.ExecuteSqlCommand("DELETE FROM UsuarioConocimiento WHERE usuario_id = @usuario_id",
                                                       new SqlParameter("usuario_id", usuario.id));

                    // Agregamos los conocimientos
                    if (usuario.UsuarioConocimientos != null)
                    {
                        // Indicamos que el estado es del tipo insert
                        foreach (var c in usuario.UsuarioConocimientos)
                        {
                            context.Entry(c).State = EntityState.Added;
                        }
                    }

                    // Grabamos
                    context.SaveChanges();

                    rm.SetResponse(true);
                    if (file != null)
                    {
                        rm.href = "self";
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }