Diferència entre revisions de la pàgina «Projecte Mensakas»

De Wiket
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «[https://en.goteo.org/project/mensakas--app-de-menjar-a-domicili-responsable Mensakas és una cooperativa] de repartiment a domicili fundada a partir del col·lectiu [...».)
 
 
(Hi ha 34 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
[https://en.goteo.org/project/mensakas--app-de-menjar-a-domicili-responsable Mensakas és una cooperativa] de repartiment a domicili fundada a partir del col·lectiu [https://www.facebook.com/ridersxderechos/ Raiders Por Derechos], extreballadors de corporacions de repartiment com Glovo o Deliveroo que han decidit no deixar-se explotar per aquestes grans corporacions.
+
[https://en.goteo.org/project/mensakas--app-de-menjar-a-domicili-responsable Mensakas és una cooperativa] de repartiment a domicili fundada a partir del col·lectiu [https://www.facebook.com/ridersxderechos/ Raiders Por Derechos] integrat per extreballadors de plataformes de repartiment com Glovo o Deliveroo que han decidit no deixar-se explotar per aquestes grans corporacions. L'objectiu és oferir un sistema de repartiment alternatiu a les grans plataformes que asseguri l'autoocupació i que faciliti que els guanys repercuteixin sobre els treballadors. Es busca afavorir una economia circular i sostenible contra una economia extractiva i explotadora.
  
Ens demanen que els ajudem a millorar una aplicació que estan desenvolupant de repartiment a domicili.
+
El present projecte és una implementació del sistema de comanda online de menjar a domicili per part dels alumnes de programació web. Aquest és un sistema complex en què intervenen els clients, els restaurants, els repartidors i l'administrador de la plataforma, cadascú amb la seva aplicació particular (2 d'elles apps per a dispositius mòbils i 2 d'elles en web).
 +
[https://twitter.com/mensakasapp?lang=es Twitter Mensakasapp]
  
Té 3 rols d'usuari:
+
[[Imatge:Riders.jpg]]  [[Imatge:Mensakas.jpg]]
* Administrador (pot veure tot)
+
 
* Repartidor (el Mensaka)
+
== Elements de la plataforma ==
* Consumer (client final)
+
 
* Empreses emissores (restaurants)
+
{| class="wikitable"
 +
!Rol
 +
!Interfície
 +
!Descripció
 +
|+ Rols d'usuari del sistema
 +
|'''Administrador'''
 +
|webapp
 +
|Pot veure tots els elements del sistema.
 +
|-
 +
|'''Business''' (Empreses, Restaurants)
 +
|webapp
 +
|Visualitza les comandes emeses pels ''Consumers''.
 +
|-
 +
|'''Deliverer''' (Repartidor o Mensaka)
 +
|app mòbil
 +
|Visualitza comandes i les pot acceptar.
 +
|-
 +
|'''Consumer''' (client final)
 +
|app mòbil
 +
|Visualitza Empreses (Restaurants) i menús i pot emetre comandes.
 +
|}
 +
 
 +
La plataforma ha de permetre treballar amb els següents elements:
 +
* '''Menús''' dels restaurants.
 +
*: Tindran Items (productes), Categories (jeràrquiques), Packs i Extres (salses, complements, etc.)
 +
* '''Orders''' (Comandes) emeses pels Consumers.
 +
*: Tenen estat (emesa, acceptada, recollida, entregada), i carret amb els productes
 +
* '''Franquícies''': un mateix Business pot tenir diverses "delegacions". El Consumer emetrà una única Order, però el sistema decidirà quina franquícia d'aquell Business se'n fa càrrec.
 +
 
 +
=== Order lifecycle ===
 +
 
 +
App consumers: L'autenticació es dona només a la capa de transport (TLS).
 +
 
 +
No autentiquem a la capa d'aplicació, i només tenim un ID d'usuari (email) com a identificador. Es podria produir que algú suplanti la identitat d'un altre. Hauria, però, de pagar la comanda (possibilitat poc probable, el pitjor problema és que t'enviïn pizza gratis a casa).
 +
 
 +
# CONSUMER: Tria Business i afegeix productes al carretó.
 +
# CONSUMER: Confirma comanda (guardada a la DB)
 +
# CONSUMER: Paga comanda (Order)
 +
# SISTEMA: Tria Franquícia i notifica comanda.
 +
# BUSINESS: Assignar hora de recollida
 +
# SISTEMA: geoloc (Business, Consumer, Deliverer) -> notificar Deliverers
 +
# DELIVERER: Acceptar comanda
 +
# DELIVERER: Marcar "comanda recollida"
 +
# DELIVERER: Marcar "comanda entregada"
 +
 
 +
==== API ====
 +
 
 +
# CONSUMER: Tria Business i afegeix productes al carretó.
 +
#: /api/business/{postal_code} : llistat restaurants
 +
#: /api/business/{business_id}/products : llistat productes
 +
# CONSUMER: Confirma comanda (guardada a la DB)
 +
#: /api/order/checkout : IN comanda OUT: hash comanda + dades banc pagament (nonce)
 +
# CONSUMER: Paga comanda (Order)
 +
#: ...api Redsys... : url ok/ko
 +
# SISTEMA: Tria Franquícia i notifica comanda.
 +
#: /api
 +
# BUSINESS: Assignar hora de recollida
 +
# SISTEMA: geoloc (Business, Consumer, Deliverer) -> notificar Deliverers
 +
# DELIVERER: Acceptar comanda
 +
# DELIVERER: Marcar "comanda recollida"
 +
# DELIVERER: Marcar "comanda entregada"
 +
 
 +
== Fases del projecte ==
 +
* Fase 1: Desenvolupament de les webapps ''core'' de l'Administrador i dels Restaurants (monolit).
 +
* Fase 2: Desacoblament per components comunicats per APIs per compatibilitzar i unificar el funcionament de les webapps (Admin, Restaurant) i de les apps mòbils (Consumers, Deliverers).
 +
 
 +
== Especificacions no funcionals ==
 +
* Desenvoluparem en PHP i el ''framework'' Laravel.
 +
* L'arquitectura ha de permetre escalabilitat dels servidors per poder augmentar el nombre de peticions per unitat de temps quan sigui necessari.
 +
* La BD serà en MySQL/MariaDB i es desplegarà mitjançant el servei RDS (Relational Database Service) de AWS ja que facilita l'escalabilitat.
 +
 
 +
 
 +
== Fase 1: Webapps ''core'' Administrador i Restaurants ==
 +
 
 +
=== Backlog ===
 +
# Iniciar projecte en Laravel en un repositori públic a Github.
 +
# Dissenyar models de dades i implementar-los amb la migració inicial.
 +
# Construir ''seeder'' amb dades de prova amb tots els rols i
 +
# Implementar autenticació nadiua de Laravel.
 +
# Modificar el model d'usuari per contemplar els diversos rols considerats.
 +
# Construir interfície de l'Administrador:
 +
## Gestió de Comandes (Consumer): visualització, estat (emesa, recollida, repartida), afegir comentaris.
 +
## Gestió de Business (Restaurants): alta, baixa, modificació, franquícies.
 +
## Gestió de Menus (dels Restaurants): alta, baixa, categories, packs, extras
 +
## Gestió de Deliverers: geolocalització, assignació de comandes automàtica.
 +
# Construir interfície per al Business (Restaurant):
 +
## Visualització de comandes entrants.
 +
## Acceptació de comanda.
 +
## Afegir comentaris.
 +
## Assignació hora de recollida.
 +
 
 +
 
 +
== Fase 2: refactoring i ampliació ==
 +
 
 +
En la 1a fase hem realitzat el monolit (aplicació en una sola instància no modularitzada). Ara ens interessarà separar tot el sistema en diversos mòduls que es puguin escalar independentment, i a més, que siguin accessibles com a serveis, és a dir, en forma de API:
 +
 
 +
* '''Mòdul d'usuaris''' : permet accedir i modificar les dades dels usuaris, altes i baixes (admin) i rols/taules (mensakas, admins, business, customers)
 +
* '''Mòdul de business''' : permet accedir i editar els menús, restaurants i metadades associades (horaris, etc.).
 +
* '''Mòdul de orders/deliver''' : permet registrar una comanda i fer el seguiment, permet notificar els repartidors, assignar la tasca i afegir missatges.
 +
* '''Tarifes i facturació''' : gestió comptable B2B (business-to-business): costos d'enviament per cada business, percentatge que cobra Mensakas, generar factures en PDF, etc.
 +
* '''API Gateway i escalabilitat''' : ens permet accedir als serveis a través d'un punt d'entrada únic (frontend), i aquest desvia la crida a la instància adequada, tenint en compte si hi ha diverses. Proves de escalabilitat amb càrrega.
 +
 
 +
Les diferents funcionalitats a implementar:
 +
 
 +
* API Tarifes i facturació :  interfície de gestió comptable B2B; costos d'enviament per cada business, percentatge que cobra Mensakas, generar factures en PDF, etc.
 +
* API Users Management : ampliarem la funcionalitat del Simulador de compra per disposar d'un frontend web per poder fer comandes.
 +
* App web Admin Mensaka : dashboard administració, estat de comandes, usuaris, live operator (tracking posició Mensakas, reassignar comandes, missatges)
 +
* App web Business : gestió menú + rebuda i acceptació comandes (+ temps recollida)
 +
 
 +
=== Grups ===
 +
Els grups, finalment, queden:
 +
* Paco, Marc, Adrián, Almu : Business (gestió menus + rebuda i acceptació comanda)
 +
* Oscar, Ruben, Mateo : facturació
 +
* Adrià, Kevin, David : users (gestió)
 +
* Joel, Rafa, Dídac, Ferran: orders + deliver + app mensaka web
 +
 
 +
== Documentació addicional ==
 +
Tenim informació d'un projecte previ que va implementar aquest sistema. Aquesta documentació pot aclarir una mica les necessitats, tot i que podem simplificar moltes funcions que per aquest projecte no necessitem inicialment.
 +
 
 +
El projecte estava distribuit en 3 bases de dades diferents:
 +
 
 +
=== BD Menus ===
 +
[[Imatge:Mensakas_menus.png]]
 +
 
 +
 
 +
=== BD Orders ===
 +
[[Imatge:Mensakas_orders.png]]
 +
 
 +
 
 +
=== BD Web ===
 +
[[Imatge:Mensakas_web.png]]

Revisió de 08:57, 27 abr 2020

Mensakas és una cooperativa de repartiment a domicili fundada a partir del col·lectiu Raiders Por Derechos integrat per extreballadors de plataformes de repartiment com Glovo o Deliveroo que han decidit no deixar-se explotar per aquestes grans corporacions. L'objectiu és oferir un sistema de repartiment alternatiu a les grans plataformes que asseguri l'autoocupació i que faciliti que els guanys repercuteixin sobre els treballadors. Es busca afavorir una economia circular i sostenible contra una economia extractiva i explotadora.

El present projecte és una implementació del sistema de comanda online de menjar a domicili per part dels alumnes de programació web. Aquest és un sistema complex en què intervenen els clients, els restaurants, els repartidors i l'administrador de la plataforma, cadascú amb la seva aplicació particular (2 d'elles apps per a dispositius mòbils i 2 d'elles en web). Twitter Mensakasapp

Riders.jpg Mensakas.jpg

Elements de la plataforma

Rol Interfície Descripció
Rols d'usuari del sistema
Administrador webapp Pot veure tots els elements del sistema.
Business (Empreses, Restaurants) webapp Visualitza les comandes emeses pels Consumers.
Deliverer (Repartidor o Mensaka) app mòbil Visualitza comandes i les pot acceptar.
Consumer (client final) app mòbil Visualitza Empreses (Restaurants) i menús i pot emetre comandes.

La plataforma ha de permetre treballar amb els següents elements:

  • Menús dels restaurants.
    Tindran Items (productes), Categories (jeràrquiques), Packs i Extres (salses, complements, etc.)
  • Orders (Comandes) emeses pels Consumers.
    Tenen estat (emesa, acceptada, recollida, entregada), i carret amb els productes
  • Franquícies: un mateix Business pot tenir diverses "delegacions". El Consumer emetrà una única Order, però el sistema decidirà quina franquícia d'aquell Business se'n fa càrrec.

Order lifecycle

App consumers: L'autenticació es dona només a la capa de transport (TLS).

No autentiquem a la capa d'aplicació, i només tenim un ID d'usuari (email) com a identificador. Es podria produir que algú suplanti la identitat d'un altre. Hauria, però, de pagar la comanda (possibilitat poc probable, el pitjor problema és que t'enviïn pizza gratis a casa).

  1. CONSUMER: Tria Business i afegeix productes al carretó.
  2. CONSUMER: Confirma comanda (guardada a la DB)
  3. CONSUMER: Paga comanda (Order)
  4. SISTEMA: Tria Franquícia i notifica comanda.
  5. BUSINESS: Assignar hora de recollida
  6. SISTEMA: geoloc (Business, Consumer, Deliverer) -> notificar Deliverers
  7. DELIVERER: Acceptar comanda
  8. DELIVERER: Marcar "comanda recollida"
  9. DELIVERER: Marcar "comanda entregada"

API

  1. CONSUMER: Tria Business i afegeix productes al carretó.
    /api/business/{postal_code} : llistat restaurants
    /api/business/{business_id}/products : llistat productes
  2. CONSUMER: Confirma comanda (guardada a la DB)
    /api/order/checkout : IN comanda OUT: hash comanda + dades banc pagament (nonce)
  3. CONSUMER: Paga comanda (Order)
    ...api Redsys... : url ok/ko
  4. SISTEMA: Tria Franquícia i notifica comanda.
    /api
  5. BUSINESS: Assignar hora de recollida
  6. SISTEMA: geoloc (Business, Consumer, Deliverer) -> notificar Deliverers
  7. DELIVERER: Acceptar comanda
  8. DELIVERER: Marcar "comanda recollida"
  9. DELIVERER: Marcar "comanda entregada"

Fases del projecte

  • Fase 1: Desenvolupament de les webapps core de l'Administrador i dels Restaurants (monolit).
  • Fase 2: Desacoblament per components comunicats per APIs per compatibilitzar i unificar el funcionament de les webapps (Admin, Restaurant) i de les apps mòbils (Consumers, Deliverers).

Especificacions no funcionals

  • Desenvoluparem en PHP i el framework Laravel.
  • L'arquitectura ha de permetre escalabilitat dels servidors per poder augmentar el nombre de peticions per unitat de temps quan sigui necessari.
  • La BD serà en MySQL/MariaDB i es desplegarà mitjançant el servei RDS (Relational Database Service) de AWS ja que facilita l'escalabilitat.


Fase 1: Webapps core Administrador i Restaurants

Backlog

  1. Iniciar projecte en Laravel en un repositori públic a Github.
  2. Dissenyar models de dades i implementar-los amb la migració inicial.
  3. Construir seeder amb dades de prova amb tots els rols i
  4. Implementar autenticació nadiua de Laravel.
  5. Modificar el model d'usuari per contemplar els diversos rols considerats.
  6. Construir interfície de l'Administrador:
    1. Gestió de Comandes (Consumer): visualització, estat (emesa, recollida, repartida), afegir comentaris.
    2. Gestió de Business (Restaurants): alta, baixa, modificació, franquícies.
    3. Gestió de Menus (dels Restaurants): alta, baixa, categories, packs, extras
    4. Gestió de Deliverers: geolocalització, assignació de comandes automàtica.
  7. Construir interfície per al Business (Restaurant):
    1. Visualització de comandes entrants.
    2. Acceptació de comanda.
    3. Afegir comentaris.
    4. Assignació hora de recollida.


Fase 2: refactoring i ampliació

En la 1a fase hem realitzat el monolit (aplicació en una sola instància no modularitzada). Ara ens interessarà separar tot el sistema en diversos mòduls que es puguin escalar independentment, i a més, que siguin accessibles com a serveis, és a dir, en forma de API:

  • Mòdul d'usuaris : permet accedir i modificar les dades dels usuaris, altes i baixes (admin) i rols/taules (mensakas, admins, business, customers)
  • Mòdul de business : permet accedir i editar els menús, restaurants i metadades associades (horaris, etc.).
  • Mòdul de orders/deliver : permet registrar una comanda i fer el seguiment, permet notificar els repartidors, assignar la tasca i afegir missatges.
  • Tarifes i facturació : gestió comptable B2B (business-to-business): costos d'enviament per cada business, percentatge que cobra Mensakas, generar factures en PDF, etc.
  • API Gateway i escalabilitat : ens permet accedir als serveis a través d'un punt d'entrada únic (frontend), i aquest desvia la crida a la instància adequada, tenint en compte si hi ha diverses. Proves de escalabilitat amb càrrega.

Les diferents funcionalitats a implementar:

  • API Tarifes i facturació : interfície de gestió comptable B2B; costos d'enviament per cada business, percentatge que cobra Mensakas, generar factures en PDF, etc.
  • API Users Management : ampliarem la funcionalitat del Simulador de compra per disposar d'un frontend web per poder fer comandes.
  • App web Admin Mensaka : dashboard administració, estat de comandes, usuaris, live operator (tracking posició Mensakas, reassignar comandes, missatges)
  • App web Business : gestió menú + rebuda i acceptació comandes (+ temps recollida)

Grups

Els grups, finalment, queden:

  • Paco, Marc, Adrián, Almu : Business (gestió menus + rebuda i acceptació comanda)
  • Oscar, Ruben, Mateo : facturació
  • Adrià, Kevin, David : users (gestió)
  • Joel, Rafa, Dídac, Ferran: orders + deliver + app mensaka web

Documentació addicional

Tenim informació d'un projecte previ que va implementar aquest sistema. Aquesta documentació pot aclarir una mica les necessitats, tot i que podem simplificar moltes funcions que per aquest projecte no necessitem inicialment.

El projecte estava distribuit en 3 bases de dades diferents:

BD Menus

Mensakas menus.png


BD Orders

Mensakas orders.png


BD Web

Mensakas web.png