Kihagyás

Lokál környezet beállítása

1. Előfeltételek

  • Git telepítés
    • Windows operációs rendszer esetén a Git Bash telepítése is szükséges.
  • Node Version Manager telepítés.
    • A telepítendő Node/npm verzióról itt található információ.
  • Docker Desktop telepítés
    • macOS rendszer esetén az itt található beállításokat is végezzük el.
  • IntelliJ IDEA Ultimate telepítés
    • Az első munkanapon céges emaillel regisztrálva, trial verzióban lehet használni a programot.
    • 30 napon belül email értesítésben céges hozzáférést kapunk, amit az emailben kapott utasítások alapján kell aktiválni.

Docker compose V2 használata

Minden esetben győződjünk meg róla, hogy lokálisan is a V2-es verziójú docker compose-t használjuk. Compose verzió ellenőrzése:

docker compose version

Szükség esetén frissítsük a telepített docker/docker-compose-unkat és automatikusan át fog állni a V2-es pluginra.

Alapértelmezetten használandó terminál Windowson

Fontos, hogy a napi munkánk során a Git Bash-t használjuk terminálként Windows-on. Pl.: A Git műveletek parancssori használata során.

Ennek az az oka, hogy mivel a Git Bash egy emulált Unix-os terminál, így kevesebb különbözőséget kell kezelni a Windows és a macOS rendszerek között, illetve csak így tudja a Semi Product biztosítani, hogy a dokumentációban ajánlott parancsok és lépések konzisztensen működjenek.

2. Projekt kód klónozása

2.1 Git és GitLab konfigurálása

A Git használatához szükséges konfigurációt az alábbi oldal tartalmazza:

Git Lokális Környezet Beállítása

2.2 Az api repository klónozása

A következő paranccsal kell klónozni az api repository-t:

git clone git@gitlab.com:gbsolutions/granit-bank/virtualis-asszisztens/api.git

Az api repositoryban található a DTO-k generálásához használt openapi.yml fájlunk. Ezért mindig a fejlesztéshez szükséges branchet kell belőle checkoutolnunk.

Lokális fejlesztés során az api repositoryt fájlrendszeren keresztül oldják fel a frontend és backend projektek. Ahhoz, hogy ez működjön fontos, hogy az api repository-t ugyanabba a mappába klónozzuk ahová a backend projektet is.

DTO generálás

A projekt specifikus openapi.yml-ből történő kód generálásról részletesebben itt olvashatsz.

Ékezetes betűk a mappák neveiben

A kódgenerálás során problémát okoz, ha a séma definíciós fájlok útvonalában olyan mappák szerepelnek, amik ékezetes karaktereket is tartalmaznak.
Ennek elkerülése érdekében, amikor létrehozzuk a projekt mappáink struktúráját ügyeljünk arra, hogy ne használjunk ékezetes karaktereket az útvonalat alkotó mappák neveiben.

2.3 A backend repository klónozása

A következő paranccsal kell klónozni a backend repository-t:

git clone git@gitlab.com:gbsolutions/granit-bank/virtualis-asszisztens/backend.git

Ugyanazon branch checkoutolása minden repositoryban

Az alábbi scriptet tudjuk használni, hogy 1 lépésben checkoutoljuk ugyanazt a branchet minden repositoryból:

#!/bin/sh

BRANCH=$1

cd api
echo "$PWD"
git fetch
git reset --hard
git checkout $BRANCH
git pull
cd ..
cd backend
echo "$PWD"
git fetch
git reset --hard
git checkout $BRANCH
git pull
cd ..
cd frontend
echo "$PWD"
git fetch
git reset --hard
git checkout $BRANCH
git pull
cd ..
cd python-service
echo "$PWD"
git fetch
git reset --hard
git checkout $BRANCH
git pull
cd ..

  • A scriptet abból a mappából kell kiadni, ahová klónoztuk a repositorykat.
  • A BRANCH értékének a checkoutolni kívánt branch nevét kell megadni. amennyiben egy sh fájlba mentjük ezt a scriptet (Pl.: checkout-all-repo.sh), úgy a branch nevét argumentumként adhatjuk meg. (Pl.: ./checkout-all.sh develop)

Fontos

Windowsos rendszer esetén Git Bashből futtassuk a scriptet!

Ugyanazon branch checkoutolása és buildelése minden repositoryban

Az alábbi scriptet tudjuk használni, hogy 1 lépésben checkoutoljuk és buildeljük ugyanazt a branchet minden repositoryból:

#!/bin/sh

   BRANCH=$1

   # Function to log messages with a prefix
   log_with_prefix() {
       local prefix="$1"    # Custom prefix
       shift                # Shift arguments so that $@ contains the message
       echo "[$prefix] $@"
   }

   #Define repository scripts

   api_script() {
       {
    set -e
    cd api
    git fetch
    git reset --hard
    git checkout $BRANCH
    git pull
    cd ..
       } 2>&1 | while IFS= read -r line; do
           log_with_prefix "API" "$line"
       done
   }

   backend_script() {
       {
    set -e
    cd backend
    git fetch
    git reset --hard
    git checkout $BRANCH
    git pull
    ./mvnw clean install -DskipTests
    cd ..
       } 2>&1 | while IFS= read -r line; do
           log_with_prefix "BACKEND" "$line"
       done
   }

   frontend_script() {
       {
    set -e
    cd frontend
    git fetch
    git reset --hard
    git checkout $BRANCH
    git pull
    npm run generate:api
    cd ..
       } 2>&1 | while IFS= read -r line; do
           log_with_prefix "FRONTEND" "$line"
       done
   }

   python_script() {
       {
    set -e
    cd python-service
    git fetch
    git reset --hard
    git checkout $BRANCH
    git pull
    source ~/anaconda3/etc/profile.d/conda.sh
    CONDA_BASE=$(conda info --base)
    CURRENT_SHELL=$(basename "$SHELL")
    conda init $CURRENT_SHELL
    conda activate pythonservice
    python -m piptools compile
    python -m piptools sync requirements.txt requirements-dev.txt
    ./codegen.sh
    cd ..
       } 2>&1 | while IFS= read -r line; do
           log_with_prefix "PYTHON" "$line"
       done
   }


   # Run scripts

   (api_script) &
   apiCheckoutPid=$!
   wait $apiCheckoutPid
   apiExitCode=$?

   (backend_script) &
   backendCheckoutPid=$!

   (python_script) &
   pythonCheckoutPid=$!

   (frontend_script) &
   frontendCheckoutPid=$!


   # Wait scripts exit code

   wait $backendCheckoutPid
   backendExitCode=$?

   wait $frontendCheckoutPid
   frontendExitCode=$?

   wait $pythonCheckoutPid
   pythonExitCode=$?


   #Log after execute

   if [ $apiExitCode -ne 0 ]; then
     echo "An error occurred in the api subshell command sequence."
   fi

   if [ $backendExitCode -ne 0 ]; then
     echo "An error occurred in the backend subshell command sequence."
   fi

   if [ $frontendExitCode -ne 0 ]; then
     echo "An error occurred in the frontend subshell command sequence."
   fi

   if [ $pythonExitCode -ne 0 ]; then
     echo "An error occurred in the python subshell command sequence."
   fi

   if [ $apiExitCode -eq 0 ] && [ $backendExitCode -eq 0 ] && [ $frontendExitCode -eq 0 ] && [ $pythonExitCode -eq 0 ]; then
     echo "All commands in the subshell completed successfully."
   fi

  • A scriptet abból a mappából kell kiadni, ahová klónoztuk a repositorykat.
  • A BRANCH értékének a checkoutolni kívánt branch nevét kell megadni. amennyiben egy sh fájlba mentjük ezt a scriptet (Pl.: checkout-all-repo-and-build.sh), úgy a branch nevét argumentumként adhatjuk meg. (Pl.: ./checkout-all-repo-and-build.sh develop)

Fontos

Windowsos rendszer esetén Git Bashből futtassuk a scriptet!

Ugyanazon branch checkoutolása minden repositoryban IntelliJ-vel

  1. Az IntelliJ menüsorból válasszuk a View -> Tool Windows -> Git menüpontot.
  2. Az így alul megnyíló Git ablakban, bal oldalt nyissuk le a Remote opciót.
  3. Az így megjelenő branchek mellett zárójelben láthatjuk, hogy mely projekteken létezik ugyanilyen néven branch. Pl.: (backend, backend-service/src/main/resources/api).

    IntelliJCheckoutAllRepository

  4. Ezt követően ha a megfelelő branch-re jobb egérgombbal kattintunk, majd kiválasztjuk a Checkout opciót, akkor minden zárójelben felsorolt projektből checkoutolja az IntelliJ a kiválasztott branchet.

3. Projekt/projektek importálása

Az IntelliJ-be ezt a leírást követve importálhatjuk a projektet/projekteket.

3.1 JDK telepítése és beállítása

A projekt importálását követően az IntelliJ-ben le tudjuk tölteni a fejlesztéshez szükséges JDK-t.

  1. Nyissuk meg a File -> Project Structure… menüpontot.
  2. A baloldali listából válasszuk ki a Project Settings -> Project menüpontot.
  3. Az SDK legördülő menüben válasszuk ki a Download JDK opciót.
  4. A felugró ablakban válasszuk ki a 21-es verziót, vendorként pedig az Amazon Corretto-t, majd kattintsunk a Download gombra.
  5. A Language level legördülő menüben válasszuk ki a 21-es verziót.
  6. Mentést követően megtörténhet a JAVA_HOME környezeti változó beállítása. A letöltött JDK pontos elérési útvonalát a File -> Project Structure -> Platform Settings -> SDKs menüpont alatt láthatjuk.

4. A projekt build-elése

4.1 A backend projekt build-elése

Fontos

Mindig légy meggyőződve arról, hogy a megfelelő branchen áll-e az api repository.

Például ha módosítottuk az openapi.yml-ben valamelyik DTO-t, akkor valószínűleg azt szeretnénk ha az új DTO-t használná a backend projekt. Ezért álljunk rá az api repositoryban a módosítást tartalmazó branchre (Fontos, hogy legyen up-to-date, amihez használjuk a git pull-t).

Az alábbi parancsot a backend projekt főkönyvtárából kell kiadni parancssorból:

./mvnw clean package -DskipTests=true

Buildelés IntelliJ-ből

Természetesen a parancssoros buildelés helyett használható az IntelliJ felület is, de amennyiben valamilyen fordítási anomáliát tapasztalsz, akkor mindig érdemes paranccsorból is ellenőrizni, hogy fordul-e az alkalmazás.

Reload all maven projects gomb

Kattints rá az alábbi gombra jobb oldalt a Maven fülön:

ProjectSettings

A generated-sources beállítása

Amennyiben a projekten egyes Java objektumot a build során generálunk előfordulhat, hogy az IntelliJ még a build után is azt jelzi, hogy nem található/nem létezik az adott objektum.

Ilyen esetben ahhoz, hogy a generált fájlokat is megtalálja source-ként az IntelliJ, hajtsuk végre a következő lépéseket:

  1. Kattintsunk jobb egérgombbal a backend projektre a projekt nézetben.
  2. Válasszuk ki a listából a maven-t.
  3. Kattintsunk a Generate Sources and Update Folders parancsra.

Előfordulhat, hogy ezt követően sem fogja az IntelliJ megtalálni az objektumokat. Ekkor célszerű megpróbálni az IntelliJ újraindítását cache-k ürítésével. Ehhez válasszuk az IntelliJ menüsorából a File -> Invalidate Caches… menüpontot, majd a felugró ablakban pipáljunk be minden opciót és kattintsunk az Invalidate and Restart gombra. Az újraindítás után próbálkozzunk ismét a Generate Sources and Update Folders paranccsal.

Amennyiben ennek hatására sem oldódik meg a probléma, állítsuk be manuálisan a generált fájlokat source fájlokként. Ennek lépései:

  1. Kattintsunk jobb egérgombbal a backend projektre a projekt nézetben.
  2. Válasszuk ki a listából az Open Module Settings opciót.
  3. A backend-service modult kiválasztva a target mappa alatt a releváns mappákat jelöljük meg forráskódként a Mark as: Sources opcióval.

GeneratedSources

Buildelés checkstyle validáció nélkül

Fejlesztés közben előfordulhat, hogy szeretnénk az alkalmazást kivételesen checkstyle validáció nélkül buildelni ezt a következő paranccsal tudjuk megtenni:

./mvnw clean package -DskipTests=true -D"checkstyle".skip

5. Adatbázis

5.1 Az adatbázis futtatása

Lokális fejlesztői környezet esetén az adatbázist docker-ben futtattjuk.

Az adatbázis elindításához egyszerűen csak adjuk ki az alábbi parancsot a backend repository infrastructure mappájában:

docker compose up -d

Vector objektum definíciók létrehozása

Miután beállítottuk az adatbázist, semmiképp ne a teszteket futtassuk, hanem az alkalmazást indítsuk el először! Máskülönben rossz sémára fognak létrejönni a vector objektum definíciók.

A docker compose up -d parancs kiadása során felmerülő hibák

Amennyiben a fenti parancs kiadásakor valamilyen hibaüzenetet kapunk, akkor itt találhatunk segítséget.

Fontos

A fenti parancs az infrastructure mappán belüli docker-compose.yml fájlban definiált összes docker image-t elindítja. Így ha már a ClamAV szekcióban egyszer elindítottuk, itt már nem szükséges megtennünk.

Fontos

Az email-ek küldésére és kezelésére MailDevet használunk. Ez szintén el fog indulni a docker compose up -d paranccsal. Ezután a localhost:1080 porton lesz elérhető a szerver. Bővebb információ: MailDev

5.2 Adatbázis beállítása IntelliJ-ben

Az adatbázis típusa

A projekteken változó lehet, hogy milyen adatbázist kell használni. Pl.: DB2, SQL Server stb. A lent leírt lépéseket természetesen projekt specifikusan, a projekten használt adatbázis fajtáját figyelembe véve kell elvégezni.

Database fül jobb oldalt -> '+' gomb -> Data Source -> PostgreSQL

DB_IntelliJ_Config

A megnyíló Data Sources and Drivers képernyőn a General lapon következő értékeket kell beállítani:

  • Host: localhost
  • Port: 5432
  • User: postgres
  • Password: Asdf1234
  • Database: postgres

Read-only mód beállítása

Fontos, hogy biztosan ne hajtsunk végre módosításokat olyan adatbázisban amibe nem szabad kézzel belenyúlnunk (UAT/PROD). Amennyiben szükséges ilyen adatbázishoz kapcsolódni IntelliJ-ből, azt mindenképp Read-only módban tegyük.

Ezt az alábbi módon tehetjük meg:

  1. A Data Sources and Drivers képernyőn kattintsunk az Options lapra.
  2. A Connection szekcióban pipáljuk be a Read-only opciót.
  3. Amikor végeztünk az adatbáziskapcsolat konfigurációjával kattintsunk az Apply majd az OK gombra.

Csatlakozás Remote adatbázishoz - SSH tunnel-en keresztül

Amennyiben szeretnénk valamilyen remote adatbázishoz csatlakozni, például az AWS DEV környezet adatbázisához, használjuk az SSH Tunnel funkciót. Ezt az alábbi módon tudjuk bekonfigurálni IntelliJ-ből:

  1. Database fül jobb oldalt -> '+' gomb -> Data Source -> PostgreSQL
  2. A megnyíló Data Sources and Drivers képernyőn a General lapon következő értékeket kell beállítani:

    • Host: localhost
    • Port: 5432
    • User: postgres
    • Password: A remote adatbázis postgres felhasználójának jelszavát kell itt megadni.
    • Database: postgres
  3. Ezután az SSH/SSL képernyőn pipáljuk be a Use SSH tunnel opciót és az SSH configuration sorban kattintsunk a jobb szélen található ikonra:

    DB_IntelliJ_DB_SSH_SSL

  4. A megnyíló SSH Configurations képernyőn állítsuk be az alábbiakat:

    • Host: A remote adatbázis gép IPv4-es címét kell itt megadni.
    • Port: 22
    • Username: Az SSH felhasználónk nevét kell itt megadni.
    • Authentication type: A legördülő menüben a Key pair opciót válasszuk.
    • Private key file: Mezőben adjuk meg az SSH-hoz használt privátkulcsunk elérési útvonalát.

    DB_IntelliJ_SSH_Configurations

  5. Végezetül kattintsunk az SSH Configurations képernyő alján található Apply majd OK gombokra.

  6. Ha mindent jól csináltunk, akkor a Data Sources and Drivers képernyőn a General lapon a Test connection gombra nyomva az alábbi üzenetet kell kapnunk:

    DB_IntelliJ_SSH_Tunnel_Test

Az adatbázisok jelölése színekkel

Amennyiben több adatbázis kapcsolatot is beállítunk az IntelliJ-ben, hasznos funkció, hogy színeket rendelhetünk az egyes adatbázisokhoz. Pl.: lokális adatbázis: zöld, DEV adatbázis: narancssárga UAT adatbázis: piros.

Ennek köszönhetően a Database fülön belül mindig a kiválasztott színnel lesznek jelölve az adott adatbázishoz tartozó adatbázis objektumok, illetve az adatbázishoz nyitott Query console-ok fejléce is. Ezáltal pedig magabiztosabbak lehetünk, hogy biztosan abban az adatbázisban hajtunk-e végre módosításokat amelyikben gondoljuk.

Az adatbázis beállítása során, a Name input mező jobb sarkában található kör ikonra kattintva rendelhetünk színeket az adatbázishoz:

DBColors

Download missing driver files figyelmeztető üzenet esetén

Amennyiben a lenti képen található üzenetet látjuk az adatbázis beállítása során, egyszerűen kattintsunk az üzenetben található Download linkre.

DownloadDriver

6. ClamAV

A projektek többségében előbb utóbb funkcionális követelmény lesz a fájlok fel-, illetve letöltésének lehetősége.

A kliens által feltöltött fájlokat minden esetben vírusellenőrzésnek kell alávetni.

Ehhez a ClamAV-ot használjuk amit az adatbázishoz hasonlóan lokálisan szintén docker-rel futtatunk.

Az ClamAV elindításához egyszerűen csak adjuk ki az alábbi parancsot a backend repository infrastructure mappájában:

docker compose up -d

A docker compose up -d parancs kiadása során felmerülő hibák

Amennyiben a fenti parancs kiadásakor valamilyen hibaüzenetet kapunk, akkor itt találhatunk segítséget.

Fontos

A fenti parancs az infrastructure mappán belüli docker-compose.yml fájlban definiált összes docker image-t elindítja. Így ha már az Adatbázis szekcióban egyszer elindítottuk, itt már nem szükséges megtennünk.

Fontos

Az email-ek küldésére és kezelésére MailDevet használunk. Ez szintén el fog indulni a docker compose up -d paranccsal. Ezután a localhost:1080 porton lesz elérhető a szerver. Bővebb információ: MailDev

Vírusnak látszó fájlok

A vírusellenőrzés teszteléséhez úgynevezett EICAR fájlt használunk a projekten amit a vírusírtó kártékony fájlként azonosít ezért karanténba helyez: malicius_test_file.txt

Ezt a fájlt nyugodtan adjuk hozzá a vírusirtó kivételeihez, nem okoz kárt a rendszerben.
Az EICAR-ról részletesebben olvashatsz itt.

7. Az IntelliJ IDEA beállításai

IntelliJ Cache eldobása

A lenti lépések végrehajtása során előfordulhat, hogy látszólag nem lép érvényre egy beállítás. Ez az esetek nagy százalékában amiatt történik, mert az IntelliJ becachelt valami korábbi konfigurációt. Épp ezért mielőtt bármi mást próbálnánk, első lépésként használjuk az „Invalidate Caches and Restart“ funkciót:

  1. Az IntelliJ menüsorából válasszuk a File -> Invalidate Caches… menüpontot.
  2. A felugró Invalidate Caches ablakban, az Optional szekcióban pipáljunk be mindent, majd kattintsunk az Invalidate and Restart gombra.

7.1 Checkstyle és Code Style

Checkstyle és Code Style hibák kezelése

Amennyiben a lokális build, vagy a CI futása során Checkstyle vagy Code Style specifikus hibával szembesülünk, akkor az érintett fájlokat az IntelliJ „Reformat Code“ funkcióját használva tudjuk formázni:

  1. Jobb egérgombbal kattintsunk a formázni kívánt fájlra, vagy arra a mappára amiben az összes fájlt szeretnénk formázni.
  2. Kattintsunk a Reformat Code opcióra.

7.1.1 Intuitech intellij_codestyle.xml importálása

  1. Navigáljunk az IntelliJ IDEA code style XML menüpontra:

    File -> Settings -> Editor -> Code Style -> Fogaskerék -> Import Scheme -> IntelliJ IDEA code style XML

    IntelliJ IDEA -> Settings -> Editor -> Code Style -> Fogaskerék -> Import Scheme -> IntelliJ IDEA code style XML

    CodeStyleConfig

  2. A build-tools/codestyle/ mappában található a intellij_codestyle.xml konfiguráció amit be kell tölteni.

  3. A felugró Import Scheme ablakban a To mezőben adjuk meg milyen néven szeretnénk importálni a code style sémát, majd kattintsunk az OK gombra.

    ImportScheme

  4. Ellenőrizzük a Settings->Code Style menüpontban, hogy az Enable EditorConfig Support ne legyen bepipálva!
    EditorConfig

7.1.2 Intuitech inspections.xml importálása

Alapértelmezetten nem jelzi az IDEA a Code Style hibákat. Az ehhez szükséges konfigurációt importáljuk be az alábbi lépésekkel:

  1. Navigáljunk az Import Profile... menüpontra:

    File -> Settings -> Editor -> Inspections -> Fogaskerék -> Import Profile...

    IntelliJ IDEA-> Settings -> Editor -> Inspections -> Fogaskerék -> Import Profile...

  2. A build-tools/codestyle/ mappában található a inspections.xml konfiguráció amit be kell tölteni.

7.1.3 Intuitech checkstyle.xml importálása és értesítések bekapcsolása

Be kell állítani az IDE-t, hogy szóljon hangosan, ha probléma van.

  1. Elősször is IntelliJ-ben le kell tölteni a CheckStyle plugint.
  2. Navigáljunk a Checkstyle menüpontra:

    File -> Settings -> Tools -> Checkstyle

    IntelliJ IDEA -> Settings -> Tools -> Checkstyle

  3. A Checkstyle version legördülő menüben válasszuk ki a legfrissebb elérhető verziót.

  4. A Configuration File szekcióban meg kell nyomni a + gombot oldalt és hozzáadni a build-tools/checkstyle mappából a checkstyle.xml-t. CheckStyleNotificationConfig

7.1.4 Method arrangement módosítása

Töröljük ki az IntelliJ statikus metódusokra vonatkozó arrangement szabályt:

  1. Navigáljunk a Java/Code Style menüpontra:

    File -> Settings -> Editor -> Code Style -> Java

    IntelliJ IDEA -> Settings -> Editor -> Code Style -> Java

  2. Válasszuk ki az Arrangement tabot, és keressük meg a method static sort.

  3. Kattintsunk rá, majd nyomjuk meg Del gombot.
  4. Végül kattintsunk az Apply, majd az OK gombra. MethodArrangement

7.1.5 Sor végi karakterek konfigurálása

Fontos

Windows operációs rendszer esetén a line ending-et is be kell állítani:

  1. File -> Settings -> Editor -> Code Style alatt a Line separator-t állítsd Unix and macOS (\n)-re.
  2. Amennyiben a Git konfigurálása lépésben nem tettük volna meg, akkor adjuk ki az alábbi parancsot:
    git config --global core.autocrlf input
    

7.2 Autobuild beállítása

File -> Settings -> Build, Excecution, Deployment -> Compiler menüpontban a BUILD PROJECT AUTOMATICALLY beállítás legyen bepipálva.

IntelliJ IDEA -> Settings -> Build, Excecution, Deployment -> Compiler menüpontban a BUILD PROJECT AUTOMATICALLY beállítás legyen bepipálva.

7.3 Heap méret beállítások

Amennyiben korábban még nem tettük meg az itt található IntelliJ memória beállításokat is hajtsuk végre.

Fordítási / alkalmazás indítási idő lassulás kezelése

A memóriabeállítások mellett célszerű észbentartani, hogy amennyiben a megfelelő memóriabeállítások ellenére is lassulásokat tapasztalunk a fordítás és/vagy alkalmazás indítás során, akkor az itt található lépéseket célszerű lehet végrehajtani.

7.4 A *.properties fájlok encodings beállítása

  1. Nyissuk meg a File -> Settings menüpontot.

    Nyissuk meg a IntelliJ IDEA -> Settings menüpontot.

  2. A megnyíló ablakban bal oldalt válasszuk ki az Editor -> File Encodings opciót.

  3. Keressük meg a Properties files (*.properties) szekciót.
  4. A Default encoding for properties files beállításnál válasszuk ki az UTF-8-at. PropertiesEncoding
  5. Végül kattintsunk az Apply, majd az OK gombra.

7.5 Mjml plugin letöltése

A plugin a notification template-ek létrehozásánál lehet hasznos.

  1. Nyissuk meg a File -> Settings menüpontot.

    Nyissuk meg a IntelliJ IDEA -> Settings menüpontot.

  2. A megnyíló ablakban bal oldalt válasszuk ki a Plugins opciót.

  3. Fent válasszuk ki a Marketplace fület.
  4. A keresőbe írjuk be: MJML Support.
  5. Telepítés után szükséges újraindítani az IntelliJ-t.

Az MJML Support plugin-nal láthatjuk, hogy fog kinézni az email desktop, illetve mobil nézetben, valamint megnézhetjük a generált html-t is. MJMLSupportPlugin A dinamikus paraméterek ebben a nézetben nem jelennek meg, ezért előfordulhatnak üres helyek az emailben.

7.6 Alapértelmezett terminál beállítása

Windows operációs rendszer esetén állítsuk be, hogy az IntelliJ-ben nyitott terminálok Git Bash-es terminálok legyenek.

  1. Navigáljunk az Terminal menüpontra: File -> Settings -> Tools -> Terminal
  2. Az Application Settings szekció alatti Shell path legördülő menüből válasszik ki a telepített Git Bash elérési útvonalát. DefaultTerminal
  3. Ezt követően ha a Terminal tetején a “+“ ikonra kattintunk, akkor az újonnan nyílt terminál már Git Bash-es terminál lesz.

7.7 Commit checkstyle ellenőrzés

Javasolt minden commit előtt a Checkstyle ellenőrzéseket futtatni. Az automatikus futtatáshoz kapcsoljuk be a Git ablakban található beállításoknál a Scan with Checkstyle opciót. CommitCheckstyle

8. Lombok

A projekten a boiler plate kódok limitálása érdekében Lombok -ot használunk.

8.1 Lombok plugin telepítése

A Lombok plugin a 2020.3-as verziótól automatikusan települ az IntelliJ-vel így nem szükséges kézzel telepíteni.

8.2 Lombok konfiguráció

A File -> Settings -> Build, Excecution, Deployment -> Compiler -> Annotation Processors menüpont alatt az Enable annotation processing beállítást pipáljuk be.

A IntelliJ IDEA -> Settings -> Build, Excecution, Deployment -> Compiler -> Annotation Processors menüpont alatt az Enable annotation processing beállítást pipáljuk be.

Gyakori probléma

Ha a következő hibával találkozol:

You aren't using a compiler supported by lombok, so lombok will not work and has been disabled

Fontos, hogy amennyiben nem jelentkezik nálunk a fent említett hiba, akkor az alábbi beállítást ne végezzük el!

Akkor állítsd be az alábbi értéket:
Settings -> Build, Excecution, Deployment -> Compiler -> Shared build process VM options: -Djps.track.ap.dependencies=false

LombokConfig

9. Az alkalmazás indítása

9.1 Alapértelmezett Run configuration létrehozása

Egy új konfigurációt a Run -> Edit configurations... menüből hozhatunk létre.

A lenti felsorolás 4-es pontjától a következőre kell figyelni!

Amikor megnyílik a felület az Edit configurations... után, akkor a kitöltendő sorok nem biztos, hogy ott lesznek. Ennek megoldásához a jobb oldalt lévő és kékkel kiemelt Modify Options legördülő menüpontra kell kattintani. A listából kell kiválasztani a szükséges menüt. Pl: Add VM options

  1. A bal felső sarokban kattintsunk a + gombra és a legördülő menüből válasszuk ki a Spring Boot opciót.
  2. A Name mezőbe adjuk meg a konfiguráció nevét: app :8080/
  3. A Main class mezőnél tallózzuk ki a main class-t: io.gbsolutions.BackendServiceApplication.
  4. Az Add VM options mezőben adjuk meg az alábbi sort:
    --add-modules java.se --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED
    
  5. Az Active profiles mezőben adjuk meg a dev értéket.
  6. A Shorten command line mezőben válasszuk ki az @argfile (Java 9+) - java @argfile className [args] értéket.
  7. A Working directory mezőnél tallózzuk ki a backend-service mappát. Pl.: C:\Work\Projects\ProjectName\backend\backend-service.
  8. Az Environment variables mezőbe közvetlenül vagy a mező jobb szél található Edit environment variables gomb megnyomásával adjuk meg az OpenAI API kulcsát: project_openai_access-token=MEGSZERZETT_API_TOKEN.
    Az OpenAI API kulcsát az itt leírtak szerint szerezzük be.
  9. Az OK gombra kattintva adjuk hozzá az új konfigurációt.
  10. Ezt követően az új konfiguráció meg is jelenik a Services ablakban.

DefaultRunConfig

Demó adatok betöltése

Amennyiben szeretnénk, hogy a demo adatok is be legyenek szúrva az adatbázisba az alkalmazás indulásakor, akkor az Active profiles mezőben adjuk meg a demodata értéket is. (Ha egyszerre több profillal indítjuk az alkalmazást, akkor az egyes profilokat neveit ,-vel elválasztva kell az Active profiles mezőben megadni.)

9.2 Speciális Run configuration-ök létrehozása

Az itt leírt speciális konfigurációkat minden esetben a korábban létrehozott app :8080/ konfigurációt felhasználva hozzuk létre.

Ehhez mindig másoljuk le az app :8080/ konfigurációt az alábbi módon:

  1. Nyissuk meg a Run -> Edit configurations... menüpontot.
  2. Bal oldalt válasszuk ki előbb a Spring Boot-ot, majd azon belül válasszuk ki az app :8080/ konfigurációt.
  3. Bal felül kattintsunk a Copy configuration… gombra.

CopyRunConfig

9.2.1 Az app drop db konfiguráció

Amennyiben induláskor szeretnénk eldobni a lokális adatbázisunk tartalmát, akkor ezt a konfigurációt tudjuk használni.

  1. Másoljuk le az app :8080/ konfigurációt.
  2. A másolat Name mezőjében adjuk meg az app drop db értéket.
  3. Az Environment variables mező jobb szélén kattintsunk az Edit environment variables gombra.
  4. A felugró Environment Variables képernyő bal felső sarkában található + gomb segítségével adjuk meg az SPRING_LIQUIBASE_DROP_FIRST változót:
    1. Name : SPRING_LIQUIBASE_DROP_FIRST
    2. Value : true
  5. Végül kattintsunk az Apply majd az OK gombra.

DropDatabaseRunConfig

9.3 A backend alkalmazás indítása

Ahhoz, hogy a backend alkalmazás minden funkcióját az elvártaknak megfelelően tudjuk tesztelni, fontos, hogy a python-service alkalmazás már el legyen indítva a gépünkön.

  1. IntelliJ-ben adjuk hozzá a Services ablakot az alsó eszközsávhoz. Kétféleképp tehető meg:

    • Menüből: View -> Tool Windows -> Services
    • Billentyű kombinációval: Alt + 8
  2. Bal oldalt nyissuk le a “+“ jelet.

  3. Kattintusnk a Run Configuration Type-ra és a legördülő menüből válasszuk ki a Spring Boot-ot.
  4. Ezt követően megjelennek a definiált Run Configuration-jeink.
  5. Jobb gombbal kattintsunk a futtatni kívánt configuration-re és válasszunk a Run vagy a Debug opciók közül.
  6. Ezt követően a config-nak megfelelő Spring Boot alkalmazás el fog indulni.

Preferáljuk a Debug módot!

Általában véve inkább Debug módban érdemes elindítani az alkalmazásokat, ugyanis az indítási időt nem befolyásolja, viszont amennyiben szükség van debuggolásra, akkor nem lesz szükségünk egy extra újraindításra csak a Debug mód miatt.

10. Teszt konfiguráció

A tesztek futtatása során is kaphatunk command line is too long hibaüzenetet. Ebben az esetben a megoldás az, hogy létrehozunk egy JUnit Run konfigurációt is az IntelliJ-ben, ahol beállítjuk a megfelelő Shorten command line opciót, amit az alábbi lépsekkel tehetünk meg:

  1. Az IntelliJ menüsorából válasszuk a Run -> Edit configurations… menüpontot.
  2. A felugró Run/Debug Configurations ablakban a bal felső sarokban kattintsunk a + gombra, és a legördülő menüből válasszuk ki a JUnit opciót.
  3. A Name mezőbe adjuk meg a konfiguráció nevét. Pl.: BackendServiceTest.
  4. A Build and run szekcióban:

    1. A -cp kapcsolónál válasszuk ki a backend-service-t.
    2. A legördülő menüből válasszuk ki az All in directory opciót és tőle jobbra tallózzuk is ki a backend/backend-service/src/test/java útvonalat.
  5. Végül a Shorten command line mezőben válasszuk ki az @argfile (Java 9+) opciót. (Amennyiben nem jelenik meg ez a mező, a Modify options linkre kattintva tudjuk hozzáadni.)

    JUnitRunConfiguration

11. A rendszer betanítása

A rendszer betanítása, dokumentum feltöltés és publikálás.

11.1. Bejelentkezés & Navigáció

  • Lépj be az admin oldalra.
  • Navigálj a Tartalommenedzsment menüpontra.
  • Válaszd ki a Dokumentum menedzsment oldalt, ahol láthatod a jelenlegi aktív/nem aktív dokumentumokat.

DocUploadDocumentsList

11.2. Dokumentum Feltöltése

  • Kattints a Dokumentum feltöltés gombra.
  • Tallózd be a betanítani kívánt dokumentumokat (többet is kiválaszthatsz egyszerre).
  • Adj meg minden dokumentumhoz:
  • Lejárati dátum
  • Aktiválási dátum (opcionális)
  • Kategória
  • Szubkategória
  • Kattints a Feltöltés gombra.
  • Sikeres feltöltés után visszakerülsz a dokumentumlistára.

DocUploadDocumentsUpload

11.3. Dokumentumok Feldarabolása (Chunkolás)

  • A dokumentumok feldarabolása automatikusan elindul a fájl feltöltésével.
  • Amennyiben a dokumentum feldarabolása hibára futna, van lehetőség a manuális újraindításra.
  • Az újraindítani kívánt rekordok sorában lévő Eredmények gombra kattints,
    majd Chunkolás eredménye rész alatt a Szerkesztés gombra.
  • Itt kattints a Chunkolás újraindítása gombra.

DocUploadDocumentsReChunk

Kötelező

A dokumentumok feldarabolása kötelező lépés a publikálás előtt.

11.4. Kérdés–válasz párosok létrehozása

  • A dokumentumok sikeres feldarabolása után automatikusan elindul a kérdés–válasz párosok generálása.
  • Amennyiben a kérdés–válasz párosok generálása hibára futna, van lehetőség újak létrehozására.
  • Ehhez az adott rekordok sorában lévő Eredmények gombra kattints, majd Kérdés–válasz generálás gombra.

DocUploadDocumentsRegenerateQ&A

11.5. Dokumentumok Közzététele

  • Kattints a Közzététel indítása gombra, hogy publikáld a kiválasztott dokumentumokat.

DocUploadDocumentsConfirmPublish


Mikor válaszol a dokumentumból a rendszer?

Csak akkor válaszol a rendszer egy dokumentumból, ha egy dokumentum státusza aktiv és az aktuális dátum beleesik a dokumentumhoz beállított időtartományba! Megfelelő kategória választása szintén szükséges a dokumentum feltöltés során.