Overview
Let’s start by defining some common terms of the ubiquitous language in this application’s domain
User: an individual using the app. A user can have one or more roles.
Rider: a user that can request and go on a trip.
Driver: a user who has registered with his car, and thus is able to accept a proposed trip.
Admin: An admin is a superuser who can, among other things, get metrics, list users and transfer money between accounts.
Trip: A trip has a state, an origin and a destination. When the trip is ongoing, the driver’s current location is available too.