Git Product home page Git Product logo

codingflashor / api-inmobiliaria Goto Github PK

View Code? Open in Web Editor NEW
2.0 0.0 1.0 305 KB

Este repositorio contiene el código fuente de la API para un sistema de gestión inmobiliario, diseñado para facilitar la administración y seguimiento de propiedades, clientes y transacciones inmobiliarias.

Home Page: https://carlosandresaguirreariza.pythonanywhere.com/

License: Apache License 2.0

Python 100.00%
black django-rest-framework drf-spectacular jwt-authentication postgresql pytest docker commitizen

api-inmobiliaria's Introduction

API inmobiliaria Bonpland

Note

Este proyecto aun está en desarrollo.

Este proyecto hace parte de una iniciativa personal, esto implica que dicha inmobiliaria es una institución ficticia. El motivo que impulsa el desarrollo de este proyecto es el de mejorar mis habilidades técnicas en el desarrollo backend con Python, partiendo de lo más básico hasta temas avanzados como implementar un sistema de tareas en segundo plano o la implementación de patrones de arquitectura y de diseño.

De esta manera se está simulando que la inmobiliaria es un cliente con una necesidad o problemática que desea solucionar a través de una aplicación web. Así comienza la iniciativa de este proyecto que parte del proceso de licitación de requerimientos, documentación, planificación, desarrollo y despliegue.

En este repositorio encontrarás el código fuente de la API para la plataforma de gestión de inmobiliaria Bonpland. Para desarrollar este API nos hemos apoyado de un marco de trabajo muy potente conocido como Django Rest Framework.

1. Descripción del proyecto

La inmobiliaria opera principalmente a través de sus oficinas físicas y busca aprovechar la tecnología para ampliar su presencia en el mercado digital. La creación de una plataforma en línea no solo mejorará su visibilidad sino también la eficiencia de sus servicios.

1.1. Características de los usuarios

El sistema de gestión de inmuebles contendrá dos tipos de usuarios:

  • Buscadores de Propiedad: Estos son los usuarios que están buscando comprar, alquilar o arrendar un inmueble. Son los clientes potenciales para las propiedades listadas en la inmobiliaria.
  • Propietarios de Propiedad: Estos son los propietarios de inmuebles que buscan vender, alquilar o arrendar sus propiedades a través de la inmobiliaria. Son los clientes que proporcionan el inventario de propiedades para la inmobiliaria.
  • Administradores: Son los individuos que manejan la plataforma online de la inmobiliaria, pueden ser empleados de la misma que se encargan de administrar la plataforma web y las necesidades de los clientes (buscadores de propiedad o propietarios de propiedad).

1.2. Requerimientos funcionales

  • Registro parcial de un usuario.
  • Autenticación para usuarios.
  • Activar una cuenta de usuario.
  • Actualizar la información de un usuario.
  • Eliminar un usuario.
  • Restablecer contraseña.
  • Confirmar número telefónico.
  • Filtrado para la búsqueda de inmuebles.
  • Guardado de inmuebles para usuarios.

1.3. Estructura

La estructura del proyecto es la siguiente:

└── 📁src
    └── 📁apps
    └── 📁settings
        └── 📁environments
            └── base.py
            └── local.py
            └── production.py
            └── test.py
        └── asgi.py
        └── constans.py
        └── urls.py
        └── wsgi.py
    └── 📁test
    └── manage.py
    └── pytest.ini
    └── requirements.txt
  • src: este es el directorio raíz del poryecto. Contiene todos los modulos, configuraciones globales y pruebas del código.

  • apps: este directorio contiene las aplicaciones Dajngo. Está dividido en varios subdirectorios, cada uno de los cuales representa un servicio o aplicación. Tambien podras encontras algunos ficheros auxiliares en donde cada servicio podra hacer uso de ellos respectivamente.

  • settings: Contiene archivos de configuración para la API. Incluye configuraciones para los diferentes entornos de desarrollo, producción y pruebas, configuraciones de los punto finales de la API, configuraciones ASGI y WSGI, etc.

  • test: Contiene pruebas unitarias y de implementación del código de cada aplicación.

  • manage.py: esta es una utilidad de línea de comandos que te permite interactuar con tu proyecto Django de varias maneras.

  • requirements.txt: este archivo se utiliza para administrar dependencias para un proyecto de Python. Enumera todos los paquetes de Python de los que depende el proyecto.

  • pytest.ini: Este archivo contiene la configuración para pytest, un marco de prueba para Python.

2. Instalación en local

Primero debes clonar este repositorio utilizando el siguiente comando en tu consola.

  git clone https://github.com/CodingFlashOR/api-inmobiliaria.git

Note

Asegúrese que Python esté instalado en su sistema operativo.

  • Paso 1 (instalar dependencias): Para instalar las teconologias y paquetes que usa el proyecto usa el siguiente comando. Asegurate estar en el directotio raíz.

    pip install -r "requirements.txt"
  • Paso 2 (Instalar configuración pre-commit): Este repositorio contiene unas reglas necesarias para mantener la calidad del código, antes de realizar un commitse validara que los archivos estan correctamente formateados segun el estandar PEP8, también se validará que los commits sigan el estándar Conventional commits. Para iniciar estas reglas debes ejecutar el siguiente comando,

    pre-commit install
    pre-commit install --hook-type commit-msg
  • Paso 3 (configurar variables de entorno): Crea un archivo con el nombre .env dentro del directorio raíz. Dentro de este archivo se definiran todas las variables de entorno de este proyecto.

    ENVIRONMENT_STATUS='development'
    KEY_DJANGO='value'

    El valor de la variable KEY_DJANGO lo puedes obtener ejecutando los siguientes comandos. El ultimo comando retorna el valor de la variable que deberas copiar en el archivo .env.

    python3
    from django.core.management.utils import get_random_secret_key; print(get_random_secret_key()); exit()
  • Paso 4 (realizar migraciones): Migramos los modelos del proyecto necesarios para el funcionamiento del servidor con el siguiente comando.

    python3 manage.py migrate
  • Paso 5 (Iniciar el servidor): Para iniciar el servidor de manera local ejecuta el siguiente comando.

    python3 manage.py runserver

De esta manera podrás usar todas las funcionalidades que este proyecto tiene para ofrecer. Es importante que hayas seguido todos los pasos explicados en el orden establecido.

3. Tests

Para correr las pruebas unitarias del código ejecuta el siguiente comando.

pytest

4. Documentación

Título Descripción
Especifcación de requerimientos Este documento detalla los requerimientos funcionales, no funcionales y el comportamiento de las diferentes interfaces del sistema.
Base de datos Este documento proporciona una visión detallada de la estructura de la base de datos utilizada en el proyecto.
Documentación de la API Esta es la documentación para la API del proyecto, que incluye detalles sobre los endpoints disponibles y los datos que se pueden enviar y recibir.

6. Colaboradores

Nombre Rol
Carlos Andres Aguirre Ariza Backend

api-inmobiliaria's People

Contributors

the-asintota avatar

Stargazers

 avatar  avatar

Forkers

the-asintota

api-inmobiliaria's Issues

B003: Actualización de JWT para un usuario

Descripción

La librería rest_framework_simplejwt proporciona un punto final para actualizar los JWT de un usuario cuando el token de acceso ha caducado. Se requiere la modificación de ese punto final, los tokens generados desde esa interfaz también deben ser tratados como se hace en el resto de la aplicación.

Tareas a realizar

  1. Implementar un nuevo punto final para la actualización de los JWT de un usuario (POST /api/v1/jwt/refresh/) que acepte los siguientes datos: token de acceso y de actualización.

Criterios de aceptación

  1. El token de acceso debe estar caducado, pero seguir válido.
  2. El token de actualización debe estar vigente y ser válido.
  3. Si los tokens son válidos se deben generar nuevos tokens para el usuario y lo antiguos deben ser agregados a la lista negra (modelo BlacklistedToken).
  4. Los nuevos tokens del usuario deben ser agregados a la lista de tokens pendientes por caducar (modelo OutstandingToken).
  5. Manejar adecuadamente cualquier error que pueda ocurrir durante el proceso de actualización de los tokens, base de datos fuera de servicio, etc.
  6. Documentar el nuevo punto final.

Notas adicionales

  • Asegurarse de seguir las mejores prácticas de seguridad al manejar la información del usuario.
  • Considere implementar pruebas unitarias y de integración para garantizar la robustez del nuevo punto final.

B005: Envió de correo de activación de cuenta de un usuario

Descripción

Se debe implementar una nueva funcionalidad en nuestra API que habilite el envío de correos electrónicos con contenido personalizado, y para esta ocasión el envió de un correo al usuario con instrucciones para activar su cuenta. Dicho mensaje debe contener un botón con un enlace de activación que tendrá como parámetro el id del usuario en base64 (para garantizar la compatibilidad con los servicios de mensajería como Gmail, Outlook, etc) y un token de un solo uso.

Para esto, se requiere el desarrollo de una nueva aplicación Django o servicio dedicado que maneje todas las operaciones relacionadas con el envío de correos electrónicos.

Note

Se requiere que la tarea #1 este completada.

Tareas a realizar

  1. Implementar un nuevo punto final para el envió del mensaje (POST /api/v1/mail/) que acepte los siguientes datos: correo electrónico del usuario.
  2. Integrar este caso de uso para que se ejecute automáticamente después de que un usuario se haya registrado en la base de datos. Esto implica establecer una comunicación entre la nueva aplicación y la aplicación users mediante el uso de signals.
  3. Implementar una vista Django que recibira como parametros de la URL el id del usuario en base64 y el token, esta vista debe encargarse de validar el token.

Criterios de aceptación

  1. El mensaje debe contener instrucciones claras sobre como activar la cuenta del usuario.
  2. El enlace debe apuntar a una vista que se encargara de validar el id del usuario y el token que serán enviados en la URL como parámetros. Si el token es válido se activara la cuenta del usuario cambiando su estado is_active=true en la base de datos.
  3. Manejar adecuadamente cualquier error que pueda ocurrir durante el proceso del envió del mensaje y la validación del token, base de datos fuera de servicio, etc.
  4. Documentar el nuevo punto final.

Notas adicionales

  • Asegurarse de seguir las mejores prácticas de seguridad al manejar la información del usuario.
  • Considere implementar pruebas unitarias y de integración para garantizar la robustez del nuevo punto final.

B002: Autenticación de usuario

Descripción

Como un usuario que busca un inmueble, quiero autenticarme en la plataforma utilizando mi correo electrónico y contraseña para acceder a las funcionalidades destinadas a mi rol.

Para lograr esto, se implementará un nuevo punto final. Este punto final utilizará la librería rest_framework_simplejwt para autenticar a los usuarios y generar tokens JWT, permitiéndoles acceder a las funciones de la plataforma.

Tareas a realizar

  1. Implementar un nuevo punto final para la autenticación de un usuario (POST /api/v1/login/) que acepte los siguientes datos: correo electrónico, contraseña.

Criterios de aceptación

  1. Aplicar las siguientes validaciones a los datos de la petición:
    • Correo electrónico:
      • Debe ser un campo requerido.
      • Debe cumplir con la estructura de un correo electrónico válido.
      • La longitud máxima del correo electrónico debe ser de 90 caracteres.
    • Contraseña:
      • Debe ser un campo requerido.
      • La longitud mínima de la contraseña debe ser de 8 caracteres.
      • La longitud máxima de la contraseña debe ser de 20 caracteres.
  2. Si las credenciales son correctas y la cuenta está activada se deben generar los tokens para el usuario.
  3. Los tokens creados deben ser agregados a la lista de tokens vigentes (modelo JWT).
  4. Si las credenciales son incorrectas, responder a la petición con los mensajes de error.
  5. Manejar adecuadamente cualquier error que pueda ocurrir durante el proceso de autenticación, base de datos fuera de servicio, etc.
  6. Documentar el nuevo punto final.

Notas adicionales

  • Asegurarse de seguir las mejores prácticas de seguridad al manejar la información del usuario.
  • Considere implementar pruebas unitarias y de integración para garantizar la robustez del nuevo punto final.

B004: Cierre de sesión para un usuario

Descripción

Como un usuario que busca un inmueble, quiero poder cerrar sesión cuando quiera.

Tareas a realizar

  1. Implementar un nuevo punto final para el cierre de sesión de un usuario (POST /api/v1/logout/) que acepte los siguientes datos: token de acceso y de actualización.

Criterios de aceptación

  1. El punto final debe estar protegido, solo tendrán acceso los usuarios autenticados.
  2. El token de acceso y de actualización deben ser invalidados y añadidos a una lista negra (modelo BlacklistedToken) tras el cierre de sesión.
  3. La fecha y hora de la última sesión del usuario deben actualizarse en la base de datos.
  4. Manejar adecuadamente cualquier error que pueda ocurrir durante el proceso de cierre de sesión, base de datos fuera de servicio, etc.
  5. Documentar el nuevo punto final.

Notas adicionales

  • Asegurarse de seguir las mejores prácticas de seguridad al manejar la información del usuario.
  • Considere implementar pruebas unitarias y de integración para garantizar la robustez del nuevo punto final.

B001: Registro de usuario

Descripción

Como un usuario que busca un inmueble, quiero poder registrarme en la plataforma. El objetivo es agilizar el proceso de registro y permitirme comenzar a buscar propiedades de inmediato. Para lograr esto, se necesita implementar un punto final de registro que cumpla con ciertos criterios.

Tareas a realizar

  1. Implementar un nuevo punto final para el registro de un usuario (POST /api/v1/user/) que acepte los siguientes datos: correo electrónico, contraseña y confirmación de contraseña.

Criterios de aceptación

  1. Aplicar las siguientes validaciones a los datos de la petición:
    • Correo electrónico:
      • Debe ser un campo requerido.
      • Debe cumplir con la estructura de un correo electrónico válido.
      • La longitud máxima del correo electrónico debe ser de 90 caracteres.
    • Contraseña:
      • Debe ser un campo requerido.
      • La longitud mínima de la contraseña debe ser de 8 caracteres.
      • La longitud máxima de la contraseña debe ser de 20 caracteres.
      • No se admiten contraseñas débiles o comunes.
    • Confirmar contraseña:
      • Debe ser un campo requerido.
      • Debe coincidir con el campo de contraseña.
  2. Extender el modelo User del módulo auth de Django para aprovechar sus funciones. Agregar campos adicionales según sea necesario para la aplicación, como nombre, apellido, etc.
  3. Almacenar la contraseña del usuario en la base de datos de forma encriptada utilizando las funciones de hash proporcionadas por Django.
  4. Establecer el estado inicial del usuario en la base de datos como is_active=false.
  5. Manejar adecuadamente cualquier error que pueda ocurrir durante el proceso de registro, como direcciones de correo electrónico duplicadas, contraseñas no coincidentes, base de datos fuera de servicio, etc.
  6. Documentar el nuevo punto final.

Notas adicionales

  • Asegurarse de seguir las mejores prácticas de seguridad al manejar la información del usuario.
  • Considere implementar pruebas unitarias y de integración para garantizar la robustez del nuevo punto final.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.