# cjvt-valency
Required submodules:

* `https://gitea.cjvt.si/kristjan/cjvt-corpusparser.git`

```bash
$ git submodule init
$ git submodule update
```

## Components

### Credentials
Copy `env.default` to `env.local` (gitignored).  
Modify database credentials in `env.local`.  
The file is used by `make`.  


### Database (2 containers)
Set db admin, user, pass, etc in 'Makefile'.  
Spin up the database service and create users:  
Make sure you create a folder for the data on host machine (see `mongodb-stack.yml` `volumes`.  
```bash
$ mkdir -p ${HOME}/mongo_container/data/  # default one
# $ make database-clean  # opt, removes docker services, not data
$ make database-service
$ make database-users  # only first time; user data persists too
```

Populate the database with data form files:  

* ssj500k.xml
* kres.xml
* kres_SRL.json

Set path to files in `Makefile`.  
```bash
# spin up a container with python env
$ make python-env

# install our packages
$ make python-env-install

# run the code
# beforehand, set the data files in Makefile
# instead of mounting directories into the container, you can
# create a link inside ./data, that points to the desired location 

# I've separated the processes for better memory management
$ make fill-database-ssj

$ make fill-database-kres
# You can detach from the running process using Ctrl-p + Ctrl-q



# this is a long operation
# if running on a remote server, use nohup:
$ nohup $(make fill-database > fill-database.log) &
```

If all goes well, we should be able to inspect the database, filled with corpora, on `0.0.0.0:8087`.  


### Flask backend (1 container)
Relies heavily on the database. Set that up first. 
```bash
# spin up container
$ make python-env

# install our packages
$ make python-env-install

# needs to be ran once to modify a new database
$ make backend-prepare-db

# with debugger
$ make backend-dev

# production
$ make backend-prod
```

API endpoints:

* GET word list (pre-cached)
* GET reduced frames (pre-cached)
* POST senses
* User auth logic


### Vue frontend (1 container)
Relies on Flask backend.  
Before running `make`, you might need to set the correct api address.  
Check `./src/frontend_vue/config/config_prod.json`.  
bash
```
# $ make frontend-dev  # development
$ make frontend-prod
```

App available on: `http://0.0.0.0:8080`.  
