# Monster Trading Card Game
Created by *Georg Reisinger*
* RestServer von https://github.com/DerGeorg/RESTServer
* MTCG Git Repo https://github.com/DerGeorg/SWE1-MTCG
* JavaDoc online auf: http://mtcg.dergeorg.at
* Postgres Server läuft auf einem Raspberry Pi 4 --> http://postgres.dergeorg.at
    * User Table
        * *Alle User die in MTCG registriert sind*
    * User_cards Table
        * *Alle Cards der User*
    * User_deck Table
        * *Deck der User*
    * Battle Table
        * *Battle Einladungen*
    * Battle_log Table
        * *Nach beendetem battle wird hier das Log gespeichert*
    * Package Table
        * *Alle Packages die die User bekommen können*
    * Card Table
        * *Alle Cards die in dem Spiel verwendet werden*
        * *Typ der Card wird automatisch in Card und Element Typ getrennt*
    * Trading Table
        * *Alle aktiven Trading deals*
## Protokoll
*Um für Testzwecke die DB zu leeren, die Route DELETE /db/all beachten. Setzt die DB zurück und erstellt alle Tabellen neu.*
#### Cards 
* Card Type (z.B. FireSpell) wird zu ElementTyp(Fire) und CardType(Spell) aufgespalten
* Alle Cards sind in der Cards Tabelle gespeichert
* Wenn ein User Cards acquired, dann wird das passende package gelöscht und die Cards in seine user_card Table geschrieben
#### Deck
* Die Deckkarten werden in der Tabelle User_deck gespeichert
* Wird eine Card getradet, die im Deck ist, so wird das Deck des Users zurückgesetzt
* Wird ein Battle begonnen, dann muss der user 4 cards im deck haben.
#### Battle
* Beginnt ein User ein Battle und ist der erste, so wird in der Battle tabelle eine "Einladung" erstellt. 
  Die Einladung besteht aus: **Username, Userdeck, Battleid**
* Beginnt ein 2. User ein Battle, so sieht er das in der Battle Tabelle ein Spiel ohne 2. spieler ist, und kann beitreten.
#### Score & Stats    
* Score zeigt das Ergebnis des letzten spieles an
* Stats zeigt die Ergebnisse aller vergangen Spiele
## API Beschreibung
#### GET
| ROUTE              | BESCHREIBUNG                       | ATTRIBUTE | RETURN                  | HEADER                                               |
|--------------------|------------------------------------|-----------|-------------------------|------------------------------------------------------|
| /cards             | show all acquired cards            | /         | Cards Object            | --header   "Authorization: Basic kienboec-mtcgToken" |
| /deck              | show deck                          | /         | Cards Object            | --header   "Authorization: Basic kienboec-mtcgToken" |
| /deck?format=plain | show deck different representation | /         | Card names Array        | --header   "Authorization: Basic kienboec-mtcgToken" |
| /users/{username}  | get user                           | /         | User Object             | --header   "Authorization: Basic kienboec-mtcgToken" |
| /stats             | get stats about all battles        | /         | All battle Logs         | --header   "Authorization: Basic kienboec-mtcgToken" |
| /score             | get score, about last battle       | /         | Last Battle Log         | --header   "Authorization: Basic kienboec-mtcgToken" |
| /tradings          | get trading deals                  | /         | List TradingDeal Object | --header   "Authorization: Basic kienboec-mtcgToken" |
#### POST
| ROUTE                  | BESCHREIBUNG              | ATTRIBUTE                            | RETURN              | HEADER                                               |
|------------------------|---------------------------|--------------------------------------|---------------------|------------------------------------------------------|
| /users                 | create   user             | Username, Password                   | User Object         | /                                                    |
| /sessions              | login user                | Username, Password                   | login token         | /                                                    |
| /packages              | create package            | [ID, Name, Damage]x5                 | Package Object      | --header   "Authorization: Basic admin-mtcgToken"    |
| /transactions/packages | acquire packages kienboec | /                                    | Package Object      | --header   "Authorization: Basic kienboec-mtcgToken" |
| /battles               | Battle                    | /                                    |  Anweisungen String | --header   "Authorization: Basic kienboec-mtcgToken" |
| /tradings              | create tradingdeal        | Id, CardToTrade, Type, MinimumDamage | TradingDeal Object  | --header   "Authorization: Basic kienboec-mtcgToken" |
| /tradings/{TradeID}    | Do Trade                  | CardID                               | New Card Object     | --header   "Authorization: Basic kienboec-mtcgToken" |
#### PUT
| ROUTE             | BESCHREIBUNG   | ATTRIBUTE        | RETURN       | HEADER                                               |
|-------------------|----------------|------------------|--------------|------------------------------------------------------|
| /deck             | configure deck | [ID, ID, ID, ID] | Cards Object | --header "Authorization:   Basic kienboec-mtcgToken" |
| /users/{username} | /              | Name, Bio, Image | User Object  | --header "Authorization: Basic kienboec-mtcgToken"   |
#### DELETE
| ROUTE               | BESCHREIBUNG        | ATTRIBUTE | RETURN | HEADER                                               |
|---------------------|---------------------|-----------|--------|------------------------------------------------------|
| /tradings/{TradeID} | delete trading deal | /         | /      | --header "Authorization:   Basic kienboec-mtcgToken" |
| /db/all             | Reset DB + Recreate | /         | /      |--header   "Authorization: Basic admin-mtcgToken"     |
## Insomnia Requests
Basierend auf dem [Curl Script]((https://github.com/DerGeorg/SWE1-MTCG/blob/master/curl.bat)) habe ich die Requests in Insomnia erstellt.
[Öffne insomnia.json](https://github.com/DerGeorg/SWE1-MTCG/blob/master/insomnia.json)
## UML
* [UML.png](https://github.com/DerGeorg/SWE1-MTCG/blob/master/UML2021.png)
* [UML.svg](https://github.com/DerGeorg/SWE1-MTCG/blob/master/UML2021.svg)
![UML2021.svg](UML2021.svg)
