# Registr smluv Aplikace pro transparentní evidenci smluv a informací s nimi spojených. ## Struktura projektu ``` . ├── registry = Nastavení projektu, URLs. ├── shared = Sdílené modely, templaty a statické soubory pro všechny ostatní aplikace. ├── contracts = Aplikace pro samotné smlouvy. ├── users = Aplikace pro uživatele. ├── static_src = Zdrojové CSS a JS, které příkazem 'make build' buildujeme. ├── requirements = Pythonové závislosti z PyPI. └── env.example = Příklad .env souboru. ``` ## Konfigurace Je třeba definovat minimálně následující environment proměnné: | proměnná | popis | | --- | --- | | `DATABASE_URL` | URL pro připojení k databázi ve formátu `postgresql://username:password@host:5432/database_name` | | `SECRET_KEY` | Tajný klíč např. pro šifrování | | `OIDC_RP_REALM_URL` | OpenID server realm URL (např. `http://localhost:8080/auth/realms/master/`) | | `OIDC_RP_CLIENT_ID` | OpenID client ID | | `OIDC_RP_CLIENT_SECRET` | OpenID Client Secret | | `DEFAULT_COUNTRY` | Defaultní země podepisujících stran, např. `Česká republika` | | `DEFAULT_CONTRACTEE_NAME` | Defaultní jméno naší podepisující strany | | `DEFAULT_CONTRACTEE_STREET` | Defaultní ulice a č.p. naší podepisující strany | | `DEFAULT_CONTRACTEE_ZIP` | Defaultní PSČ naší podepisující strany | | `DEFAULT_CONTRACTEE_DISTRICT` | Defaultní obec naší podepisující strany | | `DEFAULT_CONTRACTEE_ICO_NUMBER` | Defaultní IČO naší podepisující strany | V produkci je potřeba: | proměnná | popis | | --- | --- | | `ALLOWED_HOSTS` | Seznam domén, skrz které se na server lze připojovat. [Více info](https://docs.djangoproject.com/en/4.1/ref/settings/#allowed-hosts) | ## Vývoj V produkci používáme Docker. Při vývoji se hodí přiložený `Makefile`, pro automatizování často prováděných akcí. Pro nápovědu zavolej: ```bash $ make help ``` ### Lokální setup Požadavky: - Python 3.9+ - Linuxové prostředí, na Windows netestováno Zkopíruj `env.example` do `.env`, nastav potřebné proměnné. Vytvoř virtualenv: ```bash $ make venv ``` Vytvoří virtualenv ve složce `.venv`. Předpokládá že výchozí `python` v terminálu je Python 3. Pokud tomu tak není, použij třeba [Pyenv](https://github.com/pyenv/pyenv) pro instalaci více verzí Pythonu bez rizika rozbití systému. ### Aktivace virtualenvu Před prací na projektu je třeba aktivovat virtualenv. To bohužel nejde dělat pomocí nástroje `make`. Je třeba zavolat příkaz: ```bash $ source .venv/bin/activate ``` Pro shell lze vytvořit alias. Do `~/.bash_profile`, `~/.zshrc` nebo jiného konfiguračního souboru dle tvého shellu přidej: ```bash $ alias senv='source .venv/bin/activate' ``` A pak můžeš virtualenv aktivovat pouze jednoduchým voláním: ```bash $ senv ``` Pro sofistikovanější řešení, které aktivuje virtualenv při změně adresáře na adresář s projektem, slouží nástroj [direnv](https://direnv.net/). Deaktivace virtualenv se dělá příkazem: ```bash $ deactivate ``` ### Instalace závislostí Spusť: ```bash $ make install ``` Tím se nainstalují Pythonové závislosti a virtuální Node.js 19x nutné k buildu statických souborů. ### Build statických souborů Spusť: ```bash $ make build ``` Tím se vytvoří CSS a JS soubory, které se dají použít v prohlížečovém prostředí. ### Spuštění development serveru Django development server na portu `8012` se spustí příkazem: ```bash $ make run ``` Poté můžeš web otevřít na adrese [http://localhost:8012](http://localhost:8012). ### Code quality K formátování kódu se používá [black](https://github.com/psf/black). Doporučujeme ho nainstalovat do tvého editoru, aby soubory přeformátoval po uložení. Přeformátování kódu nástrojem `black` je součástí `pre-commit` hooks (viz níže). Součástí `pre-commit` hooků je také automatické seřazení importů v Pythonních souborech nástrojem [isort](https://github.com/timothycrosley/isort/). ### Pre-commit hooky Použivá se [pre-commit](https://pre-commit.com/) framework pro management git pre-commit hooks. Máš-li pre-commit framework [nainstalovaný](https://pre-commit.com/#installation), spusť příkaz: ```bash $ make install-hooks ``` Ten naisntaluje hooky pro projekt. A poté při každém commitu dojde k požadovaným akcím na změněných souborech. Ručně se dají hooky na všechny soubory spustit příkazem: ```bash $ make hooks ```