= AdvLabDB
:source-highlighter: highlight.js
:highlightjs-languages: bash

image:https://img.shields.io/badge/code%20style-black-000000.svg[link=https://github.com/psf/black] image:https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336[link=https://pycqa.github.io/isort/]

== Requirements
You need to have Python version >=3.10 and Poetry installed. To install Poetry, follow the https://python-poetry.org/docs/#installation[official instructions].

== Starting server

IMPORTANT: Every following instruction has to be followed every time before starting the server if not mentioned otherwise.

=== Update code and dependencies

Navigate to the directory `advlabdb` where the repository is _already_ cloned (otherwise clone it) and run:

[source,bash]
----
git pull origin main
----

to pull the latest changes from the remote repository. Then run:

[source,bash]
----
poetry install
----

to install (or update) all needed packages to the virtual environment.

=== Enter the virtual environment

Run:

[source,bash]
----
poetry shell
----

'''

=== Re(create) a test database

WARNING: Running the following line *drops an eventually existing database*! The data in the database will be *lost*! This has to be done only if you are starting the server for the first time without an existing database or you want to *drop and recreate* the database.

[source,bash]
----
python -m advlabdb.scripts.test.test_database
----

This (re-)creates the database with some elements for testing.

'''

=== Start test server

Now you can start the server by running:

[source,bash]
----
python run.py
----

This command will print out the URL for accessing the local server. For example:

----
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
----

This URL leads to the home page where you can login with this testing admin account:

* email: \admin@advlabdb.de
* password: admin

NOTE: Obviously, the email address is fake.

== ToDo

* Deactivate assistants account after a while if not assigned to experiments
* Backups
* Logging
* Email integration + assistant reminder?
* Students code for getting information and giving feedback
* License (GNU AGPLv3?)
* Privacy policy
