Grady - will correct you!
=========================

The intention of this tool is to simplify the exam correcting process at the
University of Goettingen. It is deployed as a Django web application.

[![pipeline status](https://gitlab.gwdg.de/j.michal/grady/badges/master/pipeline.svg)](https://gitlab.gwdg.de/j.michal/grady/commits/master) [![coverage report](https://gitlab.gwdg.de/j.michal/grady/badges/master/coverage.svg)](https://gitlab.gwdg.de/j.michal/grady/commits/master)

Contributing
------------

Feature proposals are welcome! If you experienced any bugs or otherwise
unexpected behavior please submit an issue using the issue templates.

It is on course possible to contribute but currently there is no standardized
way since the project is in a very early stage and fairly small. If you feel the
need to help us out anyway, please contact us via our university email
addresses.


Dependencies
------------

Make sure the following packages and tools are installed:

- Python 3.6
- [`virtualenv`](https://virtualenv.pypa.io/en/stable/)
- [Docker](https://www.docker.com/) or a local installation of [Postgres](https://www.postgresql.org/)
- `npm` or `yarn` (you can use `npm` to install `yarn`)
- `make`

These are required to set up the project. All other application dependencies are
listed in the `requirements.txt` and the `package.json` files. These will be
installed automatically during the installation process.

Installing
----------

To set up a new instance perform the following steps:

1.  Create a virtual environment with a Python3.6 interpreter and
    activate it. It works like this:

        virtualenv -p python3.6 env
        source env/bin/activate

    Just type `deactivate` the get out.

2.  Set the environment variable `DJANGO_DEV` to `True` like this:

        export DJANGO_DEV=True

3.  Install dependencies:

        pip install -r backend/requirements.txt
        yarn --cwd frontend/ 
        yarn --cwd backend/

    or alternatively with the make task:

        make install

    Some systems (like Ubuntu Xenial) come with a preinstalled "yarn -
    scenario testing of Unix command line tools". Using this will
    **not** work. The [yarn package
    manager](<https://yarnpkg.com/en/docs/install>) is needed.

4.  Set up a Postgres 9.5 database. If you have docker installed the
    easiest way is to just run it in a docker container, like this:

        docker run -d --rm --name postgres -p 5432:5432 postgres:9.5

    Alternatively, take a look at the Makefile targets that should make your
    life easier.

    And apply database migrations:

        python manage.py migrate
        python manage.py loaddata core/fixtures/testdata-groups.json

5.  Create a superuser if necessary:

        python manage.py createsuperuser

    More users can be added in the admin interface. You should be able
    to reach it via <http://localhost:8000/admin>.

6.  To import some test data in order to see how the application might look like
    run:
        make loadexamples

7.  Everything is set. You can start the development server with:

        python manage.py runserver

    or just:

        make run


Testing
-------

> "Code without tests is broken by design." -- (Jacob Kaplan-Moss, Django core developer)

Well, currently this repository lacks tests, thats true. But that will change as
this work until now is merely a prototype that will be developed further. However,
the few existing tests can be seen as examples and can be found in the `tests.py`
file of each app (currently only `core`). You can run those tests with

    python manage.py test core

or if you want a coverage report as well you can run:

    make coverage

Overview
--------

Grady has three basic functions for the three types of users

* Reviewers can
  * edit feedback that has been provided by tutors
  * mark feedback as final if it should not be modified (only final feedback is
    shown to students)
  * delete feedback (submission will be reassigned)
* Tutors can
  * request a submission that they have to correct and submit feedback for it
  * deleted their own feedback
  * review feedback of other tutors
  * they do not see which student submitted the solution
* Students can
  * review their final feedback and score in the post exam review

An overview over the database can be found in the docs folder.