https://github.com/gabrielborgesdm/i-must
"I must" allows you to take notes, set reminders and store Images while also offering online synchronization to avoid losing all of your appointments.
https://github.com/gabrielborgesdm/i-must
api-rest docker docker-compose eslint java-android mongodb mvvm-architecture nodejs realm typescript
Last synced: 6 months ago
JSON representation
"I must" allows you to take notes, set reminders and store Images while also offering online synchronization to avoid losing all of your appointments.
- Host: GitHub
- URL: https://github.com/gabrielborgesdm/i-must
- Owner: gabrielborgesdm
- Created: 2021-03-28T21:32:44.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-11-30T00:39:25.000Z (about 4 years ago)
- Last Synced: 2025-03-24T09:13:18.904Z (9 months ago)
- Topics: api-rest, docker, docker-compose, eslint, java-android, mongodb, mvvm-architecture, nodejs, realm, typescript
- Language: Java
- Homepage:
- Size: 5.85 MB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# I must
"I must" allows you to take notes, set reminders and store Images while also offering online synchronization to avoid losing all of your appointments.
You can create an user account that allows you to synchronize your tasks. A task has a description which can be spoken through Speech to text function. It also has *more options* in case you want to add more information to it, such as an alarm notification and the capacity to store images to help remembering what you must do.

## Publishing details
- API docs available [here](https://documenter.getpostman.com/view/6190871/TzY4eaE9 "here")
## Application details
**API Server**
- API Rest that uses the following technologies *Node.Js*, Express, *Docker*, *Docker Compose*, *Eslint*, *Typescript*, *Mongoose* and *Joi* and *JWT*.
- It was developed following an adapted version of the *MVC architecture*. Here, the *Model* is only for *schemas* and *models*, while the *Controller* holds all of the server logic.
- It also has helpers with useful functions to be used by the *Controller*
- The route system was developed using express, it has two middlewares.
- *Auth Middleware*: Check if the *JWT token* is valid.
- Validation Middleware: Check if the request's body is valid through the *JOI* validation library. Routes have specific schemas responsible for checking if the user is sending the right data.
- It use Mongo database to store the server data. *Mongoose* was chosen as the ODM package.
- For deployment there's a *docker-compose* and *Dockerfile* files that helps building and starting the server.
**Mobile application**
- *Java* application using *Model–view–viewmodel* architecture.
- Offline first application with server side syncronization.
- *Realm database* for offline data, it uses *Singleton data pattern* to avoid performance issues.
- *Material Design* for a better layout.
- *Retrofit API Interface* in order to do the server requests.
- *PhotoView* to help zooming and displaying images.
## Installation Details
**API Server**
- Make sure you have [docker](https://docs.docker.com/engine/install "docker") and [docker-compose](https://docs.docker.com/compose/install/ "docker-compose") installed.
- Rename the *.env-test* file to *.env* and replace its content with your environment variables.
- Run the following command to start the server: `sudo docker-compose up`.
**Mobile application**
- Make sure you have [Android Studio](https://developer.android.com/studio "Android Studio") installed.
- Open the mobile app with it.
- Open the *build.gradle* file and change *BuildConfig* variables with your configuration.