๐๐ธ MappIt - Discover and Share New Places
MappIt is an application that allows users to discover new places to visit and share their adventures and experiences, helping creators to promote their contents on the community.
MappIt is based on the client-server paradigm and the designed and implemented in detail the server part.
๐๏ธ Architecture
Below is reported the SW architecture:
MappIt was deployed on a cluster of three servers, each responsible for a different part of the service:
- Server A: Runs the Java backend of the service and is part of the MongoDB cluster.
- Server B: Runs the Neo4j server and is part of the MongoDB cluster.
- Server C: Runs the data population periodic scripts and is part of the MongoDB cluster.
๐ Key Features
- Post New Visits: Share your journeys to various points of interest.
- Find New Places: Discover new places to visit using filters like distance or popularity.
- Interact with Other Users: Engage with posts from other explorers.
- Advanced Search: Use various filters to find specific posts and places.
๐ง Service Implementation
The implementation of this project focused mainly on two aspects:
- Backend of the Service:
- APIs of the service
- Database structure
- Business logic
- Data Population:
- Scripts that exploited external APIs and services to add places and posts in the databases of the service
๐๏ธ API Development with OpenAPI and Swagger
In order to develop our APIs with the OpenAPI Specification, we decided to exploit the open-source tool set Swagger. Swagger is an Interface Description Language for describing RESTful APIs expressed using JSON, which helped us generate an OpenAPI document based on the code itself, adding an extra GUI for easier navigation through the endpoints:
Here is an example of the json response when looking for a place to visit nearby. It contains several info like the localization, an associated picture, usersโ posts talking about it, YT video link etc. :
๐ผ Development Aspects
The development of this service included many different aspects of software engineering and service design such as:
- Java application packages organization
- Java application databases connection handling
- Service endpoints
- Functional requirements
- Non-Functional requirements
- Database queries analysis by means of the Operation Frequency Table
- Indexes on certain collections and documents attributes to improve the performance of frequent queries
- Database sharding: Proposed based on the country code of places and users to ensure higher service availability
- Cross-database consistency management
๐ GitHub Repository
Visit the project repository here for project documentation and access to the codebase and project documentation.
(if you enjoyed this content, please consider leaving a star โญ).