Go to file
Marcin Woźniak 2e6f373997
Checkpoint: 5/11
Signed-off-by: Marcin Woźniak <y0rune@aol.com>
2021-01-10 12:45:51 +01:00
buisnesslogic Checkpoint: return all exchanges works 2021-01-07 16:51:35 +01:00
restservice Checkpoint: 5/11 2021-01-10 12:45:51 +01:00
.gitignore Added api service 2020-12-31 13:45:07 +01:00
.gitlab-ci.yml Updated gitlab-ci 2020-12-23 12:56:37 +01:00
gettoken.py gettoken.py, README.md - update 2021-01-06 17:29:18 +01:00
init.sql Database timezone fixed 2020-12-11 16:18:43 +01:00
pom.xml removed unused plugin 2020-10-28 14:30:51 +01:00
README.md gettoken.py, README.md - update 2021-01-06 17:29:18 +01:00
stack.yml Servcice mail 2020-12-20 16:44:30 +01:00

Start aplikacji

Zeby wystartowac aplikacje backendu najpierw nalezy postawic testowa baze danych na naszym komputerze za pomoca dockera. Jesli raz juz go odpalimy przy nastepnym razem bardzo mozliwe, ze wlaczy sie sam. AAby sprawdzic czy docker jesty wystartowany mozna uzyc docker ps

docker-compose -f stack.yml up -d

Następnym krokiem jest odpalenie poniższych komend w terminalu.

cd restservice
mvn spring-boot:run

Token obtaining

Żeby tesotwać API wpełni potrzebny nam jest token który otrzymujemy na podstawie ticketa z systemu autoryzacyjnego CAS. Z tego powodu system autoryzacji działa inaczej niż w "książkowych" restowych aplikacjach i np Postman za nas jej nie dokona. Musimy mu podać już uzyskany token. Aby łatwo go uzyskać odpal skrypt

python gettoken.py

Jeżeli chcesz używać skryptu zmiejaniąc gdzie znajduje się backend wpisz:

python gettoken.py 192.168.0.212

Jeżeli chcesz używać skryptu bez uruchamiania przeglądarki wpisz:

python gettoken.py no-browser

Na koniec w przęglądarce dostaniesz w odpowiedzi token. W samym pliku można zmienić porty aplikacji jeśli to potrzebne.

Profiles

W aplikacji posiadamy dwa profile. dev i prod. Dev używamy do testowania aplikacji lokalnie. Pord służy do stworzenia builda na produkcję. Profil wybieramy w pliku restservice/src/main/resources/application.properties wpisując odpowiednią nazwę

spring.profiles.active=prod

Jeżeli chcemy zmienić jakieś opcję dla pordukcji to robimy to w tym sammym katalogi w pliku application-prod.properties i dla dev analogicznie w application-dev.properties. W paczce dla proda w protpertiesach poufne dane odczytywane są ze zmiennych środowiskowych systemu na którym odpalana jest aplikacja. Ustawić trzeba następujące zmienne:

  • PLANNAPLAN_MYSQL_DB_HOST - host bazy danych np localhost
  • PLANNAPLAN_MYSQL_DB_PORT - port na którym działa baza
  • PLANNAPLAN_MYSQL_DB - nazwa bazy dancyh. W profilu dev jest to np test
  • PLANNAPLAN_MYSQL_DB_USERNAME - nazwa użytkownika bazy
  • PLANNAPLAN_MYSQL_DB_PASSWORD - hasło użytkownika bazy
  • PLANNAPLAN_EMAIL_HOST - host naszego dostawcy maila z którego będziemy wssyłać wiadomości
  • PLANNAPLAN_EMAIL_PORT - port naszego dostawcy maila
  • PLANNAPLAN_EMAIL_USERNAME - login naszego maila
  • PLANNAPLAN_EMAIL_PASSWORD - hasło naszego maila
  • PLANNAPLAN_EMAIL - nasz adres maila
  • PLANNAPLAN_CONSUMER_KEY - nasz klucz do usos api
  • PLANNAPLAN_CONSUMER_SECRET - secret naszego klucza

Należy też pamiętać, że zmienne PLANNAPLAN_CONSUMER_KEY oraz PLANNAPLAN_CONSUMER_SECRET są potrzebne również w profilu dev więc trzeba je dodać w celu tesotowania do zmiennych we własnym systemie

Packaging

Zeby spakowac apke do jara wystarcza dwie komendy zaczynajac z glownego katalogu projektu

mvn clean; mvn install; cd restservice; mvn clean package spring-boot:repackage

Utworzony zostanie jar w restservice/target/restservice-1.0-SNAPSHOT.jar. Oczywiscie zeby jar zadzialal kontenery dockerowe musza byc odpalone (lub baza danych na serwerze jesli zmienialismy propertisy z localhost)

Generowanie dokumentacji

Javadocs

mvn javadoc:javadoc

Api docs

Żeby zobaczyć dokumentację api trzeba wejść w przeglądarce na http://localhost:1285/swagger-ui.html po odpaleniu aplikacji.

Nazewnictwo odpowiedzi

Każdą odpowiedź zaczynamy od modelu, który opisuje np. Courses a kończymy na Response. Między tymi dwoma członami możemy dodawać modyfikatory opisujące dokładniej odpowiedź np. Default. W ten sposób możemy otrzymać nazwę CoursesDefaultResponse.java

Troubleshooting

Spring chyba cacheuje jakies dane dotyczace polaczenia wiec jesli spring wywali Ci blad Connection Refused, a wiesz, ze ta baza stoi na podanym ip i porcie to sprobuj

mvn clean
mvn install

Jeżeli używasz VSCode i testy, które wymagają podanych zmiennych środowiskowych (testy odpytywania usos api) trzeba podać te zmienne w pliku .vscode/settings.json

{
    "files.exclude": {
        "**/.classpath": true,
        "**/.project": true,
        "**/.settings": true,
        "**/.factorypath": true
    },
    "java.configuration.updateBuildConfiguration": "disabled",
    "java.format.settings.url": "eclipse-formatter.xml",
    "java.test.config": [
        {
            "name": "myConfiguration",
            "workingDirectory": "${workspaceFolder}",
            "env": {
                "PLANNAPLAN_CONSUMER_KEY": "value",
                "PLANNAPLAN_CONSUMER_SECRET": "value"
            }
        }
    ]
}