This repository holds the main server side module the web and mobile clients interact with, it also hold the web and mobile related code.
The technology stack of this site is based on the following frameworks:
- Asp.Net core - infrastructure
- NSubstitute - for mocking in tests
- GraphHopper - for routing between points
- Elastic Search and NEST - for database and search capabilities
- Net Topology Suite - for spatial mathmatics
- OsmSharp - for OSM capabilities
- NeoSmart.Caching.Sqlite - for persistant cache, mainly to allow idempotent operations
- Wikipedia using Wiki client library - for Wikipedia data and upload images to Wikimedia common
- Imgur - for uploading anonymous images
- Docker - for image creation and microservices architecture
- Typescript - for sanity
- Angular and Angular-Material - for UI framework and components
- MapLibre using ngx-maplibre-gl - for map presentation and interaction
- Jasmine and Karma - for unit testing
- Capacitor - for wrapping the site as a mobile application and add some native capabilities
- Turf - for spatial mathematics
- NGXS - for state management
- Dexie - for database storage
- D3 - for advanced chart capablilities
- Lottie and ngx-lottie - for image animations
- MiniSearch - for in memory search
- GeoJSON Path Finder - for in memory small area routing
The architecture is based heavily on Angular:
- application - where all the application code is, topmost folder.
- components - this layer handles the UI calls and bindings along with the relevant css and html files.
- directives - folder for all the directives.
- models - used to store data types that are common to the entire app.
- reducers - used for redux reducers, actions and payloads.
- services - this layer holds the lower level data handling.
- content - used for images and static content.
- environments - used for angular-cli to define production and dev variables.
- fonts - icomoon generated font for icons instead of images.
- scss - used for global style files
- translations - all relevant data related to i18n.
The architecture is based on layers:
- API - the client entry point and main business logic module
- Contollers - the top-most layer to catch all the requests
- Services - responsible for orchestrating executors
- Converters - converters logic between types of geo structures
- Executers - basic logical building blocks
- Web - the entry point of the app and where the client side code gets built
- DataAccessInterfaces - a slim layer to decouple business logic from data access
- DataAccess - database, file system and network request are processed in this layer
- Common - Mainly for POCOs
- Tests - where the tests are located, they mirror the BL hierarchy