demo link: https://www.youtube.com/watch?v=7DLgglwiFcU
GaHu (Game Hunter), a project to view game info and Playstation trophy profile.
The main objective of the project is to apply caching technique using Room in Android development.
The project uses Kotlin for Android, NodeJS for Backend, and MongoDB for database.
Some of the main features of the app: can be use offline (without internet), view game info (and filter by Platforms), and view trophy profile (crawl data from https://psnprofiles.com)
- Kotlin
- MVI with Clean Architecture
- Offline first app
- Caching using Room
- Flow
- Apply best practice
- Signle source of truth concept
- Pagination (no external library), multiple ViewHolder in Recycler View
- Dependency Injection (Hilt)
- Improvement from previous projects: background jobs are handled properly, no concurency errors
- JavaScript, NodeJS, ExpressJS
- MongoDB, MongoAtlas
- MVC architecture
- AWS S3
- Deploy on Heroku
- Crawling: cheerio and axios
- MVI states consumption errors
- Room DB is not well optimized and designed
- Project is not completed (some side features are not implemented)
- Does not apply best pactices
- API are not well documented
.
├── controllers
│ ├── auth.js
│ ├── game.js
│ ├── platform.js
│ ├── trophy.js
│ ├── user.js
├── middlewares
│ ├── auth.js
│ ├── ...
├── models
│ ├── game.js
│ ├── ...
├── routes
│ ├── auth.js
│ ├── ...
├── seeds
├── utils
├── app.js
Environment:
- SECRET_SIGNATURE # Secret Signature for JWT
- AWS_BUCKET_NAME # AWS key
- AWS_BUCKET_REGION
- AWS_ACCESS_KEY
- AWS_SECRET_KEY
- MONGO_DB_NAME # Mongo Database
- MONGO_USERNAME
- MONGO_PASSWORD
Command:
npm install
npm start
API documentation: api documentation.xlsx