First, clone the project

```bash
git clone git@gitlab.com:la-chariotte/la_chariotte.git
```

## Virtual environment

To prevent the project's necessary libraries from conflicting with those on your system, it may be beneficial to install a virtual environment:

```bash
python3 -m venv .venv
```

Once the virtual environment is installed, you can activate it:

```bash
source .venv/bin/activate
```

## Installing the dependencies

!!! info "Weasyprint"

    We are using [Weasyprint](https://weasyprint.readthedocs.io/) for `.pdf` generation, which requires certain packages on your machine. You can follow [the instructions on this page](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation) to install them.

Then, you can retrieve the Python dependencies:

```bash
pip install -e ".[dev]"
```

And the frontend dependencies:

=== "Yarn"
    
    ```bash
    npm install
    ``` 

=== "npm"
    ```bash
    yarn install
    ```

## Setting up the database

We recommend using PostgreSQL for now ([installation instructions here](https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart)).

For development, we recommend creating a database named ```chariotte``` accessible by the user and password of the same name.

In a PostgreSQL prompt, enter this:

```sql
CREATE ROLE chariotte WITH
    LOGIN
    NOSUPERUSER
    CREATEDB
    NOCREATEROLE
    INHERIT
    NOREPLICATION
    CONNECTION LIMIT -1
    PASSWORD 'xxxxxx';
```
```sql
CREATE DATABASE chariotte
    WITH
    OWNER = chariotte
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;
```

## Create a configuration file

Create a local configuration file named "local_settings.py" at the project root :

```python title="local_settings.py"
from la_chariotte.settings import *

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "chariotte",
        "USER": "chariotte",
        "PASSWORD": "chariotte",
        "HOST": "localhost",
    }
}
```

## Start the server

Everything should now be ready to start the server:

```shell
python manage.py migrate --settings=local_settings
python manage.py runserver --settings=local_settings
```

To create a superuser, who will have access to the admin interface (/admin):
```shell
python manage.py createsuperuser
```

## Working with emails

To test the appearance of emails, you can use [Sendria](https://github.com/msztolcman/sendria):

```bash
pip install sendria
sendria --db mails.sqlite
$NAVIGATOR http://127.0.0.1:1080
```
