# Kapesní skautIS

Mobilní multiplatformní aplikace (Android OS, iOS), implementující vybrané agendy skautISu. Na vývoji aplikace pracují dobrovolníci z českého skautingu a studenti Masarykovy univerzity, jež na aplikaci pracují v rámci jejich závěrečných prací.

Pro vývoj aplikace byl zvolen framework [React Native](https://reactnative.dev/), s nastavbou [Expo](https://expo.dev/), který umožňuje build nativních aplikací pro obě majoritní platformy současnosti.

# Rozcestník

- [Spuštění projektu (Visual Studio Code)](#spuštění-projektu-visual-studio-code)
  - [Požadavky](#požadavky)
  - [Spuštění projektu](#spuštění-projektu)
- [Účty pro práci s aplikací](#účty-pro-práci-s-aplikací)
- [Vývoj aplikace](#vývoj-aplikace)
- [Nasazení aplikace](#nasazení-aplikace)
- [Struktura aplikace](#struktura-aplikace)

# Spuštění projektu (Visual Studio Code)

## Požadavky

Před spuštěním projektu na vlastním PC je potřeba mít splněné následující:

1.  Nainstalujte [Visual Studio Code](https://code.visualstudio.com/).
2.  Nainstalujte [Node.js](https://nodejs.org/en/download/).
3.  Nainstalujte Expo-Cli přes cmd (doporučuji spustit jako správce) příkazem `npm install -g expo-cli`.
4.  (Optional) Nainstalujte emulátory.
    1.  **IOS**
        - Je přístupný automaticky na jakémkoli MAC přístroji. Jinde nejde získat.
        - Pokud používáte Mac s Apple Silicon s Iphone simulátorem, musíte si aktivovat rosetta 2, abyste mohli na svém simulátoru spouštět aplikaci expo go. Spusťte tento příkaz pro jeho aktivaci:
          `/usr/sbin/softwareupdate --install-rosetta --agree-to-license`
    2.  **Android**
        - Pokud chcete spustit aplikaci v emulátoru pro android, je potřeba nainstalovat ještě [Android Studio](https://developer.android.com/studio).
5.  (Optional) Nainstaluje aplikaci [Expo Go](https://expo.dev/expo-go) na vlastní telefon.

## Spuštění projektu

Jakmile máte nainstalováno vše potřebné, pokračujte takto:

1. Stáhněte si projekt a rozbalte jej.
2. Otevřete Visual Studio Code, v menu vyberte **File -> Open Folder** a vyberte složku **kapesni_skautis**.
3. Klikněte na záložku **Terminal -> New Terminal**.
4. V nově otevřeném terminálu spusťte příkaz `npm install` což vám stáhne všechny závislosti.
5. Spusťte příkaz `npm start` nebo `npm expo start`. Nebo případně `npm run android` nebo `npm run ios`.
6. Pokud vše proběhlo správně, měl by se spustit interaktivní nástroj pomocí (Expo console), pomocí kterého můžete zapnout emulátory nebo propijit applikaci s vaším mobilem.

## Účty pro práci s aplikací

Pro lokální testování je využíváno [TEST API](https://test-is.skaut.cz/). Je tedy nutné používat testovací účty.
|Jméno|Heslo|
|---|---|
|kraj.vary|vary.Web2|
|snem.sneznik.kk|komise1|

Pro více informací o tom jak funguje test-is [zde](https://napoveda.skaut.cz/skautis/testovaci).

## Vývoj aplikace

Přidat nebo upravit funkcionalitu:

1. Vytvořte novou branch z `master` branche.
2. Naprogramujte požadované změny. Je důležité aby ´jste vaše commit zprávy drželi [oficiálních konvencí], slouží k zachování konzistence v repozitáři.
3. Vytvořte pull request zpátky do `master` branche. Až bude kód nachystám v ideálním stavu mergnete.
4. Novou verzi `master` branche naleznete za několik minut na [zde](https://expo.dev/@kapesni_skautis/kapesni-skautis?serviceType=classic&distribution=expo-go&release-channel=test) Aplikace v tomtou prostředí využívá [https://test-is.skaut.cz/](https://test-is.skaut.cz/).

## Nasazení aplikace

Nasazení aplikace do obchodů:

1. Vytvořte pull request z `master` do `release` branche. Až bude kód nachystám v ideálním stavu mergnete.
2. Novou verzi `release` branche naleznete za několik minut na [zde](https://expo.dev/@kapesni_skautis/kapesni-skautis?serviceType=classic&distribution=expo-go&release-channel=prod). Aplikace v tomtou prostředí využívá [https://test-is.skaut.cz/](https://test-is.skaut.cz/).
3. Průběh sestavvání buildů a nasazování do obchodů můžete potom sledovat [zde](https://expo.dev/accounts/kapesni_skautis)

- Účet
  - Jméno: `skautisTest`
  - Heslo: `kapesni1`

4. Poté co třetí krok doběhne bez problémů stačí už pouze navštívit vývojářské konzole obchodů a aplikaci zvěřejnit.

## Struktura aplikace

Struktura souborů v repozitáři

1. [API](https://test-is.skaut.cz/JunakWebservice/)
   - Pro práci s API, je využívan návrhový vzor Adaptér.
   - veškeré soubory pracující s api jsou v složce `src/services/api`, která je ovládána pomocí API classy, která kopíruje strukturu API. `api.events` má tedy pro každý implementovaný endpoint služby **Events** jednu metodu, která se stará o mapování dat a komunikaci s ní.
   - Všechny aktuálně používané endpointy naleznete [zde](src/constants/endpoints.json).
2. Komponenty a obrazovky
   - Primárně jsou využívány 2 složky `components` a `screens` a to v rekurzivním větvení
   - každá stránka obsahaje svoji složku `screens` se všemi stránkami na které odkazuje.
   - komponenty se snažíme dávat do co nejvyší složky `components` ve stromu, tak aby nahoře byli ty co nejvíce obecné a čím jdeme hlouběji tím jsou specifičtější.
