Compare commits

...

14 Commits
dev ... master

26 changed files with 4081 additions and 516 deletions

8
.idea/.gitignore generated vendored
View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../../../../:\Users\georg\OneDrive\FH\SWE\Monster Card Trading Game\code\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

1
.idea/.name generated
View File

@ -1 +0,0 @@
MTCG

14
.idea/compiler.xml generated
View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="MTCG" />
<module name="code" />
</profile>
</annotationProcessing>
</component>
</project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

14
.idea/misc.xml generated
View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_14" default="false" project-jdk-name="15" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

6
.idea/vcs.xml generated
View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />

View File

@ -1,2 +1,78 @@
# SWE1-MTCG
Monster Trading at.reisinger.obj.Card Game
# 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)

BIN
UML2021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 MiB

3405
UML2021.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 251 KiB

276
curl.bat Normal file
View File

@ -0,0 +1,276 @@
@echo off
REM --------------------------------------------------
REM Monster Trading Cards Game
REM --------------------------------------------------
title Monster Trading Cards Game
echo CURL Testing for Monster Trading Cards Game
echo.
REM --------------------------------------------------
echo 1) Create Users (Registration)
REM Create User
curl -X POST http://localhost:10001/users --header "Content-Type: application/json" -d "{\"Username\":\"kienboec\", \"Password\":\"daniel\"}"
echo.
curl -X POST http://localhost:10001/users --header "Content-Type: application/json" -d "{\"Username\":\"altenhof\", \"Password\":\"markus\"}"
echo.
curl -X POST http://localhost:10001/users --header "Content-Type: application/json" -d "{\"Username\":\"admin\", \"Password\":\"istrator\"}"
echo.
echo should fail:
curl -X POST http://localhost:10001/users --header "Content-Type: application/json" -d "{\"Username\":\"kienboec\", \"Password\":\"daniel\"}"
echo.
curl -X POST http://localhost:10001/users --header "Content-Type: application/json" -d "{\"Username\":\"kienboec\", \"Password\":\"different\"}"
echo.
echo.
REM --------------------------------------------------
echo 2) Login Users
curl -X POST http://localhost:10001/sessions --header "Content-Type: application/json" -d "{\"Username\":\"kienboec\", \"Password\":\"daniel\"}"
echo.
curl -X POST http://localhost:10001/sessions --header "Content-Type: application/json" -d "{\"Username\":\"altenhof\", \"Password\":\"markus\"}"
echo.
curl -X POST http://localhost:10001/sessions --header "Content-Type: application/json" -d "{\"Username\":\"admin\", \"Password\":\"istrator\"}"
echo.
echo should fail:
curl -X POST http://localhost:10001/sessions --header "Content-Type: application/json" -d "{\"Username\":\"kienboec\", \"Password\":\"different\"}"
echo.
echo.
REM --------------------------------------------------
echo 3) create packages (done by "admin")
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"845f0dc7-37d0-426e-994e-43fc3ac83c08\", \"Name\":\"WaterGoblin\", \"Damage\": 10.0}, {\"Id\":\"99f8f8dc-e25e-4a95-aa2c-782823f36e2a\", \"Name\":\"Dragon\", \"Damage\": 50.0}, {\"Id\":\"e85e3976-7c86-4d06-9a10001-641c2019a79f\", \"Name\":\"WaterSpell\", \"Damage\": 20.0}, {\"Id\":\"1cb6ab86-bdb2-47e5-b6e4-68c5ab389334\", \"Name\":\"Ork\", \"Damage\": 45.0}, {\"Id\":\"dfdd758f-649c-40f9-ba3a-8657f4b3439f\", \"Name\":\"FireSpell\", \"Damage\": 25.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"644100018c2-f87a-4600-b313-122b02322fd5\", \"Name\":\"WaterGoblin\", \"Damage\": 9.0}, {\"Id\":\"4a2757d6-b1c3-47ac-b9a3-91deab093531\", \"Name\":\"Dragon\", \"Damage\": 55.0}, {\"Id\":\"91a6471b-1426-43f6-ad65-6fc473e16f9f\", \"Name\":\"WaterSpell\", \"Damage\": 21.0}, {\"Id\":\"4ec8b269-0dfa-4f97-100019a-2c63fe2a0025\", \"Name\":\"Ork\", \"Damage\": 55.0}, {\"Id\":\"f1000143c23-1534-4487-b66b-238e0c3c39b5\", \"Name\":\"WaterSpell\", \"Damage\": 23.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"b017ee50-1c14-44e2-bfd6-2c0c5653a37c\", \"Name\":\"WaterGoblin\", \"Damage\": 11.0}, {\"Id\":\"d04b736a-e874-4137-b191-638e0ff3b4e7\", \"Name\":\"Dragon\", \"Damage\": 70.0}, {\"Id\":\"88221cfe-1f84-41b9-8152-8e36c6a354de\", \"Name\":\"WaterSpell\", \"Damage\": 22.0}, {\"Id\":\"1d3f175b-c067-4359-989d-96562bfa382c\", \"Name\":\"Ork\", \"Damage\": 40.0}, {\"Id\":\"171f6076-4eb5-4a7d-b3f2-2d650cc3d237\", \"Name\":\"RegularSpell\", \"Damage\": 28.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"ed1dc1bc-f0aa-4a0c-8d43-1402189b33c8\", \"Name\":\"WaterGoblin\", \"Damage\": 10.0}, {\"Id\":\"65ff5f23-1e70-4b79-b3bd-f6eb679dd3b5\", \"Name\":\"Dragon\", \"Damage\": 50.0}, {\"Id\":\"55ef46c4-016c-4168-bc43-6b9b1e86414f\", \"Name\":\"WaterSpell\", \"Damage\": 20.0}, {\"Id\":\"f3fad0f2-a1af-45df-b10001d-2e48825773d9\", \"Name\":\"Ork\", \"Damage\": 45.0}, {\"Id\":\"8c20639d-6400-4534-bd0f-ae563f11f57a\", \"Name\":\"WaterSpell\", \"Damage\": 25.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"d7d0cb94-2cbf-4f97-8ccf-9933dc5354b8\", \"Name\":\"WaterGoblin\", \"Damage\": 9.0}, {\"Id\":\"44c82fbc-ef6d-44ab-8c7a-9fb19a0e7c6e\", \"Name\":\"Dragon\", \"Damage\": 55.0}, {\"Id\":\"2c98cd06-518b-464c-b911-8d787216cddd\", \"Name\":\"WaterSpell\", \"Damage\": 21.0}, {\"Id\":\"951e886a-0fbf-425d-8df5-af2ee4830d85\", \"Name\":\"Ork\", \"Damage\": 55.0}, {\"Id\":\"dcd93250-25a7-4dca-85da-cad2789f7198\", \"Name\":\"FireSpell\", \"Damage\": 23.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"b2237eca-0271-43bd-87f6-b22f70d42ca4\", \"Name\":\"WaterGoblin\", \"Damage\": 11.0}, {\"Id\":\"9e8238a4-8a7a-487f-9f7d-a8c97899eb48\", \"Name\":\"Dragon\", \"Damage\": 70.0}, {\"Id\":\"d60e23cf-2238-4d49-844f-c7589ee5342e\", \"Name\":\"WaterSpell\", \"Damage\": 22.0}, {\"Id\":\"fc305a7a-36f7-4d30-ad27-462ca0445649\", \"Name\":\"Ork\", \"Damage\": 40.0}, {\"Id\":\"84d276ee-21ec-4171-a509-c1b88162831c\", \"Name\":\"RegularSpell\", \"Damage\": 28.0}]"
echo.
echo.
REM --------------------------------------------------
echo 4) acquire packages kienboec
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d ""
echo.
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d ""
echo.
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d ""
echo.
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d ""
echo.
echo should fail (no money):
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d ""
echo.
echo.
REM --------------------------------------------------
echo 5) acquire packages altenhof
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
echo should fail (no package):
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
echo.
REM --------------------------------------------------
echo 6) add new packages
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"67f9048f-99b8-4ae4-b866-d1000108d00c53d\", \"Name\":\"WaterGoblin\", \"Damage\": 10.0}, {\"Id\":\"aa9999a0-734c-49c6-8f4a-651864b14e62\", \"Name\":\"RegularSpell\", \"Damage\": 50.0}, {\"Id\":\"d6e9c720-9b5a-40c7-a6b2-bc34752e3463\", \"Name\":\"Knight\", \"Damage\": 20.0}, {\"Id\":\"02a9c76e-b17d-427f-9240-2dd49b0d3bfd\", \"Name\":\"RegularSpell\", \"Damage\": 45.0}, {\"Id\":\"2508bf5c-20d7-43b4-8c77-bc677decadef\", \"Name\":\"FireElf\", \"Damage\": 25.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"70962948-2bf7-44a9-9ded-8c68eeac7793\", \"Name\":\"WaterGoblin\", \"Damage\": 9.0}, {\"Id\":\"74635fae-8ad3-4295-9139-320ab89c2844\", \"Name\":\"FireSpell\", \"Damage\": 55.0}, {\"Id\":\"ce6bcaee-47e1-4011-a49e-5a4d7d4245f3\", \"Name\":\"Knight\", \"Damage\": 21.0}, {\"Id\":\"a6fde738-c65a-4b10-b400-6fef0fdb28ba\", \"Name\":\"FireSpell\", \"Damage\": 55.0}, {\"Id\":\"a1618f1e-4f4c-4e09-9647-87e16f1edd2d\", \"Name\":\"FireElf\", \"Damage\": 23.0}]"
echo.
curl -X POST http://localhost:10001/packages --header "Content-Type: application/json" --header "Authorization: Basic YWRtaW46aXN0cmF0b3I=" -d "[{\"Id\":\"2272ba48-6662-404d-a9a1-41a9bed316d9\", \"Name\":\"WaterGoblin\", \"Damage\": 11.0}, {\"Id\":\"3871d45b-b630-4a0d-8bc6-a5fc56b6a043\", \"Name\":\"Dragon\", \"Damage\": 70.0}, {\"Id\":\"166c1fd5-4dcb-41a8-91cb-f45dcd57cef3\", \"Name\":\"Knight\", \"Damage\": 22.0}, {\"Id\":\"237dbaef-49e3-4c23-b64b-abf5c087b276\", \"Name\":\"WaterSpell\", \"Damage\": 40.0}, {\"Id\":\"27051a20-8510001-43ff-a473-e986b52f297a\", \"Name\":\"FireElf\", \"Damage\": 28.0}]"
echo.
echo.
REM --------------------------------------------------
echo 7) acquire newly created packages altenhof
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
echo should fail (no money):
curl -X POST http://localhost:10001/transactions/packages --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d ""
echo.
echo.
REM --------------------------------------------------
echo 8) show all acquired cards kienboec
curl -X GET http://localhost:10001/cards --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo should fail (no token)
curl -X GET http://localhost:10001/cards
echo.
echo.
REM --------------------------------------------------
echo 9) show all acquired cards altenhof
curl -X GET http://localhost:10001/cards --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 10) show unconfigured deck
curl -X GET http://localhost:10001/deck --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/deck --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 11) configure deck
curl -X PUT http://localhost:10001/deck --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "[\"845f0dc7-37d0-426e-994e-43fc3ac83c08\", \"99f8f8dc-e25e-4a95-aa2c-782823f36e2a\", \"e85e3976-7c86-4d06-9a10001-641c2019a79f\", \"171f6076-4eb5-4a7d-b3f2-2d650cc3d237\"]"
echo.
curl -X GET http://localhost:10001/deck --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X PUT http://localhost:10001/deck --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "[\"aa9999a0-734c-49c6-8f4a-651864b14e62\", \"d6e9c720-9b5a-40c7-a6b2-bc34752e3463\", \"d60e23cf-2238-4d49-844f-c7589ee5342e\", \"02a9c76e-b17d-427f-9240-2dd49b0d3bfd\"]"
echo.
curl -X GET http://localhost:10001/deck --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
echo should fail and show original from before:
curl -X PUT http://localhost:10001/deck --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "[\"845f0dc7-37d0-426e-994e-43fc3ac83c08\", \"99f8f8dc-e25e-4a95-aa2c-782823f36e2a\", \"e85e3976-7c86-4d06-9a10001-641c2019a79f\", \"171f6076-4eb5-4a7d-b3f2-2d650cc3d237\"]"
echo.
curl -X GET http://localhost:10001/deck --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
echo should fail ... only 3 cards set
curl -X PUT http://localhost:10001/deck --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "[\"aa9999a0-734c-49c6-8f4a-651864b14e62\", \"d6e9c720-9b5a-40c7-a6b2-bc34752e3463\", \"d60e23cf-2238-4d49-844f-c7589ee5342e\"]"
echo.
REM --------------------------------------------------
echo 12) show configured deck
curl -X GET http://localhost:10001/deck --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/deck --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 13) show configured deck different representation
echo kienboec
curl -X GET http://localhost:10001/deck?format=plain --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo.
echo altenhof
curl -X GET http://localhost:10001/deck?format=plain --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 14) edit user data
echo.
curl -X GET http://localhost:10001/users/kienboec --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/users/altenhof --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
curl -X PUT http://localhost:10001/users/kienboec --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "{\"Name\": \"Kienboeck\", \"Bio\": \"me playin...\", \"Image\": \":-)\"}"
echo.
curl -X PUT http://localhost:10001/users/altenhof --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "{\"Name\": \"Altenhofer\", \"Bio\": \"me codin...\", \"Image\": \":-D\"}"
echo.
curl -X GET http://localhost:10001/users/kienboec --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/users/altenhof --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
echo should fail:
curl -X GET http://localhost:10001/users/altenhof --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/users/kienboec --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
curl -X PUT http://localhost:10001/users/kienboec --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "{\"Name\": \"Hoax\", \"Bio\": \"me playin...\", \"Image\": \":-)\"}"
echo.
curl -X PUT http://localhost:10001/users/altenhof --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "{\"Name\": \"Hoax\", \"Bio\": \"me codin...\", \"Image\": \":-D\"}"
echo.
curl -X GET http://localhost:10001/users/someGuy --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo.
REM --------------------------------------------------
echo 15) stats
curl -X GET http://localhost:10001/stats --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/stats --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 16) scoreboard
curl -X GET http://localhost:10001/score --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo.
REM --------------------------------------------------
echo 17) battle
start /b "kienboec battle" curl -X POST http://localhost:10001/battles --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
start /b "altenhof battle" curl -X POST http://localhost:10001/battles --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
ping localhost -n 10 >NUL 2>NUL
REM --------------------------------------------------
echo 18) Stats
echo kienboec
curl -X GET http://localhost:10001/stats --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo altenhof
curl -X GET http://localhost:10001/stats --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo.
REM --------------------------------------------------
echo 19) scoreboard
curl -X GET http://localhost:10001/score --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo.
REM --------------------------------------------------
echo 20) trade
echo check trading deals
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo create trading deal
curl -X POST http://localhost:10001/tradings --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "{\"Id\": \"6cd85277-4590-49d4-b0cf-ba0a921faad0\", \"CardToTrade\": \"1cb6ab86-bdb2-47e5-b6e4-68c5ab389334\", \"Type\": \"monster\", \"MinimumDamage\": 15}"
echo.
echo check trading deals
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo delete trading deals
curl -X DELETE http://localhost:10001/tradings/6cd85277-4590-49d4-b0cf-ba0a921faad0 --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
echo.
REM --------------------------------------------------
echo 21) check trading deals
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X POST http://localhost:10001/tradings --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "{\"Id\": \"6cd85277-4590-49d4-b0cf-ba0a921faad0\", \"CardToTrade\": \"1cb6ab86-bdb2-47e5-b6e4-68c5ab389334\", \"Type\": \"monster\", \"MinimumDamage\": 15}"
echo check trading deals
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
echo try to trade with yourself (should fail)
curl -X POST http://localhost:10001/tradings/6cd85277-4590-49d4-b0cf-ba0a921faad0 --header "Content-Type: application/json" --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs" -d "\"4ec8b269-0dfa-4f97-100019a-2c63fe2a0025\""
echo.
echo try to trade
echo.
curl -X POST http://localhost:10001/tradings/6cd85277-4590-49d4-b0cf-ba0a921faad0 --header "Content-Type: application/json" --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz" -d "\"951e886a-0fbf-425d-8df5-af2ee4830d85\""
echo.
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic a2llbmJvZWM6ZGFuaWVs"
echo.
curl -X GET http://localhost:10001/tradings --header "Authorization: Basic YWx0ZW5ob2Y6bWFya3Vz"
echo.
REM --------------------------------------------------
echo end...
REM this is approx a sleep
ping localhost -n 100 >NUL 2>NUL
@echo on

1
insomnia.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@ public class Battle {
private final Cards deckPlayer1Init;
private Cards deckPlayer2Init;
private final ArrayList<String> log = new ArrayList<>();
private ArrayList<Card> d1 = new ArrayList<>(), d2 = new ArrayList<>();
/**
* Erstellt ein neues Battle, im zustand offenes battle
@ -44,34 +44,32 @@ public class Battle {
if(deckPlayer1.getCards().size() == 4 && deckPlayer2.getCards().size() == 4) {
//SHUFFLE DECK
ArrayList<Card> d1 = deckPlayer1.getCards();
ArrayList<Card> d2 = deckPlayer2.getCards();
Collections.shuffle(d1);
Collections.shuffle(d2);
deckPlayer1.setCards(d1);
deckPlayer1.setCards(d2);
this.d1 = deckPlayer1.getCards();
this.d2 = deckPlayer2.getCards();
Collections.shuffle(this.d1);
Collections.shuffle(this.d2);
deckPlayer1.setCards(this.d1);
deckPlayer1.setCards(this.d2);
//Runden
int maxroundcount = 100, counter = 0, counter2 = 0;
while(counter<maxroundcount) {
counter++;
counter2++;
if(counter2 < d1.size()-1 || counter2 < d2.size()-1){
if(counter2 < this.d1.size() || counter2 < this.d2.size()){
counter2 = 0;
}
if (d1.size() > 0 && d2.size() > 0 && counter<=maxroundcount) {
if (this.d1.size() > 0 && this.d2.size() > 0 && counter<=maxroundcount) {
System.out.println("Runde: " + counter);
System.out.println("deck 1 size: " + d1.size() + " Deck 2 size: " + d2.size() + " counter2: " + counter2);
Card c1 = d1.get(counter2);
Card c2 = d2.get(counter2);
System.out.println("deck 1 size: " + this.d1.size() + " Deck 2 size: " + this.d2.size() + " counter2: " + counter2);
Card c1 = this.d1.get(counter2);
Card c2 = this.d2.get(counter2);
System.out.println("Card 1: " + c1.getElementTyp() + c1.getCardType() + "\nCard 2: " + c2.getElementTyp() + c2.getCardType());
//GLEICHER TYP Monster
if (!c1.getCardType().name().equalsIgnoreCase("SPELL") && !c2.getCardType().name().equalsIgnoreCase("SPELL")) {
System.out.println("Same Monster");
//Check ob eine der beiden Carten ein Dragon ist
if ((c1.getCardType().name().equalsIgnoreCase("DRANGON") && !c2.getCardType().name().equalsIgnoreCase("DRANGON") || (!c1.getCardType().name().equalsIgnoreCase("DRANGON") && c2.getCardType().name().equalsIgnoreCase("DRANGON")))) {
if ((c1.getCardType().name().equalsIgnoreCase("DRAGON") && !c2.getCardType().name().equalsIgnoreCase("DRAGON") || (!c1.getCardType().name().equalsIgnoreCase("DRAGON") && c2.getCardType().name().equalsIgnoreCase("DRAGON")))) {
//Eine der Karten is Dragon
System.out.println("Eine ist ein dragon");
Card dragon;
int dragonOwner;
if (c1.getCardType().name().equalsIgnoreCase("DRAGON")) {
@ -81,41 +79,35 @@ public class Battle {
dragon = c2;
dragonOwner = 2;
} else {
System.out.println("KEIN DRAGON GEFUNDEN");
return false;
}
if ((c1.getCardType().name().equalsIgnoreCase("GOBLIN") && !c2.getCardType().name().equalsIgnoreCase("GOBLIN") || (!c1.getCardType().name().equalsIgnoreCase("GOBLIN") && c2.getCardType().name().equalsIgnoreCase("GOBLIN")))) {
//Eine der Karten ist Goblin
System.out.println("Andere ist ein goblin");
Card goblin;
if (c1.getCardType().name().equalsIgnoreCase("GOBLIN")) {
goblin = c1;
} else if (c2.getCardType().name().equalsIgnoreCase("GOBLIN")) {
goblin = c2;
} else {
System.out.println("KEIN GOBLIN GEFUNDEN");
return false;
}
if (dragon.getDamage() > goblin.getDamage()) {
//Drache ist stärker
if (dragonOwner == 1) {
d1.add(c2);
d2.remove(c2);
this.d1.add(c2);
this.d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
} else {
d2.add(c1);
d1.remove(c1);
this.d2.add(c1);
this.d1.remove(c1);
this.scorePlayer1 -= 5;
this.scorePlayer2 += 3;
}
log.add("Player " + dragonOwner + " gewinnt!\nDrache ist stärker! Drache: " + dragon.getDamage() + " vs Goblin: " + goblin.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
} else {
System.out.println("DRAW: Drache zu schwach um anzugreifen und GOBLIN zu feige.");
this.log.add("Player " + dragonOwner + " gewinnt!\nDrache ist stärker! Drache: " + dragon.getDamage() + " vs Goblin: " + goblin.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
} else if ((c1.getCardType().name().equalsIgnoreCase("ELF") && c1.getElementTyp().name().equalsIgnoreCase("FIRE") && !c2.getCardType().name().equalsIgnoreCase("ELF") || (!c1.getCardType().name().equalsIgnoreCase("ELF") && c2.getElementTyp().name().equalsIgnoreCase("FIRE") && c2.getCardType().name().equalsIgnoreCase("ELF")))) {
//Eine der Karten ist der Fire Elf die andere Karte ist der drache
System.out.println("Andere ist ein elf");
Card fireelf;
if (dragonOwner == 1) {
fireelf = c2;
@ -126,38 +118,25 @@ public class Battle {
if (fireelf.getDamage() > dragon.getDamage()) {
//Fireelf ist stärker
if (dragonOwner == 1) {
d2.add(c1);
d1.remove(c1);
this.d2.add(c1);
this.d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
} else {
d1.add(c2);
d2.remove(c2);
this.d1.add(c2);
this.d2.remove(c2);
this.scorePlayer2 -= 5;
this.scorePlayer1 += 3;
}
log.add("Player " + dragonOwner + " gewinnt!\nWizzard ist stärker! Drache: " + dragon.getDamage() + " vs FireElves: " + fireelf.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
this.log.add("Player " + dragonOwner + " gewinnt!\nWizzard ist stärker! Drache: " + dragon.getDamage() + " vs FireElves: " + fireelf.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
//Sonst nix tun, weil der drache den elf ned angreifen kann
} else {
if (c1.getDamage() > c2.getDamage()) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
} else if (c1.getDamage() < c2.getDamage()) {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
calculateWinnerMoveCards(c1, c2);
}
//Checkt ob eine der beiden karten ein wizzard ist und der andere ein ork
} else if ((c1.getCardType().name().equalsIgnoreCase("WIZZARD") && c2.getCardType().name().equalsIgnoreCase("ORK") || (c2.getCardType().name().equalsIgnoreCase("WIZZARD") && c1.getCardType().name().equalsIgnoreCase("ORK")))) {
System.out.println("Eine wizzard Andere ist ein ork");
Card wizzard = null;
Card ork = null;
int wizzardOwner = 0;
@ -172,43 +151,30 @@ public class Battle {
}
if (wizzard != null && wizzard.getDamage() > ork.getDamage()) {
if (wizzardOwner == 1) {
d1.add(c2);
d2.remove(c2);
this.d1.add(c2);
this.d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
} else {
d2.add(c1);
d1.remove(c1);
this.d2.add(c1);
this.d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
}
log.add("Player " + wizzardOwner + " gewinnt!\nWizzard ist stärker! Wizzard: " + wizzard.getDamage() + " vs Ork: " + ork.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
this.log.add("Player " + wizzardOwner + " gewinnt!\nWizzard ist stärker! Wizzard: " + wizzard.getDamage() + " vs Ork: " + ork.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
//Sonst nix tun, weil der ork dem wizzard keinen schaden machen kann
} else {
//PURE MONSTER
if (c1.getDamage() > c2.getDamage()) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
} else if (c1.getDamage() < c2.getDamage()) {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
calculateWinnerMoveCards(c1, c2);
//sonst nix weil bei gleichen damage --> draw
}
} else {//PURE SPELL & mixed
double damagePlayer1 = -1, damagePlayer2 = -1;
double damagePlayer1, damagePlayer2;
if (c1.getCardType().name().equalsIgnoreCase("KNIGHT") || c2.getCardType().name().equalsIgnoreCase("KNIGHT")) {
//Mixed mit "Spezialeffekt" KNIGHT
System.out.println("Spell und knight");
Card knight = null, other = null;
int knightOwner = 0;
if (c1.getCardType().name().equalsIgnoreCase("KNIGHT")) {
@ -258,170 +224,38 @@ public class Battle {
}
if (damageKnight > damageOther) {
if (knightOwner == 1) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + damageKnight + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + damageOther + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p1win(c1,c2);
} else {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + damageKnight + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + damageOther + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p2win(c1, c2);
}
} else if (damageKnight < damageOther) {
if (knightOwner == 2) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + damageOther + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + damageKnight + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p1win(c1, c2);
} else {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + damageOther + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + damageKnight + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p2win(c1, c2);
}
}
} else if (c1.getCardType().name().equalsIgnoreCase("KRAKEN") || c2.getCardType().name().equalsIgnoreCase("KRAKEN")) {
//Mixed mit "Spezialeffekt" KRAKEN
if (c1.getCardType().name().equalsIgnoreCase("KRAKEN")) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + " vs " + c2.getElementTyp() + c2.getCardType() + ": 0\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p1win(c1, c2);
} else if (c2.getCardType().name().equalsIgnoreCase("KRAKEN")) {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + " vs " + c1.getElementTyp() + c1.getCardType() + ": 0\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p2win(c1, c2);
}
} else {
////PURE SPELL & mixed mit elementen
System.out.println("Spell und mixed mit elementen");
//Player 1 Damage berechnen
switch (c1.getElementTyp().name().toUpperCase()) {
case "FIRE":
switch (c2.getElementTyp().name().toUpperCase()) {
case "REGULAR":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "WATER":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
case "FIRE":
//no effect
damagePlayer1 = c1.getDamage();
break;
}
break;
case "WATER":
switch (c2.getElementTyp().name().toUpperCase()) {
case "FIRE":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "WATER":
//no effect
damagePlayer1 = c1.getDamage();
break;
case "REGULAR":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
}
break;
case "REGULAR":
switch (c2.getElementTyp().name().toUpperCase()) {
case "WATER":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "FIRE":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
case "REGULAR":
//no effect
damagePlayer1 = c1.getDamage();
break;
}
break;
}
damagePlayer1 = calculateEffectiveness(c1, c2);
//P2 damage
switch (c2.getElementTyp().name().toUpperCase()) {
case "FIRE":
switch (c1.getElementTyp().name().toUpperCase()) {
case "REGULAR":
//effective
damagePlayer2 = c2.getDamage() * 2;
break;
case "WATER":
//not effective
damagePlayer2 = c2.getDamage() / 2;
break;
case "FIRE":
//no effect
damagePlayer2 = c2.getDamage();
break;
}
break;
case "WATER":
switch (c1.getElementTyp().name().toUpperCase()) {
case "FIRE":
//effective
damagePlayer2 = c2.getDamage() * 2;
break;
case "WATER":
//no effect
damagePlayer2 = c2.getDamage();
break;
case "REGULAR":
//not effective
damagePlayer2 = c2.getDamage() / 2;
break;
}
break;
case "REGULAR":
switch (c1.getElementTyp().name().toUpperCase()) {
case "WATER":
//effective
damagePlayer2 = c2.getDamage() * 2;
break;
case "FIRE":
//not effective
damagePlayer2 = c2.getDamage() / 2;
break;
case "REGULAR":
//no effect
damagePlayer2 = c2.getDamage();
break;
}
break;
}
damagePlayer2 = calculateEffectiveness(c2, c1);
if (damagePlayer1 > -1 && damagePlayer2 > -1) {
if (damagePlayer1 > damagePlayer2) {
d1.add(c2);
d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + damagePlayer1 + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + damagePlayer2 + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p1win(c1, c2);
} else if (damagePlayer2 > damagePlayer1) {
d2.add(c1);
d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + damagePlayer2 + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + damagePlayer1 + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
p2win(c1, c2);
}
} else {
System.out.println("Damage konnte nicht berechnet werden");
return false;
}
}
@ -430,63 +264,209 @@ public class Battle {
return true;
}
}
this.deckPlayer1 = new Cards(d1);
this.deckPlayer2 = new Cards(d2);
this.deckPlayer1 = new Cards(this.d1);
this.deckPlayer2 = new Cards(this.d2);
}else{
System.out.println("Einer der Spieler hat zu wenige Karten im Deck");
System.err.println("Einer der Spieler hat zu wenige Karten im Deck");
return false;
}
return true;
}
/**
* Aktion wenn Player 1 gewinnt
* @param c1 Card player 1
* @param c2 Card player 2
*/
private void p1win(Card c1, Card c2){
this.d1.add(c2);
this.d2.remove(c2);
this.scorePlayer1 += 3;
this.scorePlayer2 -= 5;
this.log.add("Player 1 gewinnt!\n" + c1.getElementTyp() + c1.getCardType() + " ist stärker! " + c1.getElementTyp() + c1.getCardType() + ": " + c1.getDamage() + " vs " + c2.getElementTyp() + c2.getCardType() + ": " + c2.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
/**
* Aktion wenn Player 2 gewinnt
* @param c1 Card player 1
* @param c2 Card player 2
*/
private void p2win(Card c1, Card c2){
this.d2.add(c1);
this.d1.remove(c1);
this.scorePlayer2 += 3;
this.scorePlayer1 -= 5;
this.log.add("Player 2 gewinnt!\n" + c2.getElementTyp() + c2.getCardType() + " ist stärker! " + c2.getElementTyp() + c2.getCardType() + ": " + c1.getDamage() + " vs " + c1.getElementTyp() + c1.getCardType() + ": " + c2.getDamage() + "\nPlayer 1 score: " + scorePlayer1 + "\nPlayer 2 score: " + scorePlayer2);
}
/**
* Ermittelt den gewinner der Runde, moved die deck cards und setzt den score
* @param c1 Card p1
* @param c2 Card p2
*/
private void calculateWinnerMoveCards(Card c1, Card c2) {
if (c1.getDamage() > c2.getDamage()) {
p1win(c1, c2);
} else if (c1.getDamage() < c2.getDamage()) {
p2win(c1, c2);
}
}
/**
* Berechnet den Damage der Karten
* @param c1 Card von p1
* @param c2 Card von p2
* @return Damage
*/
private double calculateEffectiveness(Card c1, Card c2){
double damagePlayer1 = 0;
switch (c1.getElementTyp().name().toUpperCase()) {
case "FIRE":
switch (c2.getElementTyp().name().toUpperCase()) {
case "REGULAR":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "WATER":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
case "FIRE":
//no effect
damagePlayer1 = c1.getDamage();
break;
}
break;
case "WATER":
switch (c2.getElementTyp().name().toUpperCase()) {
case "FIRE":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "WATER":
//no effect
damagePlayer1 = c1.getDamage();
break;
case "REGULAR":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
}
break;
case "REGULAR":
switch (c2.getElementTyp().name().toUpperCase()) {
case "WATER":
//effective
damagePlayer1 = c1.getDamage() * 2;
break;
case "FIRE":
//not effective
damagePlayer1 = c1.getDamage() / 2;
break;
case "REGULAR":
//no effect
damagePlayer1 = c1.getDamage();
break;
}
break;
}
return damagePlayer1;
}
/**
* Get the log
* @return Das log als ArrayList
*/
public ArrayList<String> getLog() {
return log;
return this.log;
}
/**
* Get Battle id
* @return battleID
*/
public int getId() {
return id;
}
/**
* Get Player 1 als User
* @return User Obj
*/
public User getPlayer1() {
return player1;
}
/**
* Get Player 2 als User
* @return User Obj
*/
public User getPlayer2() {
return player2;
}
/**
* Set Player 1 als User
* @param player2 User Obj
*/
public void setPlayer2(User player2) {
this.player2 = player2;
}
/**
* Get Score von Player 1
* @return Score von player
*/
public int getScorePlayer1() {
return scorePlayer1;
}
/**
* Get Score von Player 2
* @return Score von player
*/
public int getScorePlayer2() {
return scorePlayer2;
}
/**
* Get Deck Player 1
* @return Deck als Cards von player
*/
public Cards getDeckPlayer1() {
return deckPlayer1;
}
/**
* Get Deck Player 2
* @return Deck als Cards von player
*/
public Cards getDeckPlayer2() {
return deckPlayer2;
}
/**
* Set Deck Player 1
* @param deckPlayer2 Deck als Cards von player
*/
public void setDeckPlayer2(Cards deckPlayer2) {
this.deckPlayer2 = deckPlayer2;
this.deckPlayer2Init = deckPlayer2;
}
/**
* Get starting deck von player 1
* @return Deck wie es zu beginn des Battles war
*/
public Cards getDeckPlayer1Init() {
return deckPlayer1Init;
}
/**
* Get starting deck von player 2
* @return Deck wie es zu beginn des Battles war
*/
public Cards getDeckPlayer2Init() {
return deckPlayer2Init;
}

View File

@ -20,6 +20,7 @@ public class Card {
private ElementTyp elementTyp;
@JsonProperty
private final CardType cardType;
@SuppressWarnings("unused")
@JsonProperty
private boolean locked;
@ -92,15 +93,6 @@ public class Card {
this.cardType = tmpCard;
}
public boolean isLocked() {
return locked;
}
public void setLocked(boolean locked) {
this.locked = locked;
}
/**
* Holt den Namen der at.reisinger.obj.Card
* @return Name der at.reisinger.obj.Card
@ -138,7 +130,7 @@ public class Card {
}
/**
* Setztden namen der at.reisinger.obj.Card
* Setzt den namen der Card
* @param neuerName Name der at.reisinger.obj.Card
*/
@JsonSetter

View File

@ -4,7 +4,7 @@ package at.reisinger.obj;
* Alle coins eines Users
*/
public class Coins {
private int amount;
private final int amount;
/**
* Erstellt ein neues Münzen Obj
@ -21,42 +21,4 @@ public class Coins {
public int getCoinAmount() {
return this.amount;
}
/**
* Fügt münzen hinzu
* @param coins Münzen die hinzugefügt werden -> Positiv
*/
public void addCoin(int coins){
if(coins > 0) {
this.amount += coins;
}
}
/**
* Entfernt münzen
* @param coins Münzen die entfernt werden sollen, muss positiv sein
* @return True wenn erfolgreich
*/
public boolean removeCoin(int coins){
if(coins < 0) {
return false;
}else {
this.amount -= coins;
return true;
}
}
/**
* Ändert den Absoluten Coin amount
* @param coins Neue Coin anzahl, muss positiv sein
* @return true wenn erfolgreich
*/
public boolean changeCoinAmmount(int coins){
if(coins < 0) {
return false;
}else {
this.amount = coins;
return true;
}
}
}

View File

@ -30,6 +30,7 @@ public class TradingDeal {
* @param requiredElementType Req ElementType für den Tausch
* @param requiredMinDamage Req min damage für den Tausch
* @param requiredCardType Req at.reisinger.obj.Card Type für den Tausch
* @param username Username der den Deal erstellt
*/
public TradingDeal(String id, Card cardToTrade, ElementTyp requiredElementType, double requiredMinDamage, CardType requiredCardType, String username) {
this.id = id;
@ -52,6 +53,8 @@ public class TradingDeal {
* @param cardToTrade at.reisinger.obj.Card die getauscht werden soll
* @param type ElementTyp und CardType in einem String. Beide Enums werden durch diesen String gewählt.
* Wird kein passender Typ gefunden, dann bleibt diese Eigenschaft auf null
* @param username Username der den TradingDeal erstellt
* @param requiredMinDamage Required Min Damage
*/
@JsonCreator
public TradingDeal(@JsonProperty("Id") String id, @JsonProperty("CardToTrade") Card cardToTrade, @JsonProperty("MinimumDamage") double requiredMinDamage, @JsonProperty("Type") String type, String username) {

View File

@ -2,52 +2,24 @@ package at.reisinger.obj;
import com.fasterxml.jackson.annotation.*;
import java.util.ArrayList;
/**
* at.reisinger.obj.User & at.reisinger.Store Logik
* User Objekt
*/
@JsonAutoDetect
public class User{
@JsonProperty
private String name, nachname, email, bio, image;
//private DBConnection db;
@JsonProperty
private final Credentials credentials;
@JsonProperty
private final Coins coins;
/*
* Erstellt einen neuen at.reisinger.obj.User
* @param credentials Zugangsdaten des Users
* @param name Name des Users
* @param nachname Nachname des Users
* @param email Email des Users
* @param stack Alle Karten des Users
* @param coins Alle Münzen des Users
@JsonCreator
public User(@JsonProperty Credentials credentials,@JsonProperty String name,@JsonProperty String nachname,@JsonProperty String email,@JsonProperty Stack stack,@JsonProperty Coins coins) {
public User(@JsonProperty Credentials credentials, @JsonProperty String name, @JsonProperty String nachname, @JsonProperty String email, @SuppressWarnings("unused") @JsonProperty Coins coins, @JsonProperty String bio, @JsonProperty String image) {
this.credentials = credentials;
this.name = name;
this.nachname = nachname;
this.email = email;
this.stack = stack;
this.coins = coins;
//this.db = new at.reisinger.server.DBConnection();
}
*/
@JsonCreator
public User(@JsonProperty Credentials credentials,@JsonProperty String name,@JsonProperty String nachname,@JsonProperty String email,@JsonProperty Coins coins, @JsonProperty String bio, @JsonProperty String image) {
this.credentials = credentials;
this.name = name;
this.nachname = nachname;
this.email = email;
//this.stack = null;
this.coins = coins;
this.bio = bio;
this.image = image;
//this.db = new at.reisinger.server.DBConnection();
}
/**
@ -149,15 +121,4 @@ public class User{
this.email = email;
}
//at.reisinger.Store Methoden
/**
* Kauft ein at.reisinger.obj.Package
* @param mypackage at.reisinger.obj.Package welches gekauft werden soll
* @return Alle Karten des neuen at.reisinger.obj.Package
*/
public ArrayList<Card> buyPackage(Package mypackage){
this.coins.removeCoin(mypackage.getPrice());
return mypackage.getCards();
}
}

View File

@ -30,19 +30,22 @@ public class DBConnection {
/**
* Erstellt alle Tabellen die für den Betrieb der Software bennötigt werden
* @return True bei erfolg, sonst error
*/
public void init() {
PostgresHelper.executeUpdateMessage("CREATE TABLE IF NOT EXISTS USERS (username TEXT PRIMARY KEY NOT NULL, nachname TEXT NOT NULL, email TEXT NOT NULL, password TEXT NOT NULL, bio TEXT, image TEXT, coins integer default 20 not null)", "User Table created");
PostgresHelper.executeUpdate("CREATE TABLE IF NOT EXISTS CARD(NAME TEXT not null,DAMAGE FLOAT not null,ELEMENTTYP TEXT not null,CARDTYPE TEXT not null, PRIMARY KEY (\"name\"));");
PostgresHelper.executeUpdateMessage("create unique index IF NOT EXISTS card_name_uindex on CARD (NAME);", "Card Table created");
PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS package(\"ID\" varchar(255) not null,name varchar(255) not null constraint name references card, i serial not null constraint package_i primary key );", "Package Table created");
PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS user_cards(username TEXT not null constraint user_cards_users_username_fk references users,name text not null, gesperrt boolean not null);", "UserCards Table created");
PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS user_deck(username text not null constraint user_deck_users_username_fk references users,cardname text not null);", "UserDeck Table created");
PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS trading(username text not null constraint trading_users_username_fk references users,id text not null constraint trading_pk primary key, cardtotrade text not null constraint trading_card_name_fk references card, mindamage float not null,reqcardtype text not null,reqelement text not null);", "Trading Table created");
PostgresHelper.executeUpdate("create table if not exists battle(usernamecreator text not null constraint battle_users_username_fk references users,usernameplayer text constraint battle_users_username_fk_2 references users, battleid serial, deckcreator text not null);");
PostgresHelper.executeUpdateMessage("create unique index if not exists battle_battleid_uindex on battle (battleid);", "Battle Table created");
PostgresHelper.executeUpdate("create table IF NOT EXISTS battle_log(id int not null constraint battle_log_pk primary key, playerone text not null,playertwo text not null,playeronescore text not null,playertwoscore text not null,log varchar(10485760));");
PostgresHelper.executeUpdateMessage("create unique index IF NOT EXISTS battle_log_id_uindex on battle_log (id);", "Battle_lgo Table created");
public boolean init() {
ArrayList<Boolean> errors = new ArrayList<>();
errors.add(PostgresHelper.executeUpdateMessage("CREATE TABLE IF NOT EXISTS USERS (username TEXT PRIMARY KEY NOT NULL, nachname TEXT NOT NULL, email TEXT NOT NULL, password TEXT NOT NULL, bio TEXT, image TEXT, coins integer default 20 not null)", "User Table created"));
errors.add(PostgresHelper.executeUpdate("CREATE TABLE IF NOT EXISTS CARD(NAME TEXT not null,DAMAGE FLOAT not null,ELEMENTTYP TEXT not null,CARDTYPE TEXT not null, PRIMARY KEY (\"name\"));"));
errors.add(PostgresHelper.executeUpdateMessage("create unique index IF NOT EXISTS card_name_uindex on CARD (NAME);", "Card Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS package(\"ID\" varchar(255) not null,name varchar(255) not null constraint name references card, i serial not null constraint package_i primary key );", "Package Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS user_cards(username TEXT not null constraint user_cards_users_username_fk references users,name text not null, gesperrt boolean not null);", "UserCards Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS user_deck(username text not null constraint user_deck_users_username_fk references users,cardname text not null);", "UserDeck Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create table IF NOT EXISTS trading(username text not null constraint trading_users_username_fk references users,id text not null constraint trading_pk primary key, cardtotrade text not null constraint trading_card_name_fk references card, mindamage float not null,reqcardtype text not null,reqelement text not null);", "Trading Table created"));
errors.add(PostgresHelper.executeUpdate("create table if not exists battle(usernamecreator text not null constraint battle_users_username_fk references users,usernameplayer text constraint battle_users_username_fk_2 references users, battleid serial, deckcreator text not null);"));
errors.add(PostgresHelper.executeUpdateMessage("create unique index if not exists battle_battleid_uindex on battle (battleid);", "Battle Table created"));
errors.add(PostgresHelper.executeUpdate("create table IF NOT EXISTS battle_log(id int not null constraint battle_log_pk primary key, playerone text not null,playertwo text not null,playeronescore text not null,playertwoscore text not null,log varchar(10485760));"));
errors.add(PostgresHelper.executeUpdateMessage("create unique index IF NOT EXISTS battle_log_id_uindex on battle_log (id);", "Battle_lgo Table created"));
return !errors.contains(false);
}
/**
@ -60,7 +63,6 @@ public class DBConnection {
while (rs.next()) {
id = rs.getInt("id");
if (id > 0) {
System.out.println("BATTLE ID: " + id);
battleIds.add(id + "");
}else {
return null;
@ -87,12 +89,10 @@ public class DBConnection {
try {
stmt = this.c.createStatement();
ResultSet rs = stmt.executeQuery("select max(id) from battle_log where playerone = '" + username + "' or playertwo = '" + username + "';");
//noinspection LoopStatementThatDoesntLoop
while (rs.next()) {
id = rs.getInt("max");
System.out.println("select max(id) from battle_log where playerone = '" + username + "' or playerone = '" + username + "';");
System.out.println("PREEEE IF ID: " + id);
if (id > 0) {
System.out.println("LAST BATTLE ID: " + id);
return id;
}else {
return -1;
@ -120,6 +120,7 @@ public class DBConnection {
try {
stmt = this.c.createStatement();
ResultSet rs = stmt.executeQuery("select * from battle_log where id = " + battleId + ";");
//noinspection LoopStatementThatDoesntLoop
while (rs.next()) {
id = rs.getInt("id");
playerone = rs.getString("playerone");
@ -137,7 +138,6 @@ public class DBConnection {
map.put("id", id+"");
return map;
}else{
System.out.println("GET BATTLE LOG WAS EMPTY");
return null;
}
@ -155,6 +155,7 @@ public class DBConnection {
/**
* Fügt der Battle tabelle ein battle hinzu
* @param usernamecreator Username der das Battle erstellt hat
* @return True bei erfolg, sonst false
*/
public boolean addBattle(String usernamecreator){
@ -187,6 +188,7 @@ public class DBConnection {
try {
stmt = this.c.createStatement();
ResultSet rs = stmt.executeQuery("select * from battle limit 1;");
//noinspection LoopStatementThatDoesntLoop
while (rs.next()) {
battleid = rs.getInt("battleid");
usernamecreator = rs.getString("usernamecreator");
@ -238,6 +240,7 @@ public class DBConnection {
* @param playertwo Name vom Player 2
* @param playeronescore Score vom Player 1
* @param playertwoscore Score vom Player 2
* @param log Log des Battles
* @return true bei erfolg sonst false
*/
public boolean addBattleLog(String id, String playerone, String playertwo, String playeronescore, String playertwoscore, String log){
@ -344,7 +347,7 @@ public class DBConnection {
/**
* Setzt das Deck eines Users
* @param username Username von dem das Deck gesetzt werden soll
* @param deck Die ID´s des Decks in der Form einer ArrayList<String>
* @param deck Die ID´s des Decks in der Form einer ArrayList
* @return True bei erfolg, sonst false
*/
public boolean setDeck(String username, List<String> deck){
@ -354,7 +357,7 @@ public class DBConnection {
return false;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
System.err.println(throwables.getMessage());
return false;
}
}
@ -433,14 +436,6 @@ public class DBConnection {
* @return Das Package aus dem Shop, null falls ein Fehler auftritt
*/
public Package userAcquirePackage(String username) {
int coins = checkCoins(username);
if (!(coins - 5 >= 0)) {
return null;
}
if(!updateCoins(coins - 5, username)){
return null;
}
this.c = PostgresHelper.con();
String id = "";
try {
@ -539,6 +534,7 @@ public class DBConnection {
* Coins setzten
*
* @param coins Anzahl die zu setzten ist
* @param username Username von dem die Coins geupdated werden sollen
* @return True bei erfolg, sonst false
*/
public boolean updateCoins(int coins, String username) {
@ -547,7 +543,7 @@ public class DBConnection {
/**
* Gibt die Anzahl an verfügbaren coins zurück
*
* @param username Der username von dem die Coins geholt werden sollen
* @return Anzahl der Coins, -1 ist error
*/
public int checkCoins(String username) {
@ -660,6 +656,8 @@ public class DBConnection {
* @param password Passwort des Users
* @param nachname nachname des Users
* @param email Email des Users
* @param bio Bio des Users
* @param image Image des Users
* @return True wenn alles erfolgreich war, false wenn es nicht erfolgreich war
*/
public boolean addUser(String username, String password, String nachname, String email, String bio, String image) {

View File

@ -12,7 +12,7 @@ import java.net.Socket;
* Vereint alle anderen Klassen
*/
public class Main {
static final int port = 80;
static final int port = 10001;
private Socket socket;
/**
@ -20,7 +20,10 @@ public class Main {
* @param args Nicht Verwendet
*/
public static void main(String[] args) {
new DBConnection().init();
if (!new DBConnection().init()) {
System.err.println("DB init failed");
System.exit(0);
}
System.out.println("\n\nStarte Server auf Port " + port + "\n\n");
new Main(port);
}
@ -33,6 +36,7 @@ public class Main {
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(port);
//noinspection InfiniteLoopStatement
while (true){
this.socket = serverSocket.accept();
requestResponding();

View File

@ -30,6 +30,7 @@ public class PostgresHelper {
/**
* Führt ein Sql statement ohne rückgabe aus, mit message nachricht
* @param sql Sql command
* @param message Mesasage die vor dem Durchführen angezeigt wird
* @return True bei erfolg, sonst false
*/
public static boolean executeUpdateMessage(String sql, String message){

View File

@ -24,6 +24,7 @@ public class Request {
/**
* Besorgt alle nötigen infos aus dem request
* @param socket Socket von dem der Request kommt
* @throws IOException Input Output Exception
*/
public Request(Socket socket) throws IOException {
StringBuilder rqBuilder = new StringBuilder();
@ -85,9 +86,9 @@ public class Request {
}
/**
* Get PrintStream --> Output
* Get PrintStream : Output
*
* @return out PrintStream --> Output
* @return out PrintStream : Output
*/
public PrintStream getOut() {
return this.out;

View File

@ -4,6 +4,7 @@ import at.reisinger.obj.*;
import at.reisinger.obj.Package;
import at.reisinger.server.DBConnection;
import at.reisinger.server.helper.JsonHelper;
import at.reisinger.server.helper.PostgresHelper;
import at.reisinger.server.helper.ResponseHelper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
@ -59,14 +60,10 @@ public class Response {
}
break;
case "DELETE":
if (login()) {
deleteMethodes();
} else {
sendResponse("Login Error", "401");
}
break;
default:
sendResponse("", "405");
sendResponse(cmd + " not found!", "405");
break;
}
}
@ -87,7 +84,7 @@ public class Response {
sendResponse(userJson, "200");
}
}else{
sendResponse("", "500");
sendResponse("Get User Error", "500");
}
} else if (this.url.startsWith("/cards")) {
String username = basicAuthGetUsername(this.authString);
@ -96,7 +93,7 @@ public class Response {
if (jsonCards != null && !jsonCards.isEmpty()){
sendResponse(jsonCards, "200");
}else{
sendResponse("", "500");
sendResponse("Cards to Json error", "500");
}
}else if(this.url.startsWith("/deck")) {
String format = this.url.substring(this.url.lastIndexOf('?') + 1);
@ -123,10 +120,10 @@ public class Response {
if(json != null && !json.equals("")){
sendResponse(json, "200");
}else{
sendResponse("", "500");
sendResponse("Trading Deals to Json error", "500");
}
}else{
sendResponse("", "500");
sendResponse("Keine Trading Deals gefunden", "500");
}
}else if(this.url.startsWith("/score")) {
String username = basicAuthGetUsername(this.authString);
@ -169,7 +166,7 @@ public class Response {
sendResponse("Login Error", "401");
}
}else{
sendResponse("", "204");
sendResponse(this.url + " not found!", "404");
}
}
@ -274,15 +271,24 @@ public class Response {
}else if (this.url.startsWith("/transactions/packages")) {
if (login()) {
DBConnection db = new DBConnection();
Package newPackage = db.userAcquirePackage(basicAuthGetUsername(this.authString));
if (newPackage == null) {
sendResponse("", "500");
} else {
String packageJson = JsonHelper.objToJson(newPackage);
if (packageJson == null) {
sendResponse("", "500");
String username = basicAuthGetUsername(this.authString);
int coins = new DBConnection().checkCoins(username);
if (!(coins - 5 >= 0)) {
sendResponse("Nur " + coins + " von 5 coins vorhanden", "500");
}else {
Package newPackage = db.userAcquirePackage(username);
if (newPackage == null) {
sendResponse("Kein Package mehr vorhanden", "500");
} else {
sendResponse(packageJson, "200");
String packageJson = JsonHelper.objToJson(newPackage);
if (packageJson == null) {
sendResponse("Package to Json error", "500");
} else {
if(!new DBConnection().updateCoins(coins - 5, username)){
sendResponse("User coins konnten ned gesetzt werden", "500");
}
sendResponse(packageJson, "200");
}
}
}
}else{
@ -306,35 +312,39 @@ public class Response {
Card card = new DBConnection().getCardFromID(this.payload);
if (card != null) {
if (tradingDeal != null) {
if (tradingDeal.cardOk(card)) {
String json = JsonHelper.objToJson(card);
if (json != null && !json.isEmpty()) {
if (new DBConnection().addUserCard(username, tradingDeal.getCardToTrade().getName())) {
if (new DBConnection().delUserCard(tradingDeal.getUsername(), tradingDeal.getCardToTrade().getName())) {
if (new DBConnection().deleteTradingDeal(tradingDeal.getId())) {
if (new DBConnection().delUserCard(username, card.getName())) {
if (new DBConnection().addUserCard(tradingDeal.getUsername(), card.getName())) {
sendResponse(json, "200");
if (!tradingDeal.getUsername().equals(username)){
if (tradingDeal.cardOk(card)) {
String json = JsonHelper.objToJson(card);
if (json != null && !json.isEmpty()) {
if (new DBConnection().addUserCard(username, tradingDeal.getCardToTrade().getName())) {
if (new DBConnection().delUserCard(tradingDeal.getUsername(), tradingDeal.getCardToTrade().getName())) {
if (new DBConnection().deleteTradingDeal(tradingDeal.getId())) {
if (new DBConnection().delUserCard(username, card.getName())) {
if (new DBConnection().addUserCard(tradingDeal.getUsername(), card.getName())) {
sendResponse(json, "200");
} else {
sendResponse("ERROR --> Add Card to: " + tradingDeal.getUsername(), "500");
}
} else {
sendResponse("ERROR --> Add Card to: " + tradingDeal.getUsername(), "500");
sendResponse("ERROR --> Del Card from: " + username, "500");
}
} else {
sendResponse("ERROR --> Del Card from: " + username, "500");
sendResponse("Error --> Del Trading Deal", "500");
}
} else {
sendResponse("Error --> Del Trading Deal", "500");
sendResponse("ERROR --> Del Card from: " + tradingDeal.getUsername(), "500");
}
} else {
sendResponse("ERROR --> Del Card from: " + tradingDeal.getUsername(), "500");
sendResponse("ERROR --> Add Card to: " + username, "500");
}
} else {
sendResponse("ERROR --> Add Card to: " + username, "500");
sendResponse("ERROR --> JSON Empty", "500");
}
} else {
sendResponse("ERROR --> JSON Empty", "500");
sendResponse("ERROR --> Trading Deal not ok", "500");
}
} else {
sendResponse("ERROR --> Trading Deal not ok", "500");
}else {
sendResponse("ERROR --> Kann nicht mit sich selbst traden", "500");
}
} else {
sendResponse("ERROR --> Trading Deal not exist", "500");
@ -412,7 +422,6 @@ public class Response {
openBattle.setDeckPlayer2(deck);
if(new DBConnection().delBattleEinladung(openBattle.getId() + "")) {
if (openBattle.doFight()){
System.out.println(JsonHelper.objToJson(openBattle.getLog().size()));
if (new DBConnection().addBattleLog(openBattle.getId() + "", openBattle.getPlayer1().getName(), openBattle.getPlayer2().getName(), openBattle.getScorePlayer1() + "", openBattle.getScorePlayer2() + "", openBattle.getLog().toString())) {
if (new DBConnection().delDeck(openBattle.getPlayer1().getCredentials().getUsername()) && new DBConnection().delDeck(openBattle.getPlayer2().getCredentials().getUsername())) {
//DEL OLD DECK CARDS
@ -487,7 +496,7 @@ public class Response {
sendResponse("Login Error", "401");
}
} else{
sendResponse("", "405");
sendResponse(this.url + " not found!", "404");
}
}
@ -542,14 +551,16 @@ public class Response {
if (deck != null && deckJson != null){
sendResponse(deckJson, "200");
}else {
sendResponse("", "500");
sendResponse("Deck konnte nicht aus der DB geholt werden", "500");
}
}else {
sendResponse("", "500");
sendResponse("Deck konnte nicht gesetzt werden", "500");
}
}else{
sendResponse(Objects.requireNonNull(deckIds).size() + " von 4 Karten sind im Deck.","500");
}
}else{
sendResponse(this.url + " not found!", "404");
}
}
@ -557,31 +568,49 @@ public class Response {
/**
* Alle Delete Methoden, siehe API beschreibung für genauere details
* Nur für angemeldete user erreichbar
*/
private void deleteMethodes(){
if (this.url.startsWith("/tradings")) {
String tradeid = this.url.substring(this.url.lastIndexOf('/') + 1);
ArrayList<TradingDeal> allTradingDeals = new DBConnection().getAllTradingDeals();
TradingDeal tr = null;
if (allTradingDeals != null && !allTradingDeals.isEmpty()) {
for (TradingDeal i : allTradingDeals) {
if (i.getId().equals(tradeid)) {
tr = i;
if(login()) {
String tradeid = this.url.substring(this.url.lastIndexOf('/') + 1);
ArrayList<TradingDeal> allTradingDeals = new DBConnection().getAllTradingDeals();
TradingDeal tr = null;
if (allTradingDeals != null && !allTradingDeals.isEmpty()) {
for (TradingDeal i : allTradingDeals) {
if (i.getId().equals(tradeid)) {
tr = i;
}
}
}
if (tr != null) {
if (new DBConnection().deleteTradingDeal(tradeid)) {
if (new DBConnection().updateCardLock(tr.getCardToTrade().getName(), false))
sendResponse("", "204");
if (tr != null) {
if (new DBConnection().deleteTradingDeal(tradeid)) {
if (new DBConnection().updateCardLock(tr.getCardToTrade().getName(), false))
sendResponse("", "204");
} else {
sendResponse("", "500");
}
} else {
sendResponse("", "500");
}
}else{
sendResponse("", "500");
}
}else{
sendResponse("Login Error", "401");
}
}else if (this.url.startsWith("/db/all")) {
if(basicAuth("admin", "istrator", this.authString)) {
if (!PostgresHelper.executeUpdate("drop table user_deck;drop table trading;drop table battle;drop table battle_log;drop table user_cards;drop table package;drop table card;drop table users;")) {
if (!new DBConnection().init()) {
sendResponse("DB init failed", "500");
} else {
sendResponse("DB deleted & recreated", "205");
}
}else {
sendResponse("DB drop error", "500");
}
}else {
sendResponse("Login Error", "401");
}
}else{
sendResponse(this.url + " not found!", "404");
}
}

View File

@ -2,7 +2,6 @@ import at.reisinger.obj.Coins;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
public class CoinsTest {

View File

@ -16,15 +16,9 @@ public class PackageTest {
@BeforeEach
void setUp() {
Card card = new Card("Name", 10, ElementTyp.WATER, CardType.MONSTER);
Card newCard = new Card("NameNew", 10, ElementTyp.WATER, CardType.SPELL);
ArrayList<Card> cardsArrayList = new ArrayList<>();
ArrayList<Card> cardsArrayList2 = new ArrayList<>();
ArrayList<Card> cardsArrayList3 = new ArrayList<>();
cardsArrayList.add(card);
cardsArrayList2.add(newCard);
Cards cards = new Cards(cardsArrayList);
Cards newCards = new Cards(cardsArrayList2);
Cards nochNewCards = new Cards(cardsArrayList3);
myPackage = new Package(cards,"Name", 100);
}

View File

@ -4,8 +4,6 @@ import at.reisinger.obj.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.*;
@ -16,27 +14,8 @@ public class TradingDealTest {
@BeforeEach
void setUp() {
//at.reisinger.Stack
card = new Card("Name", 10, ElementTyp.WATER, CardType.MONSTER);
newCard = new Card("NameNew", 10, ElementTyp.WATER, CardType.SPELL);
ArrayList<Card> cardsArrayList = new ArrayList<>();
ArrayList<Card> cardsArrayList2 = new ArrayList<>();
ArrayList<Card> cardsArrayList3 = new ArrayList<>();
cardsArrayList.add(card);
cardsArrayList2.add(newCard);
Cards cards = new Cards(cardsArrayList);
Cards newCards = new Cards(cardsArrayList2);
Cards nochNewCards = new Cards(cardsArrayList3);
//at.reisinger.obj.Coins
Coins coins = new Coins(10);
//at.reisinger.obj.User
Credentials credentials = new Credentials("username", "passwort");
Credentials newCredentials = new Credentials("usernamenew", "passwortnew");
User user = new User(credentials, "name", "nachname", "email", coins, "BIO", "IMAGE");
User userNew = new User(newCredentials, "nameNew", "nachnameNew", "emailNew", coins, "BIO", "IMAGE");
//Trading Deal
Card cardToTrade = card;
ElementTyp requiredElementType = ElementTyp.FIRE;
double requiredMinDamage = 100;

View File

@ -1,41 +1,16 @@
import at.reisinger.obj.*;
import at.reisinger.enums.CardType;
import at.reisinger.enums.ElementTyp;
import at.reisinger.obj.Package;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class UserTest {
private TradingDeal tradingDeal;
private User user;
private Package myPackage;
@BeforeEach
void setUp() {
//at.reisinger.Stack
Card card = new Card("Name", 10, ElementTyp.WATER, CardType.MONSTER);
Card newCard = new Card("NameNew", 10, ElementTyp.WATER, CardType.SPELL);
ArrayList<Card> cardsArrayList = new ArrayList<>();
ArrayList<Card> cardsArrayList2 = new ArrayList<>();
ArrayList<Card> cardsArrayList3 = new ArrayList<>();
cardsArrayList.add(card);
cardsArrayList2.add(newCard);
Cards cards = new Cards(cardsArrayList);
Cards newCards = new Cards(cardsArrayList2);
Cards nochNewCards = new Cards(cardsArrayList3);
//at.reisinger.obj.Package
myPackage = new Package(cards, "Name", 100);
//at.reisinger.obj.Coins
Coins coins = new Coins(10);
//at.reisinger.obj.User
Credentials credentials = new Credentials("username", "pw");
user = new User(credentials, "name", "nachname", "email", coins, "BIO", "IMAGE");
}
@ -76,10 +51,4 @@ public class UserTest {
String result = user.getEmail();
assertEquals(newstring, result);
}
@Test
public void test_buyPackage(){
Cards cards;
cards = new Cards(user.buyPackage(myPackage));
assertTrue(Objects.requireNonNull(cards).equals(new Cards(myPackage.getCards())));
}
}