Projecte Mensakas

De Wiket
Salta a la navegació Salta a la cerca

Mensakas és una cooperativa de repartiment a domicili fundada a partir del col·lectiu Raiders Por Derechos, extreballadors de corporacions de repartiment com Glovo o Deliveroo que han decidit no deixar-se explotar per aquestes grans corporacions.

Ens demanen que els ajudem a millorar una aplicació que estan desenvolupant de repartiment a domicili.

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 autenticar els usuaris per accedir a les seves dades, altes i baixes (admin) i rols/taules (mensakas, admins, business, customers)
  • Mòdul de business : permet accedir als menús dels restaurants.
  • 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ó : pasarel·la de pagament
  • 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:

  • Tarifes i facturació : pasarel·la de pagament
  • App Customer web : ampliarem la funcionalitat del Simulador de compra per disposar d'un frontend web per poder fer comandes.
  • App Mensaka web : notificacions de comandes i acceptació
  • App Business web : 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 : producció (gateway) + 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