Skip to content

Pointyware/XYZ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XYZ

Get your X from Y to Z

Roles

  • Passengers - Individuals, Groups, or Wards taking a trip.
  • Providers - Owners or Operators providing the service.
  • Managers - Fleet Managers or Dispatchers managing the service.

Features

Contributing

To get started, you'll need to first set up some credentials for the app by ensuring you have the following files with the given variables.

Environment Variables and Secrets

  • ./local.properties - Usually generated by Android Studio and contains a path to the Android SDK.
  • ./secrets.properties - This will need to be created in the root of the project.
    • MAPS_API_KEY
    • AD_MOB_APP_ID
    • APP_LOVIN_API_KEY
  • ./local.defaults.properties - defines defaults for the above, checked in VC. Used by :app-android secrets task
  • ./stripe-secrets.properties - This will need to be created in the root of the project.
    • STRIPE_API_KEY_TEST
    • STRIPE_API_KEY_LIVE
    • STRIPE_STAGING_URL
    • STRIPE_PRODUCTION_URL
  • ./stripe-local.defaults.properties - defines defaults for the above, checked in VC
  • ~/.gradle/gradle.properties - user global gradle properties
  • ./gradle.properties - project gradle properties

Architecture

Client and Server Layer Comparison

The client-side applications are following typical Android MVVM and Repository patterns within a 4-layer Clean Architecture, while the server-side applications are following an Express.js-derived pattern usually considered MVC, though we attempt to remain reactive, mapping any information to a higher abstraction before passing it to a higher layer of abstraction(here lower) and mapping the results back, instead of injecting output ports that would allow the model to directly control the output.

%%{
  init: {
    'theme': 'neutral'
  }
}%%

classDiagram

namespace Api-Frameworks-Drivers {

  class ServerKt {
    fun main(vararg args: String)
  }
  class Routing
  class ConnectionPool
  class Database
}
ServerKt --> Routing
Database --> ConnectionPool

namespace Frameworks-Drivers {
  class UI
  class Views
  class Cache
  class Service
}

namespace Api-Adapters {
  class Controllers
}
Routing --> Controllers

namespace Adapters {
  class Repositories
  class ViewModels
  class IDataSources
}
Cache --|> IDataSources
Service --|> IDataSources
Repositories --> IDataSources
UI --> ViewModels
Views --> ViewModels

namespace Api-Application-Business-Logic {
  class Services
  class IDatabase
}
Database --|> IDatabase
Services --> IDatabase
Controllers --> Services

namespace Application-Business-Logic {
  class Interactors
  class IRepositories
}
Repositories --|> IRepositories
Interactors --> IRepositories
ViewModels --> Interactors
ViewModels --> IRepositories

namespace Enterprise-Business-Logic {
  class Entities
}
Interactors --> Entities
IRepositories --> Entities
Services --> Entities

Loading

Modularization

%%{
  init: {
    'theme': 'neutral'
  }
}%%

graph LR

  classDef default,library fill:#fff,stroke:#333,stroke-width:4px;
  classDef program fill:#9f9,stroke:#333,stroke-width:4px;
  classDef testModule fill:#f99,stroke:#333,stroke-width:4px;
  
  :api-client-tests:::testModule --> :api
  :api-client-tests --> :app-android

  subgraph Programs
    :api:::program
    :app-android:::program
    :app-desktop:::program
    :app-ios:::program
  end
  :api --> :api-dtos
  :app-android --> :app-shared
  :app-desktop --> :app-shared

  subgraph app-library
    :app-shared
  end
  
  :app-shared --> :feature-drive
  :app-shared --> :feature-ride
  :app-shared --> :feature-manage
  :app-shared --> :feature-login
  
  subgraph features
    :feature-drive
    :feature-ride
    :feature-manage
    :feature-login
  end

  :feature-drive --> :client-all
  :feature-ride --> :client-all
  :feature-manage --> :client-all
  :feature-login --> :client-all
  
  :feature-manage --> :feature-drive
  
  :feature-login --> :feature-drive
  :feature-login --> :feature-ride

  subgraph shared
    :shared-entities
  end

  subgraph server
    :api-dtos
  end
  
  subgraph client
    :client-all --> :shared-entities
    :client-all --> :client-common
    :client-all --> :client-interactors
    :client-all --> :client-data
    :client-all --> :client-remote
    :client-all --> :client-local
    :client-all --> :client-view-models
    :client-all --> :client-ui
    :client-all --> :client-navigation

    :client-data --> :shared-entities
    :client-data --> :client-common
    :client-data --> :client-local
    :client-data --> :client-remote

    :client-ui --> :shared-entities
    :client-ui --> :client-common
    
    :client-interactors --> :client-common
    :client-interactors --> :client-data
    
    :client-local --> :client-common
    :client-local --> :shared-entities
    
    :client-navigation --> :client-common
    :client-navigation --> :shared-entities
    
    :client-remote --> :client-common
    :client-remote --> :shared-entities
    :client-remote --> :api-dtos
    
    :client-ui --> :client-common
    :client-ui --> :shared-entities
    :client-ui --> :client-view-models
    
    :client-view-models --> :client-common
    :client-view-models --> :shared-entities
    :client-view-models --> :client-interactors
  end
Loading

About

Get your X from Y to Z

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages