Kununua es una aplicación móvil que permite a los usuarios realizar la compra de productos de supermercado de manera eficiente. Para ello, la aplicación permite a los usuarios crear cestas de la compra con productos de distintos supermercados que, posteriormente pueden ser optimizadas para que el usuario ahorre dinero y tiempo.
Este manual es una guía de desarrollador cuyo objetivo es utilizar el proyecto con fines de experimentación o de manera local para adaptarlo. Su contenido está pensado exclusivamente para usuarios técnicos.
Antes de comenzar a lanzar KUNUNUA en la máquina local, es necesario tener instalado el siguiente software:
-
Flutter:
3.10.3 -
CocoaPods:
1.11.3 -
Dart:
3.0.3 -
Python:
3.8.13
- Clonar el ropositorio
git clone https://github.com/Kununua/kununua-app.git
-
Crear una base de datos en PostgreSQL y un usuario con todos los permisos sobre ella. (De ahora en adelante, nos referiremos a esta BD con el nombre:
kununua_db
):- Accedemos a la consola de PostgreSQL:
psql postgres
- Creamos la base de datos y el usuario (en este caso, con credenciales:
kununua_user
ykununua_password
):
CREATE DATABASE kununua_db; CREATE USER kununua_user WITH PASSWORD 'kununua_password'; GRANT ALL PRIVILEGES ON DATABASE kununua_db TO kununua_user;
- Salimos de la consola de PostgreSQL con:
\q
-
Accedemos a la carpeta
kununua_backend
del proyecto. -
Instalamos todos los requisitos (recomendamos hacerlo dentro de un entorno virtual):
pip install -r requirements.txt
-
Creamos y ejecutamos todas las migraciones de los modelos de django a la base de datos:
python manage.py makemigrations python manage.py migrate
-
Poblamos la base de datos con información sobre las marcas de los productos, países y divisas:
python manage.py populate_countries python manage.py populate_brands
-
Instalamos el solver CPLEX en el módulo de amplpy y activamos nuestra licencia:
python -m amplpy.modules install cplex python -m amplpy.modules activate <uuid-licencia>
-
Colocamos en los ajustes del proyecto de django la ruta de instalación de ampl. En “kununua_backend/kununua_backend/settings/development.py”:
... # The AMPL instalation path that is being used by amplpy AMPL_PATH = r"/path/to/ampl/intstallation/dir" ...
-
Lanzamos el backend de la aplicación en el puerto 8000:
python manage.py runserver
-
Accedemos a la carpeta
kununua_app
del proyecto -
Descargamos todas las dependencias:
flutter pub get
-
Lanzamos el proyecto en modo de desarrollo en el dispositivo que tengamos seleccionado:
flutter run
Debido a la complejidad que posee el backend del proyecto, hemos puesto a disposición de los desarrolladores una serie de comandos que facilitan la ejecución de algunas tareas. A continuación se detalla cada uno de ellos:
-
download_images:
-
Descripción: descarga las imágenes de todos los productos almacenados en la BD que tienen en campo correspondiente un enlace web para almacenarlas en el ordenador (o servidor, depende de dónde instalemos el proyecto).
-
Precondiciones: Tener la base de datos de PostgreSQL con información del los productos tras el postprocesado.
-
-
download_spanish_model:
-
Descripción: descarga en el ordenador del usuario el modelo de español que utiliza stanza, un paquete de python que permite analizar sintácticamente oraciones.
-
Precondiciones: Tener instalado el paquete de Stanza.
-
-
cart_optimization_experiment:
-
Descripción: con este comando se lanza el experimento de optimización de la sección [exp:optimization]. Almacenará en el mismo directorio un archivo
.xlsx
con los resultados. Dentro del archivo que referencia el comando pueden activarse o desactivarse distintas funcionalidades. Por ejemplo: imprimir por consola los resultados o exportarlos a.csv
en lugar de.xlsx
. -
Precondiciones: Tener la base de datos poblada con productos.
-
-
populate_brands:
-
Descripción: puebla la base de datos con los nombres de más de 2500 marcas de productos (Figura [fig:brands]).
-
Precondiciones: Ninguna.
-
-
populate_countries:
-
Descripción: puebla la base de datos configurada con información de los paises del mundo y sus divisas (Figura [fig:countries]).
-
Precondiciones: Ninguna.
-
-
post_process_data:
-
Descripción: ejecuta el proceso de postprocesado de datos extraídos de los supermercados a partir de la base de datos temporal de SQLite.
-
Precondiciones: Tener una base de datos SQLite con la información “cruda” de la extracción de los supermercados. Haber lanzado los comandos
populate_countries
,populate_brands
.
-
-
run_scraper:
-
Descripción: lanza la extracción de datos de las páginas web de los supermercados con los scrapers. Dentro del archivo que referencia el comando puede seleccionarse qué scarpers lanzar.
-
Precondiciones: Ninguna.
-