# MedDict-VinUni Maintainer Manual
[TOC]
# Description
This manual is acting as the maintainer guideline for future maintainers and/or developers of the application MedDict-VinUni, including:
+ The frontend & backend of [MedDict-VinUni](https://meddict-vinuni.com)
+ The plugin [MedDict-Highlighter](https://github.com/linhledieu/MedDict-highlighter)
+ The associated Google Apps Script functions in [MedDict VinUni Project spreadsheet](https://docs.google.com/spreadsheets/d/1bq5Bj2p9TUCnezpkiDKtJOKD5V87cWhkZcsN-XmFbx4/edit?usp=sharing)
Although we have tried to document as much as possible, there might be a lot of errors, misunderstanding or other technical problems when refers to the docs. Therefore, we welcome all maintainers & developers of the project to contact us:
+ **Frontend Lead Developer**: [Mr. Nguyen Tung Lam](mailto:21lam.nt@vinuni.edu.vn)
+ **Backend Lead Developer**: [Mr. Nguyen Tuan Anh](mailto:21anh.nt@vinuni.edu.vn)
+ **MedDict-Highlighter's Developers**: [Ms. Le Dieu Linh](mailto:21linh.ld@vinuni.edu.vn)
+ **Project Manager**: [Mr. Nguyen Nhat Minh](mailto:21minh.nn2@vinuni.edu.vn)
# Requirement Analysis & Specification
Please refer to our report in [here](https://docs.google.com/document/d/1uGaYGFbZ70wfFL5K82F_iof82ASRNB3Y/edit?usp=drive_link&ouid=103232476217020077352&rtpof=true&sd=true)
# System Design
As mentioned above, our application is an eco-system of three components: Frontend, Backend and the Apps Script from Google.
The overall design of the application can be viewed from this image:

Note that, the website of MedDict VinUni & Backend are hosted in different Docker containers.
More in-depth design of the application can be found in [this report](https://docs.google.com/document/d/1LUdJpwGSzS7OFeZ3gyDhnLIeiS6FfV57/edit?usp=sharing&ouid=103232476217020077352&rtpof=true&sd=true)
# Deployment
## Prerequisite
Make sure you are having either [Docker Desktop](https://www.docker.com/products/docker-desktop/) or [Docker Engine](https://docs.docker.com/engine/) on your device/server. We highly recommend you use a Linux Distro to host the application.
## Installation
### MedDict Website & Backend API
1. Clone the project
```bash!
git clone https://github.com/tunglambg131003/COMP2030_Meddict
cd COMP2030_Meddict
```
2. Create a `.env` file under the repository. You can take the `.env_sample` in the repository as example.
We highly recommend using `secret` modules of Python or any equivalent password/token randomizers to act as the password of users and API key of the app.
```python
>>> import secrets
>>> secrets.token_urlsafe(32) # use your wanted length here
'kj8ynv0gw-FZL4ti-pdeecPwOE0zJ2X_47wRsG5TvTs'
>>>
```
3. Create a `mongo-init.js` file to initialize the database. You can take the `sample-mongo-init.js` in the repository as example.
**Notes**: The usage of `users` database is **deprecated**. You can safely remove the lines related to this database in `sample-mongo-init.js` file.
4. Run the following command:
```Bash
docker compose up -d build
```
5. You are done! Access the service at `localhost` via your web browser if you are installing in local machine, or the server IP address/domain name if you are deploying it on a cloud instance.
### MedDict Apps Script plugin
0. You should install [`clasp`](https://codelabs.developers.google.com/codelabs/clasp/#0) - The CLI tool for Google Apps Script.
1. `Optional`: Create a new Google Spreadsheet, in which you follow the format of the original MedDict VinUni Project template.
2. Open the Google Spreadsheet, and go to `Extensions` -> `Apps Script`. Collect the project ID of the project. `https://script.google.com/u/0/home/projects/<YOUR_PROJECT_ID_HERE>/`
3. Run the following command
```bash
clasp login # login into your SpreadSheet Account
clasp clone $PROJECT_ID
```
4. Copy files from `apps_script` folder. You can follow [this tutorial](https://developers.google.com/apps-script/guides/typescript) for using TypeScript during your development.
5. Create a `MedDict_Config.js` or `.ts` file with the following content:
```javascript!
var ALLOWED_USERS = [
// List of your whitelist admin
];
var API_KEY = "API_KEY"; // Your API_KEY from .env file
```
5.Run the following command to push your changes to the Google Spreadsheet
```bash!
clasp push
```
6. You are done! You can now automate your editing process with the Google Spreadsheet.
## Development
Currently, the code is **UNDER DEVELOPMENT**. The following instructions are for developers in the project.
### MongoDB data
Currently, the data for MongoDB is not inserted automatically. You need to insert the data manually by:
1. Access the MongoDB container by running the following command:
```bash
docker exec -it mongodb bash
```
2. In the MongoDB container, run the following command:
```bash
mongoimport --host mongodb --db MedDict --collection dictionary --authenticationDatabase admin --username $MONGO_INITDB_ROOT_USERNAME --password $MONGO_INITDB_ROOT_PASSWORD --type json --file /data/database.json --jsonArray
```
The current (04 Feb 2024) data is located in this folder.
#### ALTERNATIVE
The current development code is using another "pseudo" domain: `meddict.com` for the website and `api.meddict.com` for the API endpoints. You can do so by adding the following lines to your `/etc/hosts` file:
```
127.0.0.1 localhost
127.0.0.1 api.meddict.com
127.0.0.1 meddict.com
::1 localhost
```
# Documentation
The Backend API documentation is available at:
+ Product API: https://api.meddict-vinuni.com/docs
+ Detailed API: https://bump.sh/h114mx001/doc/meddict-vinuni
# Final user interface design & Developer workflow
Our developer notes & guideline of the installation is mentioned in our project [README](https://github.com/tunglambg131003/COMP2030_Meddict).
Also, a demo of usage of the plugins is available at this [YouTube video](https://youtu.be/D39WHLtth_8)
# FAQ
##### I can't build the project after cloning?
You may have a problem with Docker and/or haven't config the `.env` and `mongo-init.js` file as shown in the [Deployment](#Deployment) part. Review it one more time.
##### I can't find any illustration?!
Please review the part of [MongoDB](#MongoDB-data) for our latest backup version. It should contain the images & database init file for you. Place them at the `data/` folder.
##### I can't access the webpage after build?
As mentioned, we used a pseudo URL `api.meddict.com` as our development URL. You can visit the [Development](#Development) section for config your own development environment.