Plataforma de anuncios inmobiliarios que tiene como propósito facilitar la compra, venta y consulta de bienes inmuebles. La aplicación no cuenta con pagos virtuales, la venta se hace entre ambas partes facilitando el contacto del vendedor; en donde se publica una propiedad y una vez autenticado el cliente este deberá contactar directamente al vendedor.
Esta aplicación es compatible con devcontainers
Para esta apliación se esta utilizando el siguiente stack de tecnologías: NodeJs, Express, Pug, Tailwind y MySql.
Actualmente el proyecto se encuentra en progreso, ya se realizaron varios despliegues en producción con normalidad, pero aún no se han hecho pruebas, hacen falta varias funcionalidades como el acceso a usuarios autenticados a contenido público de otros usuarios, la pagina de inicio y la personalización del usuario.
- Se crearon distintos Pipelines o validaciones con vista para poder enfrentar los errores de digitación de los usuarios además las consultas en los forms se validan con
Sequelize
. - La validación y seguridad de formularios se utilizó
Csurf
,ExpressValidator
ySequelize
. Con complementos comoCookieParser
. - La para seguridad de contraseñas se utilizó
Bcrypt
ySequelize
, utilizando Hooks como beforeCreate para hashear las contraseñas atraves deBcrypt
y hooks como Scoop para cortar la lectura por consola al intentar acceder a los datos de algún usuario. - El acceso es a través de cookies y se añade un prototype al Modelo Usuario para validar las contraseñas.
- Existen diferentes middlewares para poder acceder al contenido privado de cada usuario y es necesario que estos esten validados a través de los tokens de
JWT
.
- Registro de Usuarios
- Con creación de llaves en las cookies usando
JWT
yCookieParser
envío de emails para confirmación conNodeMailer
. - Edición
- Usuando
NodeMailer
para la validación del usuario y generando un nuevo token. - Autenticación
- Usando
JWT
para la autenticación y los hooks deSequelize
.
Se esta utilizando el siguiente schema para los usuarios:
Campo | Tipo | Permite Nulos |
---|---|---|
nombre | STRING | No |
STRING | No | |
password | STRING | No |
token | STRING | Sí |
confirmado | BOOLEAN | Sí |
- Creación de propiedades.
- Las propiedades tendra un UUID para poder acceder a ellas, para ello se utilizará
Sequelize
, tendrán una imagen de referencia para poder conocer la fachada de la propiedad, esto se hará medianteWebpack
,dropzone
ymulter
. Además se mostrará su ubicación en el mapa a través de la API de Leaftlet en su versión 1.8.0. - Vista y lectura de propiedades.
- Al ingresar a la dirección
/propiedades
, el usuario podrá de manera resumida y con un paginador, acceder a las propiedades que son de su autoría - Actualización de propiedades. - Cada propiedad permite que el usuario actualice la información de la propiedad, la imagen y la ubicación en el mapa de la misma. Al mismo tiempo, si el usuario así lo desea, podrá eliminar la propiedad creada.
- Acceso a propiedades externas - El usuario tendrá la capacidad ver las propiedades de otros usuarios. Si este usuario está autenticado en la página tendrá la capacidad de consultar a detalle las propiedades del inmueble y al mismo tiempo comunicarse con el dueño de este si es que presenta interés en realizar algún trato o comunicación en particular.
Important
Aún se encuentra en desarrollo el acceso público a las propiedades de los otros usuarios. Aunque ya se tiene acceso se esta trabajando en la separación con usuarios autenticados y no autenticados en el inicio de la página.
Los usuarios pueden crear una lista de propiedades que deseen vender y actualizar su estado a medida que las propiedades se venden o se retiran de la lista. Al mismo tiempo es posible editar la imagen de la propiedad, la información y la ubicación de la propiedad. El Schema utilizado es el siguiente:
Campo | Tipo | Permite Nulos | Valor Predeterminado | Clave Primaria |
---|---|---|---|---|
id | UUID | No | UUIDV4 | Sí |
titulo | STRING(100) | No | - | No |
descripcion | TEXT | No | - | No |
habitaciones | INTEGER | No | - | No |
estacionamiento | INTEGER | No | - | No |
wc | INTEGER | No | - | No |
calle | STRING | No | - | No |
lat | STRING(60) | No | - | No |
lng | STRING(60) | No | - | No |
imagen | STRING | No | - | No |
publicado | BOOLEAN | No | false | No |
Es necesario que el usuario corra en consola el siguiente comando antes de iniciar cualquier acción de prueba, ya que es necesario instalar las librerías que se encuentran en el package.json
npm i
Se definieron las siguientes variables de entorno (DotEnv
) para la ejecución del proyecto:
Warning
Estas pueden que cambien dependiendo de la versión del proyecto
-
Database:
BD_NOMBRE
BD_USER
BD_PASS
BD_HOST
BD_PORT
-
Nodemailer:
EMAIL_HOST
EMAIL_PORT
EMAIL_USER
EMAIL_PASS
-
JWT:
SECRET_JWT
-
Cloudinary:
- `CLOUD_NAME
CLOUD_KEY
CLOUD_SECRET
-
General:
BACKEND_URL
PORT
Dependencias:
bcrypt
: ^5.1.0cookie-parser
: ^1.4.6dropzone
: ^5.9.3 (Eliminado) -> Cloudinary: ^2.0.1express
: ^4.18.2express-validator
: ^6.14.3jsonwebtoken
: ^9.0.0multer
: ^1.4.5-lts.1mysql2
: ^3.0.1pug
: ^3.0.2sequelize
: ^6.28.0
Dependencias de Desarrollo:
autoprefixer
: ^10.4.13concurrently
: ^8.0.1nodemailer
: ^6.9.1postcss
: ^8.4.21postcss-cli
: ^10.1.0- < 5A4E code>tailwindcss: ^3.4.1
webpack
: ^5.78.0 (Eliminado) -> Esbuild: ^0.19.11webpack-cli
: ^5.0.1 (Eliminado) -> No es necesario en EsBuild