diff --git a/LICENSE.md b/LICENSE.md index cf1ab25..0011bca 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,24 +1,16 @@ This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or +as a compiled binary, for any purpose, commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. +In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright +interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the +detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of +all present and future rights to this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to diff --git a/README.md b/README.md index 0247bf0..df5c5dd 100644 --- a/README.md +++ b/README.md @@ -3,34 +3,42 @@ This is an example project that can be used as a starting point to create your own Vaadin application with Spring Boot. It contains all the necessary configuration and some placeholder files to get you started. -The project is a standard Maven project, so you can import it to your IDE of choice. [Read more how to set up a development environment](https://vaadin.com/docs/v14/flow/installing/installing-overview.html) for Vaadin projects (Windows, Linux, macOS). +The project is a standard Maven project, so you can import it to your IDE of +choice. [Read more how to set up a development environment](https://vaadin.com/docs/v14/flow/installing/installing-overview.html) +for Vaadin projects (Windows, Linux, macOS). This project was created from https://start.vaadin.com. ## Running and debugging the application ### Running the application from the command line. + To run from the command line, use `mvn` and open http://localhost:8080 in your browser. ### Running and debugging the application in Intellij IDEA + - Locate the app.Application.java class in the Project view. It is in the src folder, under the main package's root. - Right-click on the app.Application class - Select "Debug 'app.Application.main()'" from the list -After the application has started, you can view it at http://localhost:8080/ in your browser. -You can now also attach breakpoints in code for debugging purposes, by clicking next to a line number in any source file. +After the application has started, you can view it at http://localhost:8080/ in your browser. You can now also attach +breakpoints in code for debugging purposes, by clicking next to a line number in any source file. ### Running and debugging the application in Eclipse + - Locate the app.Application.java class in the Package Explorer. It is in `src/main/java`, under the main package. - Right-click on the file and select `Debug As` --> `Java app.Application`. -Do not worry if the debugger breaks at a `SilentExitException`. This is a Spring Boot feature and happens on every startup. +Do not worry if the debugger breaks at a `SilentExitException`. This is a Spring Boot feature and happens on every +startup. + +After the application has started, you can view it at http://localhost:8080/ in your browser. You can now also attach +breakpoints in code for debugging purposes, by clicking next to a line number in any source file. -After the application has started, you can view it at http://localhost:8080/ in your browser. -You can now also attach breakpoints in code for debugging purposes, by clicking next to a line number in any source file. ## Project structure -- `MainView.java` in `src/main/java` contains the app.navigation setup. It uses [App Layout](https://vaadin.com/components/vaadin-app-layout). +- `MainView.java` in `src/main/java` contains the app.regularNavigation setup. It + uses [App Layout](https://vaadin.com/components/vaadin-app-layout). - `app.views` package in `src/main/java` contains the server-side Java app.views of your application. - `app.views` folder in `frontend/` contains the client-side JavaScript app.views of your application. @@ -38,6 +46,9 @@ You can now also attach breakpoints in code for debugging purposes, by clicking [vaadin.com](https://vaadin.com) has lots of material to help you get you started: -- Follow the tutorials in [vaadin.com/tutorials](https://vaadin.com/tutorials). Especially [vaadin.com/tutorials/getting-started-with-flow](https://vaadin.com/tutorials/getting-started-with-flow) is good for getting a grasp of the basic Vaadin concepts. +- Follow the tutorials in [vaadin.com/tutorials](https://vaadin.com/tutorials). + Especially [vaadin.com/tutorials/getting-started-with-flow](https://vaadin.com/tutorials/getting-started-with-flow) is + good for getting a grasp of the basic Vaadin concepts. - Read the documentation in [vaadin.com/docs](https://vaadin.com/docs). -- For a bigger Vaadin application example, check out the Full Stack App starter from [vaadin.com/start](https://vaadin.com/start). +- For a bigger Vaadin application example, check out the Full Stack App starter + from [vaadin.com/start](https://vaadin.com/start). diff --git a/db/db_increment_001.sql b/db/db_increment_001.sql index b6b9bf5..30a2993 100644 --- a/db/db_increment_001.sql +++ b/db/db_increment_001.sql @@ -1,8 +1,8 @@ ALTER TABLE "game_info" - ADD COLUMN "pgn" varchar, - ADD COLUMN "rated" boolean, - ADD COLUMN "time_class" varchar, - ADD COLUMN "rules" varchar, + ADD COLUMN "pgn" varchar, + ADD COLUMN "rated" boolean, + ADD COLUMN "time_class" varchar, + ADD COLUMN "rules" varchar, ADD COLUMN "white_rating" int, ADD COLUMN "black_rating" int, ADD COLUMN "white_result" varchar, diff --git a/db/db_increment_002.sql b/db/db_increment_002.sql index 6876a29..eaff3ac 100644 --- a/db/db_increment_002.sql +++ b/db/db_increment_002.sql @@ -1,5 +1,5 @@ ALTER TABLE "season" - ADD COLUMN "week_of_first_matchday" int not null default 9 CHECK ( week_of_first_matchday > 0 AND week_of_first_matchday <= 53 ), + ADD COLUMN "week_of_first_matchday" int not null default 9 CHECK ( week_of_first_matchday > 0 AND week_of_first_matchday <= 53 ), ADD COLUMN "first_weekday_of_matchday" int not null default 2 CHECK ( first_weekday_of_matchday > 0 AND first_weekday_of_matchday <= 7 ), - ADD COLUMN "last_weekday_of_matchday" int not null default 1 CHECK ( last_weekday_of_matchday > 0 AND last_weekday_of_matchday <= 7 ), - ADD COLUMN "weekday_of_view_change" int not null default 4 CHECK ( weekday_of_view_change > 0 AND weekday_of_view_change <= 7 ); + ADD COLUMN "last_weekday_of_matchday" int not null default 1 CHECK ( last_weekday_of_matchday > 0 AND last_weekday_of_matchday <= 7 ), + ADD COLUMN "weekday_of_view_change" int not null default 4 CHECK ( weekday_of_view_change > 0 AND weekday_of_view_change <= 7 ); diff --git a/db/db_init.sql b/db/db_init.sql index 1de580b..1383eb0 100644 --- a/db/db_init.sql +++ b/db/db_init.sql @@ -19,473 +19,852 @@ DROP TABLE IF EXISTS "match" CASCADE; DROP TABLE IF EXISTS "matchday" CASCADE; DROP TABLE IF EXISTS "season" CASCADE; -CREATE TABLE "player" ( - "id" SERIAL PRIMARY KEY, - "name" varchar NOT NULL, - "nickname" varchar NOT NULL, - "info" int UNIQUE +CREATE TABLE "player" +( + "id" SERIAL PRIMARY KEY, + "name" varchar NOT NULL, + "nickname" varchar NOT NULL, + "info" int UNIQUE ); -CREATE TABLE "player_info" ( - "id" SERIAL PRIMARY KEY, - "url" varchar +CREATE TABLE "player_info" +( + "id" SERIAL PRIMARY KEY, + "url" varchar ); -CREATE TABLE "game" ( - "id" SERIAL PRIMARY KEY, - "match" int NOT NULL, - "player1_is_white" boolean NOT NULL, - "result" int NOT NULL, - "info" int UNIQUE +CREATE TABLE "game" +( + "id" SERIAL PRIMARY KEY, + "match" int NOT NULL, + "player1_is_white" boolean NOT NULL, + "result" int NOT NULL, + "info" int UNIQUE ); -CREATE TABLE "game_info" ( - "id" SERIAL PRIMARY KEY, - "time_control" varchar, - "chess_com_id" varchar, - "fen" varchar, - "end_time" bigint +CREATE TABLE "game_info" +( + "id" SERIAL PRIMARY KEY, + "time_control" varchar, + "chess_com_id" varchar, + "fen" varchar, + "end_time" bigint ); -CREATE TABLE "match" ( - "id" SERIAL PRIMARY KEY, - "player1" int NOT NULL, - "player2" int NOT NULL, - "matchday" int NOT NULL +CREATE TABLE "match" +( + "id" SERIAL PRIMARY KEY, + "player1" int NOT NULL, + "player2" int NOT NULL, + "matchday" int NOT NULL ); -CREATE TABLE "matchday" ( - "id" SERIAL PRIMARY KEY, - "number" int NOT NULL, - "season" int NOT NULL +CREATE TABLE "matchday" +( + "id" SERIAL PRIMARY KEY, + "number" int NOT NULL, + "season" int NOT NULL ); -CREATE TABLE "season" ( - "id" SERIAL PRIMARY KEY, - "year_start" int NOT NULL, - "year_end" int NOT NULL +CREATE TABLE "season" +( + "id" SERIAL PRIMARY KEY, + "year_start" int NOT NULL, + "year_end" int NOT NULL ); -ALTER TABLE "player" ADD FOREIGN KEY ("info") REFERENCES "player_info" ("id"); - -ALTER TABLE "game" ADD FOREIGN KEY ("match") REFERENCES "match" ("id"); - -ALTER TABLE "game" ADD FOREIGN KEY ("info") REFERENCES "game_info" ("id"); - -ALTER TABLE "match" ADD FOREIGN KEY ("player1") REFERENCES "player" ("id"); - -ALTER TABLE "match" ADD FOREIGN KEY ("player2") REFERENCES "player" ("id"); - -ALTER TABLE "match" ADD FOREIGN KEY ("matchday") REFERENCES "matchday" ("id"); - -ALTER TABLE "matchday" ADD FOREIGN KEY ("season") REFERENCES "season" ("id"); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/aprilem262'); -INSERT INTO "player" (name, nickname, info) VALUES ('Sophia', 'aprilem262', (SELECT id from player_info WHERE url='https://www.chess.com/member/aprilem262') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/friedox'); -INSERT INTO "player" (name, nickname, info) VALUES ('Friedi', 'friedox', (SELECT id from player_info WHERE url='https://www.chess.com/member/friedox') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/internity'); -INSERT INTO "player" (name, nickname, info) VALUES ('Albert', 'internity', (SELECT id from player_info WHERE url='https://www.chess.com/member/internity') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/kevske'); -INSERT INTO "player" (name, nickname, info) VALUES ('Kevin', 'kevske', (SELECT id from player_info WHERE url='https://www.chess.com/member/kevske') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/kochi291'); -INSERT INTO "player" (name, nickname, info) VALUES ('Marcel', 'Kochi291', (SELECT id from player_info WHERE url='https://www.chess.com/member/kochi291') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/ladyanne26'); -INSERT INTO "player" (name, nickname, info) VALUES ('Anne', 'LadyAnne26', (SELECT id from player_info WHERE url='https://www.chess.com/member/ladyanne26') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/lakes0'); -INSERT INTO "player" (name, nickname, info) VALUES ('Florian', 'Lakes0', (SELECT id from player_info WHERE url='https://www.chess.com/member/lakes0') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/maddingladi'); -INSERT INTO "player" (name, nickname, info) VALUES ('Maddin', 'maddingladi', (SELECT id from player_info WHERE url='https://www.chess.com/member/maddingladi') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/magnus-brother'); -INSERT INTO "player" (name, nickname, info) VALUES ('Tariq', 'Magnus-Brother', (SELECT id from player_info WHERE url='https://www.chess.com/member/magnus-brother') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/mama-lolo'); -INSERT INTO "player" (name, nickname, info) VALUES ('Malte', 'Mama-Lolo', (SELECT id from player_info WHERE url='https://www.chess.com/member/mama-lolo') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/marcriedlsperger'); -INSERT INTO "player" (name, nickname, info) VALUES ('Marc', 'marcriedlsperger', (SELECT id from player_info WHERE url='https://www.chess.com/member/marcriedlsperger') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/mistmade03'); -INSERT INTO "player" (name, nickname, info) VALUES ('Florian', 'Mistmade03', (SELECT id from player_info WHERE url='https://www.chess.com/member/mistmade03') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/moryzzle'); -INSERT INTO "player" (name, nickname, info) VALUES ('Moritz', 'Moryzzle', (SELECT id from player_info WHERE url='https://www.chess.com/member/moryzzle') ); - -INSERT INTO "player_info" (url) VALUES ('https://www.chess.com/member/pandroit'); -INSERT INTO "player" (name, nickname, info) VALUES ('Peter', 'pandroit', (SELECT id from player_info WHERE url='https://www.chess.com/member/pandroit') ); - -INSERT INTO "season" (year_start, year_end) VALUES (2021, 2021); - -INSERT INTO "matchday" (number, season) VALUES (1, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 1, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 8, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 4, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 3, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 6, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 9, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 7, 1); - -INSERT INTO "matchday" (number, season) VALUES (2, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 11, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 12, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 8, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 4, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 3, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 6, 2); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 9, 2); - -INSERT INTO "matchday" (number, season) VALUES (3, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 1, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 11, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 12, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 8, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 4, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 3, 3); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 6, 3); - -INSERT INTO "matchday" (number, season) VALUES (4, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 5, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 10, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 11, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 12, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 8, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 4, 4); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 3, 4); - -INSERT INTO "matchday" (number, season) VALUES (5, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 1, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 5, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 10, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 11, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 12, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 8, 5); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 4, 5); - -INSERT INTO "matchday" (number, season) VALUES (6, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 2, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 13, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 5, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 10, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 11, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 12, 6); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 8, 6); - -INSERT INTO "matchday" (number, season) VALUES (7, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 1, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 2, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 13, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 5, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 10, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 11, 7); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 12, 7); - -INSERT INTO "matchday" (number, season) VALUES (8, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 7, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 14, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 2, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 13, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 5, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 10, 8); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 11, 8); - -INSERT INTO "matchday" (number, season) VALUES (9, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 1, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 7, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 14, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 2, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 13, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 5, 9); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 10, 9); - -INSERT INTO "matchday" (number, season) VALUES (10, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 6, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 9, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 7, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 14, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 2, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 13, 10); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 5, 10); - -INSERT INTO "matchday" (number, season) VALUES (11, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 1, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 6, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 9, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 7, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 14, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 2, 11); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 13, 11); - -INSERT INTO "matchday" (number, season) VALUES (12, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 4, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 3, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 6, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 9, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 7, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 14, 12); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 2, 12); - -INSERT INTO "matchday" (number, season) VALUES (13, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 1, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 4, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 3, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 6, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 9, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 7, 13); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 14, 13); - -INSERT INTO "matchday" (number, season) VALUES (14, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 12, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 11, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 10, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 5, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 13, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 2, 14); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 14, 14); - -INSERT INTO "matchday" (number, season) VALUES (15, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 1, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 10, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 5, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 13, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 2, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 14, 15); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 7, 15); - -INSERT INTO "matchday" (number, season) VALUES (16, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 10, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 5, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 13, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 2, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 14, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 7, 16); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 9, 16); - -INSERT INTO "matchday" (number, season) VALUES (17, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 1, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 13, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 2, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 14, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 7, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 9, 17); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 6, 17); - -INSERT INTO "matchday" (number, season) VALUES (18, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 13, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 2, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 14, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 7, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 9, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 6, 18); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 3, 18); - -INSERT INTO "matchday" (number, season) VALUES (19, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 1, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 14, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 7, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 9, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 6, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 3, 19); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 8, 4, 19); - -INSERT INTO "matchday" (number, season) VALUES (20, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 14, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 7, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 9, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 6, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 3, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 4, 20); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (12, 8, 20); - -INSERT INTO "matchday" (number, season) VALUES (21, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 1, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 9, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 6, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 3, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 4, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 8, 21); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (11, 12, 21); - -INSERT INTO "matchday" (number, season) VALUES (22, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 9, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 6, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 3, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 4, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 8, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 12, 22); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (10, 11, 22); - -INSERT INTO "matchday" (number, season) VALUES (23, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 1, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 3, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 4, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 8, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 12, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 11, 23); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 5, 10, 23); - -INSERT INTO "matchday" (number, season) VALUES (24, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 3, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 4, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 8, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 12, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 11, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 10, 24); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (13, 5, 24); - -INSERT INTO "matchday" (number, season) VALUES (25, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 1, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 8, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 12, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 11, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 10, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 5, 25); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 2, 13, 25); - -INSERT INTO "matchday" (number, season) VALUES (26, 1); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 1, 8, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 4, 12, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 3, 11, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 6, 10, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 5, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 13, 26); -INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 2, 26); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8722014513'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8722014513')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8723231941'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8723231941')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8724907847'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8724907847')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8725036665'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8725036665')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8725614379'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8725614379')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8726184583'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8726184583')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8616485043'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8616485043')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8618149677'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8618149677')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8702757001'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8702757001')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8705204521'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8705204521')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8705796221'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8705796221')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8706438057'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8706438057')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8617630129'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8617630129')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8618225533'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8618225533')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8619306585'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8619306585')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8619471075'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8619471075')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8620078695'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8620078695')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8620568591'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8620568591')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8504667551'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 0, (SELECT id from game_info WHERE chess_com_id='8504667551')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8505882389'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8505882389')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8507004247'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8507004247')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8507617133'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8507617133')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8508203475'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8508203475')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8508297031'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8508297031')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8624735639'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8624735639')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8625353555'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8625353555')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8625963087'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8625963087')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8853361491'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8853361491')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8853455035'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8853455035')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8854002505'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8854002505')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8858219835'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8858219835')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8859375675'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8859375675')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8859976305'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8859976305')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8860591347'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8860591347')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8860675419'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8860675419')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8861228997'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8861228997')); - - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8877523129'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8877523129')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('600', '8878652939'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8878652939')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8879853665'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE chess_com_id='8879853665')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('300', '8880469509'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE chess_com_id='8880469509')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8881562307'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE chess_com_id='8881562307')); - -INSERT INTO "game_info" (time_control, chess_com_id) VALUES ('180', '8881610243'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE chess_com_id='8881610243')); \ No newline at end of file +ALTER TABLE "player" + ADD FOREIGN KEY ("info") REFERENCES "player_info" ("id"); + +ALTER TABLE "game" + ADD FOREIGN KEY ("match") REFERENCES "match" ("id"); + +ALTER TABLE "game" + ADD FOREIGN KEY ("info") REFERENCES "game_info" ("id"); + +ALTER TABLE "match" + ADD FOREIGN KEY ("player1") REFERENCES "player" ("id"); + +ALTER TABLE "match" + ADD FOREIGN KEY ("player2") REFERENCES "player" ("id"); + +ALTER TABLE "match" + ADD FOREIGN KEY ("matchday") REFERENCES "matchday" ("id"); + +ALTER TABLE "matchday" + ADD FOREIGN KEY ("season") REFERENCES "season" ("id"); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/aprilem262'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Sophia', 'aprilem262', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/aprilem262')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/friedox'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Friedi', 'friedox', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/friedox')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/internity'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Albert', 'internity', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/internity')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/kevske'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Kevin', 'kevske', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/kevske')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/kochi291'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Marcel', 'Kochi291', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/kochi291')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/ladyanne26'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Anne', 'LadyAnne26', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/ladyanne26')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/lakes0'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Florian', 'Lakes0', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/lakes0')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/maddingladi'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Maddin', 'maddingladi', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/maddingladi')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/magnus-brother'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Tariq', 'Magnus-Brother', + (SELECT id from player_info WHERE url = 'https://www.chess.com/member/magnus-brother')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/mama-lolo'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Malte', 'Mama-Lolo', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/mama-lolo')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/marcriedlsperger'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Marc', 'marcriedlsperger', + (SELECT id from player_info WHERE url = 'https://www.chess.com/member/marcriedlsperger')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/mistmade03'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Florian', 'Mistmade03', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/mistmade03')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/moryzzle'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Moritz', 'Moryzzle', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/moryzzle')); + +INSERT INTO "player_info" (url) +VALUES ('https://www.chess.com/member/pandroit'); +INSERT INTO "player" (name, nickname, info) +VALUES ('Peter', 'pandroit', (SELECT id from player_info WHERE url = 'https://www.chess.com/member/pandroit')); + +INSERT INTO "season" (year_start, year_end) +VALUES (2021, 2021); + +INSERT INTO "matchday" (number, season) +VALUES (1, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 1, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 8, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 4, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 3, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 6, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 9, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 7, 1); + +INSERT INTO "matchday" (number, season) +VALUES (2, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 11, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 12, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 8, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 4, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 3, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 6, 2); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 9, 2); + +INSERT INTO "matchday" (number, season) +VALUES (3, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 1, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 11, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 12, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 8, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 4, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 3, 3); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 6, 3); + +INSERT INTO "matchday" (number, season) +VALUES (4, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 5, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 10, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 11, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 12, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 8, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 4, 4); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 3, 4); + +INSERT INTO "matchday" (number, season) +VALUES (5, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 1, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 5, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 10, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 11, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 12, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 8, 5); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 4, 5); + +INSERT INTO "matchday" (number, season) +VALUES (6, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 2, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 13, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 5, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 10, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 11, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 12, 6); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 8, 6); + +INSERT INTO "matchday" (number, season) +VALUES (7, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 1, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 2, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 13, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 5, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 10, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 11, 7); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 12, 7); + +INSERT INTO "matchday" (number, season) +VALUES (8, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 7, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 14, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 2, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 13, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 5, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 10, 8); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 11, 8); + +INSERT INTO "matchday" (number, season) +VALUES (9, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 1, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 7, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 14, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 2, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 13, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 5, 9); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 10, 9); + +INSERT INTO "matchday" (number, season) +VALUES (10, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 6, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 9, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 7, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 14, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 2, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 13, 10); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 5, 10); + +INSERT INTO "matchday" (number, season) +VALUES (11, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 1, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 6, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 9, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 7, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 14, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 2, 11); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 13, 11); + +INSERT INTO "matchday" (number, season) +VALUES (12, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 4, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 3, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 6, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 9, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 7, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 14, 12); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 2, 12); + +INSERT INTO "matchday" (number, season) +VALUES (13, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 1, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 4, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 3, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 6, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 9, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 7, 13); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 14, 13); + +INSERT INTO "matchday" (number, season) +VALUES (14, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 12, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 11, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 10, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 5, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 13, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 2, 14); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 14, 14); + +INSERT INTO "matchday" (number, season) +VALUES (15, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 1, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 10, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 5, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 13, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 2, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 14, 15); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 7, 15); + +INSERT INTO "matchday" (number, season) +VALUES (16, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 10, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 5, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 13, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 2, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 14, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 7, 16); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 9, 16); + +INSERT INTO "matchday" (number, season) +VALUES (17, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 1, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 13, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 2, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 14, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 7, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 9, 17); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 6, 17); + +INSERT INTO "matchday" (number, season) +VALUES (18, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 13, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 2, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 14, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 7, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 9, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 6, 18); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 3, 18); + +INSERT INTO "matchday" (number, season) +VALUES (19, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 1, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 14, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 7, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 9, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 6, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 3, 19); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (8, 4, 19); + +INSERT INTO "matchday" (number, season) +VALUES (20, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 14, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 7, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 9, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 6, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 3, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 4, 20); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (12, 8, 20); + +INSERT INTO "matchday" (number, season) +VALUES (21, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 1, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 9, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 6, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 3, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 4, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 8, 21); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (11, 12, 21); + +INSERT INTO "matchday" (number, season) +VALUES (22, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 9, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 6, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 3, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 4, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 8, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 12, 22); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (10, 11, 22); + +INSERT INTO "matchday" (number, season) +VALUES (23, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 1, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 3, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 4, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 8, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 12, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 11, 23); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (5, 10, 23); + +INSERT INTO "matchday" (number, season) +VALUES (24, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 3, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 4, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 8, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 12, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 11, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 10, 24); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (13, 5, 24); + +INSERT INTO "matchday" (number, season) +VALUES (25, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 1, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 8, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 12, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 11, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 10, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 5, 25); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (2, 13, 25); + +INSERT INTO "matchday" (number, season) +VALUES (26, 1); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (1, 8, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (4, 12, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (3, 11, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (6, 10, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (9, 5, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (7, 13, 26); +INSERT INTO "match" ("player1", "player2", "matchday") +VALUES (14, 2, 26); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8722014513'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8722014513')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8723231941'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8723231941')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8724907847'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8724907847')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8725036665'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8725036665')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8725614379'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8725614379')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8726184583'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 2 AND player2 = 9 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8726184583')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8616485043'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8616485043')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8618149677'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8618149677')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8702757001'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8702757001')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8705204521'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8705204521')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8705796221'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8705796221')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8706438057'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 14 AND player2 = 7 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8706438057')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8617630129'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8617630129')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8618225533'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8618225533')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8619306585'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8619306585')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8619471075'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8619471075')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8620078695'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8620078695')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8620568591'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 10 AND player2 = 4 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8620568591')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8504667551'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), TRUE, 0, + (SELECT id from game_info WHERE chess_com_id = '8504667551')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8505882389'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8505882389')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8507004247'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8507004247')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8507617133'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8507617133')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8508203475'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8508203475')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8508297031'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 13 AND player2 = 6 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8508297031')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8624735639'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8624735639')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8625353555'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8625353555')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8625963087'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8625963087')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8853361491'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8853361491')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8853455035'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8853455035')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8854002505'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 11 AND player2 = 8 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8854002505')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8858219835'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8858219835')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8859375675'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8859375675')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8859976305'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8859976305')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8860591347'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8860591347')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8860675419'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8860675419')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8861228997'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 12 AND player2 = 1 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8861228997')); + + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8877523129'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8877523129')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('600', '8878652939'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8878652939')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8879853665'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), FALSE, 1, + (SELECT id from game_info WHERE chess_com_id = '8879853665')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('300', '8880469509'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), TRUE, 1, + (SELECT id from game_info WHERE chess_com_id = '8880469509')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8881562307'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), FALSE, -1, + (SELECT id from game_info WHERE chess_com_id = '8881562307')); + +INSERT INTO "game_info" (time_control, chess_com_id) +VALUES ('180', '8881610243'); +INSERT INTO "game" (match, player1_is_white, result, info) +VALUES ((SELECT id from match WHERE player1 = 5 AND player2 = 3 AND matchday = 1), TRUE, -1, + (SELECT id from game_info WHERE chess_com_id = '8881610243')); \ No newline at end of file diff --git a/frontend/app/components/leafletmap/leaflet-map.js b/frontend/app/components/leafletmap/leaflet-map.js index c038c00..de38a03 100644 --- a/frontend/app/components/leafletmap/leaflet-map.js +++ b/frontend/app/components/leafletmap/leaflet-map.js @@ -6,31 +6,33 @@ const openStreetMapLayer = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; const openStreetMapAttribution = `© OpenStreetMap contributors`; export class LeafletMap extends PolymerElement { - _attachDom(dom) { - // Do not use a shadow root - this.appendChild(dom); - } - - render() { - return html``; - } - - ready() { - super.ready(); - - this.map = L.map(this); - let tileLayer = L.tileLayer(openStreetMapLayer, { - attribution: openStreetMapAttribution, - maxZoom: 13, - }); - tileLayer.addTo(this.map); - } - - async setView(latitude, longitude, zoomLevel) { - this.map.setView([latitude, longitude], zoomLevel); - } - static get is() { - return 'leaflet-map'; - } + _attachDom(dom) { + // Do not use a shadow root + this.appendChild(dom); + } + + render() { + return html``; + } + + ready() { + super.ready(); + + this.map = L.map(this); + let tileLayer = L.tileLayer(openStreetMapLayer, { + attribution: openStreetMapAttribution, + maxZoom: 13, + }); + tileLayer.addTo(this.map); + } + + async setView(latitude, longitude, zoomLevel) { + this.map.setView([latitude, longitude], zoomLevel); + } + + static get is() { + return 'leaflet-map'; + } } + customElements.define(LeafletMap.is, LeafletMap); diff --git a/frontend/app/views/example/about/about-view.css b/frontend/app/views/example/about/about-view.css index eda50e5..e5bc118 100644 --- a/frontend/app/views/example/about/about-view.css +++ b/frontend/app/views/example/about/about-view.css @@ -1,3 +1,3 @@ .about-view { - display: block; + display: block; } diff --git a/frontend/app/views/example/addressform/address-form-view.css b/frontend/app/views/example/addressform/address-form-view.css index bb10df5..1520ade 100644 --- a/frontend/app/views/example/addressform/address-form-view.css +++ b/frontend/app/views/example/addressform/address-form-view.css @@ -1,10 +1,11 @@ .address-form-view { - display: block; - margin: 0 auto; - max-width: 1024px; - padding: 0 var(--lumo-space-l); + display: block; + margin: 0 auto; + max-width: 1024px; + padding: 0 var(--lumo-space-l); } + .address-form-view .button-layout { - margin-bottom: var(--lumo-space-l); - margin-top: var(--lumo-space-m); + margin-bottom: var(--lumo-space-l); + margin-top: var(--lumo-space-m); } diff --git a/frontend/app/views/example/cardlist/card-list-view.css b/frontend/app/views/example/cardlist/card-list-view.css index c0729f4..4d652f3 100644 --- a/frontend/app/views/example/cardlist/card-list-view.css +++ b/frontend/app/views/example/cardlist/card-list-view.css @@ -1,70 +1,70 @@ .card-list-view { - display: block; - height: 100%; + display: block; + height: 100%; } .card-list-view vaadin-grid { - height: 100%; - line-height: var(--lumo-line-height-m); + height: 100%; + line-height: var(--lumo-line-height-m); } .card-list-view vaadin-grid, .card-list-view vaadin-grid-cell-content { - background-color: var(--lumo-contrast-10pct); + background-color: var(--lumo-contrast-10pct); } .card-list-view .card { - background-color: var(--lumo-base-color); - border-radius: var(--lumo-border-radius); - box-shadow: var(--lumo-box-shadow-xs); - padding: calc(var(--lumo-space-s) * 1.5) var(--lumo-space-m); + background-color: var(--lumo-base-color); + border-radius: var(--lumo-border-radius); + box-shadow: var(--lumo-box-shadow-xs); + padding: calc(var(--lumo-space-s) * 1.5) var(--lumo-space-m); } .card-list-view img { - border-radius: 50%; - flex-shrink: 0; - height: var(--lumo-size-m); - margin-right: calc(var(--lumo-space-s) * 1.5); - width: var(--lumo-size-m); + border-radius: 50%; + flex-shrink: 0; + height: var(--lumo-size-m); + margin-right: calc(var(--lumo-space-s) * 1.5); + width: var(--lumo-size-m); } .card-list-view .header { - align-items: baseline; + align-items: baseline; } .card-list-view .name { - font-size: var(--lumo-font-size-s); - font-weight: bold; - margin-right: var(--lumo-space-s); + font-size: var(--lumo-font-size-s); + font-weight: bold; + margin-right: var(--lumo-space-s); } .card-list-view .date { - color: var(--lumo-tertiary-text-color); - font-size: var(--lumo-font-size-xs); + color: var(--lumo-tertiary-text-color); + font-size: var(--lumo-font-size-xs); } .card-list-view .post { - color: var(--lumo-secondary-text-color); - font-size: var(--lumo-font-size-s); - margin-bottom: var(--lumo-space-s); - white-space: normal; + color: var(--lumo-secondary-text-color); + font-size: var(--lumo-font-size-s); + margin-bottom: var(--lumo-space-s); + white-space: normal; } .card-list-view .actions { - align-items: center; + align-items: center; } .card-list-view iron-icon { - color: var(--lumo-tertiary-text-color); - height: calc(var(--lumo-icon-size-s) * 0.8); - margin-right: var(--lumo-space-s); - width: calc(var(--lumo-icon-size-s) * 0.8); + color: var(--lumo-tertiary-text-color); + height: calc(var(--lumo-icon-size-s) * 0.8); + margin-right: var(--lumo-space-s); + width: calc(var(--lumo-icon-size-s) * 0.8); } .card-list-view .likes, .card-list-view .comments, .card-list-view .shares { - color: var(--lumo-tertiary-text-color); - font-size: var(--lumo-font-size-xs); - margin-right: var(--lumo-space-l); + color: var(--lumo-tertiary-text-color); + font-size: var(--lumo-font-size-xs); + margin-right: var(--lumo-space-l); } diff --git a/frontend/app/views/example/creditcardform/credit-card-form-view.css b/frontend/app/views/example/creditcardform/credit-card-form-view.css index 2587846..b039cbc 100644 --- a/frontend/app/views/example/creditcardform/credit-card-form-view.css +++ b/frontend/app/views/example/creditcardform/credit-card-form-view.css @@ -1,10 +1,11 @@ .credit-card-form-view { - display: block; - margin: 0 auto; - max-width: 1024px; - padding: 0 var(--lumo-space-l); + display: block; + margin: 0 auto; + max-width: 1024px; + padding: 0 var(--lumo-space-l); } + .credit-card-form-view .button-layout { - margin-bottom: var(--lumo-space-l); - margin-top: var(--lumo-space-m); + margin-bottom: var(--lumo-space-l); + margin-top: var(--lumo-space-m); } diff --git a/frontend/app/views/example/helloworld/hello-world-view.css b/frontend/app/views/example/helloworld/hello-world-view.css index c61de2b..8f504a7 100644 --- a/frontend/app/views/example/helloworld/hello-world-view.css +++ b/frontend/app/views/example/helloworld/hello-world-view.css @@ -1,4 +1,4 @@ .hello-world-view { - display: block; - padding: 1em; + display: block; + padding: 1em; } diff --git a/frontend/app/views/example/map/map-view.css b/frontend/app/views/example/map/map-view.css index 8485dc5..e56b36d 100644 --- a/frontend/app/views/example/map/map-view.css +++ b/frontend/app/views/example/map/map-view.css @@ -1,8 +1,8 @@ .map-view { - display: flex; - height: 100%; + display: flex; + height: 100%; } .map-view .map { - flex: 1; + flex: 1; } diff --git a/frontend/app/views/example/masterdetail/master-detail-view.css b/frontend/app/views/example/masterdetail/master-detail-view.css index 25cdb9f..a29608f 100644 --- a/frontend/app/views/example/masterdetail/master-detail-view.css +++ b/frontend/app/views/example/masterdetail/master-detail-view.css @@ -1,33 +1,33 @@ .master-detail-view { - display: flex; - height: 100%; - flex-direction: column; + display: flex; + height: 100%; + flex-direction: column; } .master-detail-view .grid-wrapper { - flex-grow: 1; - width: 100%; + flex-grow: 1; + width: 100%; } .master-detail-view .full-size { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .master-detail-view #editor-layout { - width: 400px; - display: flex; - flex-direction: column; + width: 400px; + display: flex; + flex-direction: column; } .master-detail-view #editor { - padding: var(--lumo-space-l); - flex-grow: 1; + padding: var(--lumo-space-l); + flex-grow: 1; } .master-detail-view #button-layout { - width: 100%; - flex-wrap: wrap; - background-color: var(--lumo-contrast-5pct); - padding: var(--lumo-space-s) var(--lumo-space-l); + width: 100%; + flex-wrap: wrap; + background-color: var(--lumo-contrast-5pct); + padding: var(--lumo-space-s) var(--lumo-space-l); } diff --git a/frontend/app/views/example/personform/person-form-view.css b/frontend/app/views/example/personform/person-form-view.css index a76669d..2b0e70a 100644 --- a/frontend/app/views/example/personform/person-form-view.css +++ b/frontend/app/views/example/personform/person-form-view.css @@ -1,10 +1,11 @@ .person-form-view { - display: block; - margin: 0 auto; - max-width: 1024px; - padding: 0 var(--lumo-space-l); + display: block; + margin: 0 auto; + max-width: 1024px; + padding: 0 var(--lumo-space-l); } + .person-form-view .button-layout { - margin-bottom: var(--lumo-space-l); - margin-top: var(--lumo-space-m); + margin-bottom: var(--lumo-space-l); + margin-top: var(--lumo-space-m); } diff --git a/frontend/app/views/matchday/matchday-view.css b/frontend/app/views/matchday/matchday-view.css index 9bb760e..c21ddb3 100644 --- a/frontend/app/views/matchday/matchday-view.css +++ b/frontend/app/views/matchday/matchday-view.css @@ -1,11 +1,11 @@ .matchday-view .column_header { - font-weight: bold; - font-size: large; + font-weight: bold; + font-size: large; } .matchday-view .matchday-header-label-layout { - width: 100%; - justify-content: center; - font-size: x-large; + width: 100%; + justify-content: center; + font-size: x-large; } diff --git a/frontend/app/views/table/table-view.css b/frontend/app/views/table/table-view.css index da08625..d3db2af 100644 --- a/frontend/app/views/table/table-view.css +++ b/frontend/app/views/table/table-view.css @@ -1,10 +1,10 @@ .table-view .important-table-column-header { - font-weight: bold; - font-size: large; + font-weight: bold; + font-size: large; } .table-view .table-header-label-layout { - width: 100%; - justify-content: center; - font-size: x-large; + width: 100%; + justify-content: center; + font-size: x-large; } diff --git a/src/main/java/app/data/service/PlayerService.java b/src/main/java/app/data/service/PlayerService.java index 9cd8e81..153d649 100644 --- a/src/main/java/app/data/service/PlayerService.java +++ b/src/main/java/app/data/service/PlayerService.java @@ -37,6 +37,12 @@ public class PlayerService extends CrudService { return new PlayerForTableProvider(matchday).getPlayersForTableSorted(true); } + public List getAllPlayersSorted() { + return repository.findAll().stream() + .sorted((player1, player2) -> player1.getNickname().compareToIgnoreCase(player2.getNickname())) + .collect(Collectors.toList()); + } + private class PlayerForTableProvider { List matchdays = new ArrayList<>(); List calculatedMatches = new ArrayList<>(); diff --git a/src/main/java/app/data/service/SeasonService.java b/src/main/java/app/data/service/SeasonService.java index bdd1849..08061fd 100644 --- a/src/main/java/app/data/service/SeasonService.java +++ b/src/main/java/app/data/service/SeasonService.java @@ -1,5 +1,6 @@ package app.data.service; +import app.data.entity.Player; import app.data.entity.Season; import app.data.repository.SeasonRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -46,4 +47,11 @@ public class SeasonService extends CrudService { .findFirst(); } + public List getAllSeasonsForPlayerSorted(Player player) { + return repository.findAll().stream() + .filter(season -> season.getMatchdays().stream() + .anyMatch(matchday -> matchday.getMatches().stream() + .anyMatch(match -> match.getPlayer1().equals(player) || match.getPlayer2().equals(player)))) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/app/navigation/NavigationLevel.java b/src/main/java/app/navigation/NavigationLevel.java deleted file mode 100644 index 8dff644..0000000 --- a/src/main/java/app/navigation/NavigationLevel.java +++ /dev/null @@ -1,8 +0,0 @@ -package app.navigation; - -public enum NavigationLevel { - NONE, - SEASON, - MATCHDAY, - MATCH -} diff --git a/src/main/java/app/navigation/NavigationUtils.java b/src/main/java/app/navigation/NavigationUtils.java index 80069b6..b63117a 100644 --- a/src/main/java/app/navigation/NavigationUtils.java +++ b/src/main/java/app/navigation/NavigationUtils.java @@ -4,39 +4,23 @@ import app.utils.EntityStringUtils; import com.vaadin.flow.router.WildcardParameter; import org.springframework.lang.NonNull; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") -class NavigationUtils { - private static final String EDIT = "edit"; +public class NavigationUtils { + public static final String EDIT = "edit"; private NavigationUtils() { } - @NonNull - static Map> getParameterMap(@WildcardParameter String param) { - Map> map = new HashMap<>(); - String[] params = param.split("/"); - if (params.length >= 1 && !params[0].equals(EDIT)) map.put(NavigationLevel.SEASON, Optional.of(params[0])); - if (params.length >= 2 && !params[1].equals(EDIT)) map.put(NavigationLevel.MATCHDAY, Optional.of(params[1])); - if (params.length >= 3 && !params[2].equals(EDIT)) map.put(NavigationLevel.MATCH, Optional.of(params[2])); - - map.putIfAbsent(NavigationLevel.MATCH, Optional.empty()); - map.putIfAbsent(NavigationLevel.MATCHDAY, Optional.empty()); - map.putIfAbsent(NavigationLevel.SEASON, Optional.empty()); - return map; - } - - static boolean editFlag(@WildcardParameter String param) { + public static boolean editFlag(@WildcardParameter String param) { String[] params = param.split("/"); return params[params.length - 1].equals(EDIT); } @NonNull - static String getWildcardParam(boolean editFlag, String... params) { + public static String getWildcardParam(boolean editFlag, String... params) { StringBuilder stringBuilder = new StringBuilder(); for (String param : params) { if (param == null || param.equals("")) { @@ -48,7 +32,7 @@ class NavigationUtils { return stringBuilder.toString(); } - static Optional getObjectFromParam(List objectList, Optional param) { + public static Optional getObjectFromParam(List objectList, Optional param) { if (param.isEmpty()) { return Optional.empty(); } diff --git a/src/main/java/app/navigation/components/NavigationHeader.java b/src/main/java/app/navigation/components/NavigationHeader.java deleted file mode 100644 index c62db5c..0000000 --- a/src/main/java/app/navigation/components/NavigationHeader.java +++ /dev/null @@ -1,40 +0,0 @@ -package app.navigation.components; - -import app.navigation.Navigation; -import com.vaadin.flow.component.html.Label; -import com.vaadin.flow.component.orderedlayout.FlexComponent; -import com.vaadin.flow.component.orderedlayout.HorizontalLayout; - -public class NavigationHeader extends HorizontalLayout { - - private final Navigation navigation; - - private final Label seasonLabel = new Label("Season:"); - private final Label matchdayLabel = new Label("Matchday:"); - private final Label matchLabel = new Label("Match:"); - - public NavigationHeader(Navigation navigation) { - this.navigation = navigation; - configureLayout(); - configureChildren(); - } - - private void configureLayout() { - setWidthFull(); - setAlignItems(FlexComponent.Alignment.CENTER); - setJustifyContentMode(FlexComponent.JustifyContentMode.END); - } - - private void configureChildren() { - removeAll(); - if (navigation.seasonEnabled()) { - add(seasonLabel, navigation.getSeasonSelect()); - } - if (navigation.matchdayEnabled()) { - add(matchdayLabel, navigation.getMatchdaySelect()); - } - if (navigation.matchEnabled()) { - add(matchLabel, navigation.getMatchSelect()); - } - } -} diff --git a/src/main/java/app/navigation/components/button/ButtonUtils.java b/src/main/java/app/navigation/components/button/ButtonUtils.java deleted file mode 100644 index 701b6a0..0000000 --- a/src/main/java/app/navigation/components/button/ButtonUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package app.navigation.components.button; - -import app.navigation.Navigation; - -import java.util.concurrent.atomic.AtomicInteger; - -class ButtonUtils { - - static int getMatchdayIndex(Navigation navigation) { - AtomicInteger index = new AtomicInteger(); - navigation.getSelectedMatchday().ifPresent(matchday -> index.set(navigation.getMatchdayList().indexOf(matchday))); - return index.get(); - } -} diff --git a/src/main/java/app/navigation/components/button/NextMatchdayButton.java b/src/main/java/app/navigation/components/button/NextMatchdayButton.java deleted file mode 100644 index a1e57d5..0000000 --- a/src/main/java/app/navigation/components/button/NextMatchdayButton.java +++ /dev/null @@ -1,38 +0,0 @@ -package app.navigation.components.button; - -import app.data.entity.Matchday; -import app.navigation.Navigation; -import com.vaadin.flow.component.button.Button; -import com.vaadin.flow.component.icon.Icon; -import com.vaadin.flow.component.icon.VaadinIcon; - -import java.util.Optional; - -public class NextMatchdayButton extends Button { - - private final Navigation navigation; - - public NextMatchdayButton(Navigation navigation) { - this.navigation = navigation; - - if (!navigation.matchdayEnabled()) - throw new IllegalStateException("Cannot instantiate NextMatchdayButton when Matchdays are not enabled!"); - - setIcon(new Icon(VaadinIcon.ARROW_RIGHT)); - - navigation.addRunnableToBeRunAfterSelection(this::configure); - } - - private void configure() { - Optional nextMatchday = getNextMatchday(); - setEnabled(nextMatchday.isPresent()); - addClickListener(event -> nextMatchday.ifPresent(matchday -> navigation.getMatchdaySelect().setValue(matchday))); - } - - private Optional getNextMatchday() { - int index = ButtonUtils.getMatchdayIndex(navigation); - if (index >= 0 && index < navigation.getMatchdayList().size() - 1) - return Optional.ofNullable(navigation.getMatchdayList().get(index + 1)); - return Optional.empty(); - } -} diff --git a/src/main/java/app/navigation/components/button/PrevMatchdayButton.java b/src/main/java/app/navigation/components/button/PrevMatchdayButton.java deleted file mode 100644 index cd3dd95..0000000 --- a/src/main/java/app/navigation/components/button/PrevMatchdayButton.java +++ /dev/null @@ -1,37 +0,0 @@ -package app.navigation.components.button; - -import app.data.entity.Matchday; -import app.navigation.Navigation; -import com.vaadin.flow.component.button.Button; -import com.vaadin.flow.component.icon.Icon; -import com.vaadin.flow.component.icon.VaadinIcon; - -import java.util.Optional; - -public class PrevMatchdayButton extends Button { - - private final Navigation navigation; - - public PrevMatchdayButton(Navigation navigation) { - this.navigation = navigation; - - if (!navigation.matchdayEnabled()) - throw new IllegalStateException("Cannot instantiate PrevMatchdayButton when Matchdays are not enabled!"); - - setIcon(new Icon(VaadinIcon.ARROW_LEFT)); - - navigation.addRunnableToBeRunAfterSelection(this::configure); - } - - private void configure() { - Optional prevMatchday = getPrevMatchday(); - setEnabled(prevMatchday.isPresent()); - addClickListener(event -> prevMatchday.ifPresent(matchday -> navigation.getMatchdaySelect().setValue(matchday))); - } - - private Optional getPrevMatchday() { - int index = ButtonUtils.getMatchdayIndex(navigation); - if (index > 0) return Optional.ofNullable(navigation.getMatchdayList().get(index - 1)); - return Optional.empty(); - } -} diff --git a/src/main/java/app/navigation/player/PlayerNavigation.java b/src/main/java/app/navigation/player/PlayerNavigation.java new file mode 100644 index 0000000..24239dd --- /dev/null +++ b/src/main/java/app/navigation/player/PlayerNavigation.java @@ -0,0 +1,194 @@ +package app.navigation.player; + +import app.components.label.ValidationLabel; +import app.data.entity.Player; +import app.data.entity.Season; +import app.data.service.PlayerService; +import app.data.service.SeasonService; +import app.navigation.NavigationUtils; +import app.utils.EntityStringUtils; +import com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent; +import com.vaadin.flow.component.HasValue.ValueChangeListener; +import com.vaadin.flow.component.UI; +import com.vaadin.flow.component.select.Select; +import com.vaadin.flow.router.BeforeEvent; +import com.vaadin.flow.router.HasUrlParameter; +import com.vaadin.flow.router.WildcardParameter; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@SuppressWarnings("OptionalUsedAsFieldOrParameterType") +public class PlayerNavigation implements HasUrlParameter { + + private String route; + + private final List runnablesToBeRunAfterSelection = new ArrayList<>(); + + private final PlayerService playerService; + private final SeasonService seasonService; + + private final List playerList = new ArrayList<>(); + private final List seasonList = new ArrayList<>(); + + private final Select playerSelect = new Select<>(); + private final Select seasonSelect = new Select<>(); + + private final ValidationLabel validationLabel = new ValidationLabel(); + + public PlayerNavigation(@Autowired PlayerService playerService, + @Autowired SeasonService seasonService) { + this.playerService = playerService; + this.seasonService = seasonService; + + fillPlayerSelectWithData(); + + playerSelect.addValueChangeListener(playerSelectValueChangeListener()); + seasonSelect.addValueChangeListener(seasonSelectValueChangeListener()); + + playerSelect.setItemLabelGenerator(EntityStringUtils::getPlayerString); + seasonSelect.setItemLabelGenerator(EntityStringUtils::getSeasonString); + } + + public void setRoute(String route) { + this.route = route; + } + + public void addRunnableToBeRunAfterSelection(Runnable runnable) { + runnablesToBeRunAfterSelection.add(runnable); + } + + private String getRoute() { + if (route != null) return route; + throw new IllegalStateException("Route must be set!"); + } + + private void updateUrl() { + String playerParam = null; + String seasonParam = null; + if (playerSelect.getOptionalValue().isPresent()) + playerParam = EntityStringUtils.getPlayerStringForURL(playerSelect.getValue()); + if (seasonSelect.getOptionalValue().isPresent()) + seasonParam = EntityStringUtils.getSeasonStringForURL(seasonSelect.getValue()); + + String params = NavigationUtils.getWildcardParam(false, playerParam, seasonParam); + UI.getCurrent().getPage().getHistory().pushState(null, String.format("%s/%s", getRoute(), params)); + } + + private ValueChangeListener, Player>> playerSelectValueChangeListener() { + return event -> { + fillSeasonSelectWithData(event.getValue()); + autoselectSeason(); + }; + } + + private ValueChangeListener, Season>> seasonSelectValueChangeListener() { + return event -> doPostSelectionStuff(); + } + + private void doPostSelectionStuff() { + validationLabel.setValid(true); + updateUrl(); + runnablesToBeRunAfterSelection.forEach(Runnable::run); + } + + private void autoselectPlayer() { + if (playerList.isEmpty()) { + validationLabel.setText("No Players in List!"); + validationLabel.setValid(false); + return; + } + playerSelect.setValue(playerList.get(0)); + } + + private void autoselectSeason() { + if (seasonList.isEmpty()) { + validationLabel.setText("No Season in List!"); + validationLabel.setValid(false); + return; + } + seasonSelect.setValue(seasonList.get(seasonList.size() - 1)); + } + + private void fillPlayerSelectWithData() { + playerList.clear(); + playerList.addAll(playerService.getAllPlayersSorted()); + playerSelect.setItems(playerList); + } + + private void fillSeasonSelectWithData(Player player) { + seasonList.clear(); + seasonList.addAll(seasonService.getAllSeasonsForPlayerSorted(player)); + seasonSelect.setItems(seasonList); + } + + @Override + public void setParameter(BeforeEvent event, @WildcardParameter String param) { + Map> map = PlayerNavigationUtils.getParameterMap(param); + navigate(map.get(PlayerNavigationLevel.PLAYER), map.get(PlayerNavigationLevel.SEASON)); + } + + private void navigate(Optional playerParam, Optional seasonParam) { + Optional player = NavigationUtils.getObjectFromParam(playerList, playerParam); + if (player.isPresent()) playerSelect.setValue(player.get()); + else autoselectPlayer(); + + Optional season = NavigationUtils.getObjectFromParam(seasonList, seasonParam); + if (season.isPresent()) seasonSelect.setValue(season.get()); + else autoselectSeason(); + } + + public ValidationLabel getValidationLabel() { + return validationLabel; + } + + public List getPlayerList() { + return playerList; + } + + public List getSeasonList() { + return seasonList; + } + + public Select getPlayerSelect() { + return playerSelect; + } + + public Select getSeasonSelect() { + return seasonSelect; + } + + public Optional getSelectedPlayer() { + return playerSelect.getOptionalValue(); + } + + public Optional getSelectedSeason() { + return seasonSelect.getOptionalValue(); + } + + public PlayerService getPlayerService() { + return playerService; + } + + public SeasonService getSeasonService() { + return seasonService; + } + + public String getWildcardParam() { + return NavigationUtils.getWildcardParam( + false, + getPlayerParam().orElse(null), + getSeasonParam().orElse(null)); + } + + public Optional getPlayerParam() { + return getSelectedPlayer().map(EntityStringUtils::getPlayerStringForURL); + } + + public Optional getSeasonParam() { + return getSelectedSeason().map(EntityStringUtils::getSeasonStringForURL); + } +} diff --git a/src/main/java/app/navigation/player/PlayerNavigationLevel.java b/src/main/java/app/navigation/player/PlayerNavigationLevel.java new file mode 100644 index 0000000..ed4c2d2 --- /dev/null +++ b/src/main/java/app/navigation/player/PlayerNavigationLevel.java @@ -0,0 +1,7 @@ +package app.navigation.player; + +public enum PlayerNavigationLevel { + NONE, + PLAYER, + SEASON, +} diff --git a/src/main/java/app/navigation/player/PlayerNavigationService.java b/src/main/java/app/navigation/player/PlayerNavigationService.java new file mode 100644 index 0000000..1b9789d --- /dev/null +++ b/src/main/java/app/navigation/player/PlayerNavigationService.java @@ -0,0 +1,23 @@ +package app.navigation.player; + +import app.data.service.PlayerService; +import app.data.service.SeasonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class PlayerNavigationService { + + private final SeasonService seasonService; + private final PlayerService playerService; + + public PlayerNavigationService(@Autowired PlayerService playerService, + @Autowired SeasonService seasonService) { + this.playerService = playerService; + this.seasonService = seasonService; + } + + public PlayerNavigation getNewNavigation() { + return new PlayerNavigation(playerService, seasonService); + } +} diff --git a/src/main/java/app/navigation/player/PlayerNavigationUtils.java b/src/main/java/app/navigation/player/PlayerNavigationUtils.java new file mode 100644 index 0000000..07c3fe5 --- /dev/null +++ b/src/main/java/app/navigation/player/PlayerNavigationUtils.java @@ -0,0 +1,25 @@ +package app.navigation.player; + +import com.vaadin.flow.router.WildcardParameter; +import org.springframework.lang.NonNull; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +class PlayerNavigationUtils { + private PlayerNavigationUtils() { + } + + @NonNull + static Map> getParameterMap(@WildcardParameter String param) { + Map> map = new HashMap<>(); + String[] params = param.split("/"); + if (params.length >= 1) map.put(PlayerNavigationLevel.PLAYER, Optional.of(params[0])); + if (params.length >= 2) map.put(PlayerNavigationLevel.SEASON, Optional.of(params[1])); + + map.putIfAbsent(PlayerNavigationLevel.PLAYER, Optional.empty()); + map.putIfAbsent(PlayerNavigationLevel.SEASON, Optional.empty()); + return map; + } +} diff --git a/src/main/java/app/navigation/player/components/PlayerNavigationHeader.java b/src/main/java/app/navigation/player/components/PlayerNavigationHeader.java new file mode 100644 index 0000000..22aa025 --- /dev/null +++ b/src/main/java/app/navigation/player/components/PlayerNavigationHeader.java @@ -0,0 +1,31 @@ +package app.navigation.player.components; + +import app.navigation.player.PlayerNavigation; +import com.vaadin.flow.component.html.Label; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; + +public class PlayerNavigationHeader extends HorizontalLayout { + + private final PlayerNavigation playerNavigation; + + private final Label seasonLabel = new Label("Season:"); + private final Label playerLabel = new Label("Player:"); + + public PlayerNavigationHeader(PlayerNavigation playerNavigation) { + this.playerNavigation = playerNavigation; + defineLayout(); + configureChildren(); + } + + private void defineLayout() { + setWidthFull(); + setAlignItems(Alignment.CENTER); + setJustifyContentMode(JustifyContentMode.END); + } + + private void configureChildren() { + removeAll(); + add(playerLabel, playerNavigation.getPlayerSelect()); + add(seasonLabel, playerNavigation.getSeasonSelect()); + } +} diff --git a/src/main/java/app/navigation/player/components/button/NextPlayerButton.java b/src/main/java/app/navigation/player/components/button/NextPlayerButton.java new file mode 100644 index 0000000..ada31c8 --- /dev/null +++ b/src/main/java/app/navigation/player/components/button/NextPlayerButton.java @@ -0,0 +1,37 @@ +package app.navigation.player.components.button; + +import app.data.entity.Player; +import app.navigation.player.PlayerNavigation; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.icon.VaadinIcon; + +import java.util.List; +import java.util.Optional; + +public class NextPlayerButton extends Button { + + private final PlayerNavigation playerNavigation; + + public NextPlayerButton(PlayerNavigation playerNavigation) { + this.playerNavigation = playerNavigation; + + setIcon(VaadinIcon.ARROW_RIGHT.create()); + + playerNavigation.addRunnableToBeRunAfterSelection(this::configure); + } + + private void configure() { + Optional nextPlayer = getNextPlayer(); + setEnabled(nextPlayer.isPresent()); + addClickListener(event -> nextPlayer.ifPresent(player -> playerNavigation.getPlayerSelect().setValue(player))); + } + + private Optional getNextPlayer() { + int index = PlayerButtonUtils.getPlayerIndex(playerNavigation); + + if (index < 0) return Optional.empty(); + + List playerList = playerNavigation.getPlayerList(); + return Optional.ofNullable(playerList.get((index + 1) % playerList.size())); + } +} diff --git a/src/main/java/app/navigation/player/components/button/PlayerButtonUtils.java b/src/main/java/app/navigation/player/components/button/PlayerButtonUtils.java new file mode 100644 index 0000000..1a5620e --- /dev/null +++ b/src/main/java/app/navigation/player/components/button/PlayerButtonUtils.java @@ -0,0 +1,14 @@ +package app.navigation.player.components.button; + +import app.navigation.player.PlayerNavigation; + +import java.util.concurrent.atomic.AtomicInteger; + +class PlayerButtonUtils { + + static int getPlayerIndex(PlayerNavigation playerNavigation) { + AtomicInteger index = new AtomicInteger(-1); + playerNavigation.getSelectedPlayer().ifPresent(player -> index.set(playerNavigation.getPlayerList().indexOf(player))); + return index.get(); + } +} diff --git a/src/main/java/app/navigation/player/components/button/PrevPlayerButton.java b/src/main/java/app/navigation/player/components/button/PrevPlayerButton.java new file mode 100644 index 0000000..b359976 --- /dev/null +++ b/src/main/java/app/navigation/player/components/button/PrevPlayerButton.java @@ -0,0 +1,37 @@ +package app.navigation.player.components.button; + +import app.data.entity.Player; +import app.navigation.player.PlayerNavigation; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.icon.VaadinIcon; + +import java.util.List; +import java.util.Optional; + +public class PrevPlayerButton extends Button { + + private final PlayerNavigation playerNavigation; + + public PrevPlayerButton(PlayerNavigation playerNavigation) { + this.playerNavigation = playerNavigation; + + setIcon(VaadinIcon.ARROW_LEFT.create()); + + playerNavigation.addRunnableToBeRunAfterSelection(this::configure); + } + + private void configure() { + Optional prevPlayer = getPrevPlayer(); + setEnabled(prevPlayer.isPresent()); + addClickListener(event -> prevPlayer.ifPresent(player -> playerNavigation.getPlayerSelect().setValue(player))); + } + + private Optional getPrevPlayer() { + int index = PlayerButtonUtils.getPlayerIndex(playerNavigation); + + if (index < 0) return Optional.empty(); + + List playerList = playerNavigation.getPlayerList(); + return Optional.ofNullable(playerList.get((index - 1) % playerList.size())); + } +} diff --git a/src/main/java/app/navigation/Navigation.java b/src/main/java/app/navigation/regular/RegularNavigation.java similarity index 85% rename from src/main/java/app/navigation/Navigation.java rename to src/main/java/app/navigation/regular/RegularNavigation.java index 855c49b..853da40 100644 --- a/src/main/java/app/navigation/Navigation.java +++ b/src/main/java/app/navigation/regular/RegularNavigation.java @@ -1,4 +1,4 @@ -package app.navigation; +package app.navigation.regular; import app.components.label.ValidationLabel; import app.data.entity.Match; @@ -7,9 +7,10 @@ import app.data.entity.Season; import app.data.service.MatchService; import app.data.service.MatchdayService; import app.data.service.SeasonService; +import app.navigation.NavigationUtils; import app.utils.EntityStringUtils; -import com.vaadin.flow.component.AbstractField; -import com.vaadin.flow.component.HasValue; +import com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent; +import com.vaadin.flow.component.HasValue.ValueChangeListener; import com.vaadin.flow.component.UI; import com.vaadin.flow.component.select.Select; import com.vaadin.flow.router.BeforeEvent; @@ -24,7 +25,7 @@ import java.util.Map; import java.util.Optional; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") -public class Navigation implements HasUrlParameter { +public class RegularNavigation implements HasUrlParameter { private String route; private boolean onlyMatchdaysWithActivity; @@ -43,15 +44,15 @@ public class Navigation implements HasUrlParameter { private final Select matchdaySelect = new Select<>(); private final Select matchSelect = new Select<>(); - private NavigationLevel navigationLevel = NavigationLevel.SEASON; + private RegularNavigationLevel regularNavigationLevel = RegularNavigationLevel.SEASON; private final ValidationLabel validationLabel = new ValidationLabel(); private boolean editFlag = false; - public Navigation(@Autowired SeasonService seasonService, - @Autowired MatchdayService matchdayService, - @Autowired MatchService matchService) { + public RegularNavigation(@Autowired SeasonService seasonService, + @Autowired MatchdayService matchdayService, + @Autowired MatchService matchService) { this.seasonService = seasonService; this.matchdayService = matchdayService; this.matchService = matchService; @@ -75,8 +76,8 @@ public class Navigation implements HasUrlParameter { this.onlyMatchdaysWithActivity = onlyMatchdaysWithActivity; } - public void setNavigationLevel(@NonNull NavigationLevel navigationLevel) { - this.navigationLevel = navigationLevel; + public void setNavigationLevel(@NonNull RegularNavigationLevel regularNavigationLevel) { + this.regularNavigationLevel = regularNavigationLevel; } public void addRunnableToBeRunAfterSelection(Runnable runnable) { @@ -84,15 +85,15 @@ public class Navigation implements HasUrlParameter { } public boolean seasonEnabled() { - return this.navigationLevel.compareTo(NavigationLevel.SEASON) >= 0; + return this.regularNavigationLevel.compareTo(RegularNavigationLevel.SEASON) >= 0; } public boolean matchdayEnabled() { - return this.navigationLevel.compareTo(NavigationLevel.MATCHDAY) >= 0; + return this.regularNavigationLevel.compareTo(RegularNavigationLevel.MATCHDAY) >= 0; } public boolean matchEnabled() { - return this.navigationLevel.compareTo(NavigationLevel.MATCH) >= 0; + return this.regularNavigationLevel.compareTo(RegularNavigationLevel.MATCH) >= 0; } private String getRoute() { @@ -115,7 +116,7 @@ public class Navigation implements HasUrlParameter { UI.getCurrent().getPage().getHistory().pushState(null, String.format("%s/%s", getRoute(), params)); } - private HasValue.ValueChangeListener, Season>> seasonSelectValueChangeListener() { + private ValueChangeListener, Season>> seasonSelectValueChangeListener() { return event -> { if (!seasonEnabled()) throw new IllegalStateException("Cannot select season when it is not enabled!"); if (matchdayEnabled()) { @@ -127,7 +128,7 @@ public class Navigation implements HasUrlParameter { }; } - private HasValue.ValueChangeListener, Matchday>> matchdaySelectValueChangeListener() { + private ValueChangeListener, Matchday>> matchdaySelectValueChangeListener() { return event -> { if (!matchdayEnabled()) throw new IllegalStateException("Cannot select matchday when it is not enabled!"); if (matchEnabled()) { @@ -139,7 +140,7 @@ public class Navigation implements HasUrlParameter { }; } - private HasValue.ValueChangeListener, Match>> matchSelectValueChangeListener() { + private ValueChangeListener, Match>> matchSelectValueChangeListener() { return event -> { if (!matchEnabled()) throw new IllegalStateException("Cannot select match when it is not enabled!"); doPostSelectionStuff(); @@ -163,7 +164,7 @@ public class Navigation implements HasUrlParameter { seasonSelect.setValue(seasonList.get(seasonList.size() - 1)); } - private void autoselectMatchday() { // TODO: add date stuff and choose depending on date instead! + private void autoselectMatchday() { // TODO: choose depending on date instead! if (!matchdayEnabled()) throw new IllegalStateException("This method should not be called when matchday is not enabled!"); if (matchdayList.isEmpty()) { @@ -209,9 +210,9 @@ public class Navigation implements HasUrlParameter { @Override public void setParameter(BeforeEvent event, @WildcardParameter String param) { - Map> map = NavigationUtils.getParameterMap(param); + Map> map = RegularNavigationUtils.getParameterMap(param); editFlag = NavigationUtils.editFlag(param); - navigate(map.get(NavigationLevel.SEASON), map.get(NavigationLevel.MATCHDAY), map.get(NavigationLevel.MATCH)); + navigate(map.get(RegularNavigationLevel.SEASON), map.get(RegularNavigationLevel.MATCHDAY), map.get(RegularNavigationLevel.MATCH)); } private void navigate(Optional seasonParam, Optional matchdayParam, Optional matchParam) { diff --git a/src/main/java/app/navigation/regular/RegularNavigationLevel.java b/src/main/java/app/navigation/regular/RegularNavigationLevel.java new file mode 100644 index 0000000..d3d47fb --- /dev/null +++ b/src/main/java/app/navigation/regular/RegularNavigationLevel.java @@ -0,0 +1,8 @@ +package app.navigation.regular; + +public enum RegularNavigationLevel { + NONE, + SEASON, + MATCHDAY, + MATCH +} diff --git a/src/main/java/app/navigation/NavigationService.java b/src/main/java/app/navigation/regular/RegularNavigationService.java similarity index 54% rename from src/main/java/app/navigation/NavigationService.java rename to src/main/java/app/navigation/regular/RegularNavigationService.java index f110ec5..61255f6 100644 --- a/src/main/java/app/navigation/NavigationService.java +++ b/src/main/java/app/navigation/regular/RegularNavigationService.java @@ -1,4 +1,4 @@ -package app.navigation; +package app.navigation.regular; import app.data.service.MatchService; import app.data.service.MatchdayService; @@ -7,21 +7,21 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -public class NavigationService { +public class RegularNavigationService { private final SeasonService seasonService; private final MatchdayService matchdayService; private final MatchService matchService; - public NavigationService(@Autowired SeasonService seasonService, - @Autowired MatchdayService matchdayService, - @Autowired MatchService matchService) { + public RegularNavigationService(@Autowired SeasonService seasonService, + @Autowired MatchdayService matchdayService, + @Autowired MatchService matchService) { this.seasonService = seasonService; this.matchdayService = matchdayService; this.matchService = matchService; } - public Navigation getNewNavigation() { - return new Navigation(seasonService, matchdayService, matchService); + public RegularNavigation getNewNavigation() { + return new RegularNavigation(seasonService, matchdayService, matchService); } } diff --git a/src/main/java/app/navigation/regular/RegularNavigationUtils.java b/src/main/java/app/navigation/regular/RegularNavigationUtils.java new file mode 100644 index 0000000..9c0c4f2 --- /dev/null +++ b/src/main/java/app/navigation/regular/RegularNavigationUtils.java @@ -0,0 +1,31 @@ +package app.navigation.regular; + +import app.navigation.NavigationUtils; +import com.vaadin.flow.router.WildcardParameter; +import org.springframework.lang.NonNull; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +class RegularNavigationUtils { + private RegularNavigationUtils() { + } + + @NonNull + static Map> getParameterMap(@WildcardParameter String param) { + Map> map = new HashMap<>(); + String[] params = param.split("/"); + if (params.length >= 1 && !params[0].equals(NavigationUtils.EDIT)) + map.put(RegularNavigationLevel.SEASON, Optional.of(params[0])); + if (params.length >= 2 && !params[1].equals(NavigationUtils.EDIT)) + map.put(RegularNavigationLevel.MATCHDAY, Optional.of(params[1])); + if (params.length >= 3 && !params[2].equals(NavigationUtils.EDIT)) + map.put(RegularNavigationLevel.MATCH, Optional.of(params[2])); + + map.putIfAbsent(RegularNavigationLevel.MATCH, Optional.empty()); + map.putIfAbsent(RegularNavigationLevel.MATCHDAY, Optional.empty()); + map.putIfAbsent(RegularNavigationLevel.SEASON, Optional.empty()); + return map; + } +} diff --git a/src/main/java/app/navigation/regular/components/RegularNavigationHeader.java b/src/main/java/app/navigation/regular/components/RegularNavigationHeader.java new file mode 100644 index 0000000..8cedd43 --- /dev/null +++ b/src/main/java/app/navigation/regular/components/RegularNavigationHeader.java @@ -0,0 +1,40 @@ +package app.navigation.regular.components; + +import app.navigation.regular.RegularNavigation; +import com.vaadin.flow.component.html.Label; +import com.vaadin.flow.component.orderedlayout.FlexComponent; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; + +public class RegularNavigationHeader extends HorizontalLayout { + + private final RegularNavigation regularNavigation; + + private final Label seasonLabel = new Label("Season:"); + private final Label matchdayLabel = new Label("Matchday:"); + private final Label matchLabel = new Label("Match:"); + + public RegularNavigationHeader(RegularNavigation regularNavigation) { + this.regularNavigation = regularNavigation; + defineLayout(); + configureChildren(); + } + + private void defineLayout() { + setWidthFull(); + setAlignItems(FlexComponent.Alignment.CENTER); + setJustifyContentMode(FlexComponent.JustifyContentMode.END); + } + + private void configureChildren() { + removeAll(); + if (regularNavigation.seasonEnabled()) { + add(seasonLabel, regularNavigation.getSeasonSelect()); + } + if (regularNavigation.matchdayEnabled()) { + add(matchdayLabel, regularNavigation.getMatchdaySelect()); + } + if (regularNavigation.matchEnabled()) { + add(matchLabel, regularNavigation.getMatchSelect()); + } + } +} diff --git a/src/main/java/app/navigation/regular/components/button/MatchdayButtonUtils.java b/src/main/java/app/navigation/regular/components/button/MatchdayButtonUtils.java new file mode 100644 index 0000000..b88fbeb --- /dev/null +++ b/src/main/java/app/navigation/regular/components/button/MatchdayButtonUtils.java @@ -0,0 +1,14 @@ +package app.navigation.regular.components.button; + +import app.navigation.regular.RegularNavigation; + +import java.util.concurrent.atomic.AtomicInteger; + +class MatchdayButtonUtils { + + static int getMatchdayIndex(RegularNavigation regularNavigation) { + AtomicInteger index = new AtomicInteger(-1); + regularNavigation.getSelectedMatchday().ifPresent(matchday -> index.set(regularNavigation.getMatchdayList().indexOf(matchday))); + return index.get(); + } +} diff --git a/src/main/java/app/navigation/regular/components/button/NextMatchdayButton.java b/src/main/java/app/navigation/regular/components/button/NextMatchdayButton.java new file mode 100644 index 0000000..44fc46e --- /dev/null +++ b/src/main/java/app/navigation/regular/components/button/NextMatchdayButton.java @@ -0,0 +1,37 @@ +package app.navigation.regular.components.button; + +import app.data.entity.Matchday; +import app.navigation.regular.RegularNavigation; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.icon.VaadinIcon; + +import java.util.Optional; + +public class NextMatchdayButton extends Button { + + private final RegularNavigation regularNavigation; + + public NextMatchdayButton(RegularNavigation regularNavigation) { + this.regularNavigation = regularNavigation; + + if (!regularNavigation.matchdayEnabled()) + throw new IllegalStateException("Cannot instantiate NextMatchdayButton when Matchdays are not enabled!"); + + setIcon(VaadinIcon.ARROW_RIGHT.create()); + + regularNavigation.addRunnableToBeRunAfterSelection(this::configure); + } + + private void configure() { + Optional nextMatchday = getNextMatchday(); + setEnabled(nextMatchday.isPresent()); + addClickListener(event -> nextMatchday.ifPresent(matchday -> regularNavigation.getMatchdaySelect().setValue(matchday))); + } + + private Optional getNextMatchday() { + int index = MatchdayButtonUtils.getMatchdayIndex(regularNavigation); + if (index >= 0 && index < regularNavigation.getMatchdayList().size() - 1) + return Optional.ofNullable(regularNavigation.getMatchdayList().get(index + 1)); + return Optional.empty(); + } +} diff --git a/src/main/java/app/navigation/regular/components/button/PrevMatchdayButton.java b/src/main/java/app/navigation/regular/components/button/PrevMatchdayButton.java new file mode 100644 index 0000000..e1325a5 --- /dev/null +++ b/src/main/java/app/navigation/regular/components/button/PrevMatchdayButton.java @@ -0,0 +1,36 @@ +package app.navigation.regular.components.button; + +import app.data.entity.Matchday; +import app.navigation.regular.RegularNavigation; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.icon.VaadinIcon; + +import java.util.Optional; + +public class PrevMatchdayButton extends Button { + + private final RegularNavigation regularNavigation; + + public PrevMatchdayButton(RegularNavigation regularNavigation) { + this.regularNavigation = regularNavigation; + + if (!regularNavigation.matchdayEnabled()) + throw new IllegalStateException("Cannot instantiate PrevMatchdayButton when Matchdays are not enabled!"); + + setIcon(VaadinIcon.ARROW_LEFT.create()); + + regularNavigation.addRunnableToBeRunAfterSelection(this::configure); + } + + private void configure() { + Optional prevMatchday = getPrevMatchday(); + setEnabled(prevMatchday.isPresent()); + addClickListener(event -> prevMatchday.ifPresent(matchday -> regularNavigation.getMatchdaySelect().setValue(matchday))); + } + + private Optional getPrevMatchday() { + int index = MatchdayButtonUtils.getMatchdayIndex(regularNavigation); + if (index > 0) return Optional.ofNullable(regularNavigation.getMatchdayList().get(index - 1)); + return Optional.empty(); + } +} diff --git a/src/main/java/app/views/match/MatchView.java b/src/main/java/app/views/match/MatchView.java index 968f2a8..d272ba8 100644 --- a/src/main/java/app/views/match/MatchView.java +++ b/src/main/java/app/views/match/MatchView.java @@ -4,8 +4,8 @@ import app.data.service.ChessComService; import app.data.service.GameInfoService; import app.data.service.GameService; import app.gameimage.GameImageService; -import app.navigation.NavigationLevel; -import app.navigation.NavigationService; +import app.navigation.regular.RegularNavigationLevel; +import app.navigation.regular.RegularNavigationService; import app.views.main.MainView; import app.views.match.components.MatchComponent; import app.views.navigation.NavigationViewBase; @@ -25,9 +25,9 @@ public class MatchView extends NavigationViewBase { private final GameImageService gameImageService; private MatchComponent matchComponent; - public MatchView(@Autowired NavigationService navigationService, + public MatchView(@Autowired RegularNavigationService regularNavigationService, @Autowired ChessComService chessComService, @Autowired GameService gameService, GameInfoService gameInfoService, GameImageService gameImageService) { - super(navigationService, "match", NavigationLevel.MATCH); + super(regularNavigationService, "match", RegularNavigationLevel.MATCH); this.chessComService = chessComService; this.gameService = gameService; this.gameInfoService = gameInfoService; @@ -43,7 +43,7 @@ public class MatchView extends NavigationViewBase { //////////// private void configureLayout() { - matchComponent = new MatchComponent(navigation, chessComService, gameImageService); + matchComponent = new MatchComponent(regularNavigation, chessComService, gameImageService); add(matchComponent); } diff --git a/src/main/java/app/views/match/components/EditMatchCard.java b/src/main/java/app/views/match/components/EditMatchCard.java index 202bfa7..661a4ff 100644 --- a/src/main/java/app/views/match/components/EditMatchCard.java +++ b/src/main/java/app/views/match/components/EditMatchCard.java @@ -5,7 +5,7 @@ import app.data.entity.Match; import app.data.service.ChessComService; import app.data.service.MatchService; import app.gameimage.GameImageService; -import app.navigation.Navigation; +import app.navigation.regular.RegularNavigation; import app.utils.ChessComUtils; import app.utils.ComponentUtils; import app.utils.MatchUtils; @@ -14,7 +14,6 @@ import com.vaadin.flow.component.ClickEvent; import com.vaadin.flow.component.ComponentEventListener; import com.vaadin.flow.component.UI; import com.vaadin.flow.component.button.Button; -import com.vaadin.flow.component.html.Label; import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; @@ -29,7 +28,7 @@ import static com.vaadin.flow.component.button.ButtonVariant.LUMO_PRIMARY; public class EditMatchCard extends VerticalLayout { - private final Navigation navigation; + private final RegularNavigation regularNavigation; private final MatchService matchService; private final ChessComService chessComService; private final GameImageService gameImageService; @@ -49,10 +48,10 @@ public class EditMatchCard extends VerticalLayout { private Match match; - public EditMatchCard(Navigation navigation, ChessComService chessComService, GameImageService gameImageService) { - this.navigation = navigation; + public EditMatchCard(RegularNavigation regularNavigation, ChessComService chessComService, GameImageService gameImageService) { + this.regularNavigation = regularNavigation; this.chessComService = chessComService; - this.matchService = navigation.getMatchService(); + this.matchService = regularNavigation.getMatchService(); this.gameImageService = gameImageService; defineLayout(); @@ -168,7 +167,7 @@ public class EditMatchCard extends VerticalLayout { matchService.update(match); match.getGames().forEach(gameImageService::createImageIfNotPresent); - navigation.setEditFlag(false); + regularNavigation.setEditFlag(false); }; } @@ -193,6 +192,6 @@ public class EditMatchCard extends VerticalLayout { } private ComponentEventListener> createEditCancelButtonListener() { - return event -> UI.getCurrent().navigate(String.format("matchday/%s", navigation.getWildcardParam().replace("edit/", ""))); + return event -> UI.getCurrent().navigate(String.format("matchday/%s", regularNavigation.getWildcardParam().replace("edit/", ""))); } } diff --git a/src/main/java/app/views/match/components/MatchComponent.java b/src/main/java/app/views/match/components/MatchComponent.java index 16745ec..58d4a63 100644 --- a/src/main/java/app/views/match/components/MatchComponent.java +++ b/src/main/java/app/views/match/components/MatchComponent.java @@ -6,7 +6,7 @@ import app.data.entity.Match; import app.data.service.ChessComService; import app.data.service.MatchService; import app.gameimage.GameImageService; -import app.navigation.Navigation; +import app.navigation.regular.RegularNavigation; import app.utils.ComponentUtils; import app.utils.StringUtils; import app.views.navigation.interfaces.ContentConfigurable; @@ -26,7 +26,7 @@ import java.util.NoSuchElementException; public class MatchComponent extends Div implements ContentConfigurable { - private final Navigation navigation; + private final RegularNavigation regularNavigation; private final MatchService matchService; private final GameImageService gameImageService; @@ -43,14 +43,14 @@ public class MatchComponent extends Div implements ContentConfigurable { private Match match; private CalculatedMatch calculatedMatch; - public MatchComponent(Navigation navigation, + public MatchComponent(RegularNavigation regularNavigation, @Autowired ChessComService chessComService, @Autowired GameImageService gameImageService) { - this.navigation = navigation; - this.matchService = navigation.getMatchService(); + this.regularNavigation = regularNavigation; + this.matchService = regularNavigation.getMatchService(); this.gameImageService = gameImageService; - this.editMatchCard = new EditMatchCard(navigation, chessComService, gameImageService); + this.editMatchCard = new EditMatchCard(regularNavigation, chessComService, gameImageService); defineLayout(); } @@ -95,7 +95,7 @@ public class MatchComponent extends Div implements ContentConfigurable { Button button = new Button("Add games", new Icon(VaadinIcon.PLUS)); button.addThemeVariants(ButtonVariant.LUMO_PRIMARY); button.addClickListener(event -> { - navigation.setEditFlag(true); + regularNavigation.setEditFlag(true); remove(noGamesLayout); }); return button; @@ -113,13 +113,13 @@ public class MatchComponent extends Div implements ContentConfigurable { @Override public void configureContent() { try { - match = navigation.getSelectedMatch().orElseThrow(); + match = regularNavigation.getSelectedMatch().orElseThrow(); calculatedMatch = matchService.getCalculatedMatch(match); configureHeaderContent(); configureMainContent(); } catch (NoSuchElementException e) { gamesLayout.removeAll(); - add(navigation.getValidationLabel()); + add(regularNavigation.getValidationLabel()); } } @@ -138,7 +138,7 @@ public class MatchComponent extends Div implements ContentConfigurable { } private void configureHeaderResultLabel() { - if (match.getGames().isEmpty() || navigation.editFlag()) { + if (match.getGames().isEmpty() || regularNavigation.editFlag()) { headerLayout.remove(headerResultLabel); } else { headerLayout.add(headerResultLabel); @@ -148,7 +148,7 @@ public class MatchComponent extends Div implements ContentConfigurable { } private void configureMainContent() { - if (navigation.editFlag()) { + if (regularNavigation.editFlag()) { remove(gamesLayout); add(editLayout); editMatchCard.configureContent(match); diff --git a/src/main/java/app/views/matchday/MatchdayView.java b/src/main/java/app/views/matchday/MatchdayView.java index 6ae6190..a4b8e66 100644 --- a/src/main/java/app/views/matchday/MatchdayView.java +++ b/src/main/java/app/views/matchday/MatchdayView.java @@ -1,7 +1,7 @@ package app.views.matchday; -import app.navigation.NavigationLevel; -import app.navigation.NavigationService; +import app.navigation.regular.RegularNavigationLevel; +import app.navigation.regular.RegularNavigationService; import app.views.main.MainView; import app.views.matchday.components.MatchdayCard; import app.views.navigation.NavigationViewBase; @@ -17,8 +17,8 @@ public class MatchdayView extends NavigationViewBase { private MatchdayCard matchdayCard; - public MatchdayView(@Autowired NavigationService navigationService) { - super(navigationService, "matchday", NavigationLevel.MATCHDAY); + public MatchdayView(@Autowired RegularNavigationService regularNavigationService) { + super(regularNavigationService, "matchday", RegularNavigationLevel.MATCHDAY); addClassName("matchday-view"); @@ -30,7 +30,7 @@ public class MatchdayView extends NavigationViewBase { //////////// private void configureLayout() { - matchdayCard = new MatchdayCard(navigation); + matchdayCard = new MatchdayCard(regularNavigation); add(matchdayCard); } diff --git a/src/main/java/app/views/matchday/components/MatchdayCard.java b/src/main/java/app/views/matchday/components/MatchdayCard.java index 0b899ba..b25bfc6 100644 --- a/src/main/java/app/views/matchday/components/MatchdayCard.java +++ b/src/main/java/app/views/matchday/components/MatchdayCard.java @@ -2,9 +2,9 @@ package app.views.matchday.components; import app.data.bean.CalculatedMatch; import app.data.entity.Matchday; -import app.navigation.Navigation; -import app.navigation.components.button.NextMatchdayButton; -import app.navigation.components.button.PrevMatchdayButton; +import app.navigation.regular.RegularNavigation; +import app.navigation.regular.components.button.NextMatchdayButton; +import app.navigation.regular.components.button.PrevMatchdayButton; import app.utils.ComponentUtils; import app.utils.EntityStringUtils; import app.utils.StringUtils; @@ -24,13 +24,11 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout; import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Locale; import java.util.NoSuchElementException; -import java.util.TimeZone; public class MatchdayCard extends Div implements ContentConfigurable { - private final Navigation navigation; + private final RegularNavigation regularNavigation; private final Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM."); @@ -40,8 +38,8 @@ public class MatchdayCard extends Div implements ContentConfigurable { private final Grid grid = new Grid<>(); - public MatchdayCard(Navigation navigation) { - this.navigation = navigation; + public MatchdayCard(RegularNavigation regularNavigation) { + this.regularNavigation = regularNavigation; addClassName("card"); add(new VerticalLayout(header, grid)); @@ -57,7 +55,7 @@ public class MatchdayCard extends Div implements ContentConfigurable { } private void defineHeader() { - header.add(new PrevMatchdayButton(this.navigation), headerLabelLayout, new NextMatchdayButton(this.navigation)); + header.add(new PrevMatchdayButton(this.regularNavigation), headerLabelLayout, new NextMatchdayButton(this.regularNavigation)); header.setWidthFull(); headerLabelLayout.addClassName("matchday-header-label-layout"); @@ -109,7 +107,7 @@ public class MatchdayCard extends Div implements ContentConfigurable { Button button = new Button(); button.addThemeVariants(ButtonVariant.LUMO_TERTIARY_INLINE); - String seasonAndMatchdayParam = navigation.getWildcardParam(); + String seasonAndMatchdayParam = regularNavigation.getWildcardParam(); String matchParam = EntityStringUtils.getMatchStringForURL(match.getMatch()); String targetWildcardParam = String.format("match/%s%s/", seasonAndMatchdayParam, matchParam); @@ -131,12 +129,12 @@ public class MatchdayCard extends Div implements ContentConfigurable { @Override public void configureContent() { try { - Matchday matchday = navigation.getSelectedMatchday().orElseThrow(); + Matchday matchday = regularNavigation.getSelectedMatchday().orElseThrow(); configureHeaderLabels(matchday); - grid.setItems(navigation.getMatchService().getCalculatedMatches(matchday)); + grid.setItems(regularNavigation.getMatchService().getCalculatedMatches(matchday)); } catch (NoSuchElementException e) { removeAll(); - add(navigation.getValidationLabel()); + add(regularNavigation.getValidationLabel()); } } diff --git a/src/main/java/app/views/navigation/NavigationViewBase.java b/src/main/java/app/views/navigation/NavigationViewBase.java index 46f2124..b7bf70c 100644 --- a/src/main/java/app/views/navigation/NavigationViewBase.java +++ b/src/main/java/app/views/navigation/NavigationViewBase.java @@ -1,9 +1,9 @@ package app.views.navigation; -import app.navigation.Navigation; -import app.navigation.NavigationLevel; -import app.navigation.NavigationService; -import app.navigation.components.NavigationHeader; +import app.navigation.regular.RegularNavigation; +import app.navigation.regular.RegularNavigationLevel; +import app.navigation.regular.RegularNavigationService; +import app.navigation.regular.components.RegularNavigationHeader; import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.BeforeEvent; @@ -13,27 +13,27 @@ import org.springframework.beans.factory.annotation.Autowired; public abstract class NavigationViewBase extends VerticalLayout implements HasUrlParameter { - protected final Navigation navigation; - protected final NavigationHeader navigationHeader; + protected final RegularNavigation regularNavigation; + protected final RegularNavigationHeader regularNavigationHeader; - protected NavigationViewBase(@Autowired NavigationService navigationService, + protected NavigationViewBase(@Autowired RegularNavigationService regularNavigationService, String route, - NavigationLevel navigationLevel) { - this.navigation = navigationService.getNewNavigation(); - navigation.setRoute(route); - navigation.setNavigationLevel(navigationLevel); + RegularNavigationLevel regularNavigationLevel) { + this.regularNavigation = regularNavigationService.getNewNavigation(); + regularNavigation.setRoute(route); + regularNavigation.setNavigationLevel(regularNavigationLevel); - this.navigationHeader = new NavigationHeader(navigation); + this.regularNavigationHeader = new RegularNavigationHeader(regularNavigation); define(); } private void define() { - add(navigationHeader); + add(regularNavigationHeader); addClassName("content"); setAlignItems(FlexComponent.Alignment.CENTER); - navigation.addRunnableToBeRunAfterSelection(this::configureContent); + regularNavigation.addRunnableToBeRunAfterSelection(this::configureContent); } ///////////// @@ -49,11 +49,11 @@ public abstract class NavigationViewBase extends VerticalLayout implements HasUr @Override public void removeAll() { super.removeAll(); - add(navigationHeader); + add(regularNavigationHeader); } @Override public void setParameter(BeforeEvent event, @WildcardParameter String param) { - navigation.setParameter(event, param); + regularNavigation.setParameter(event, param); } } diff --git a/src/main/java/app/views/table/TableView.java b/src/main/java/app/views/table/TableView.java index 9a6c568..fc2cf9d 100644 --- a/src/main/java/app/views/table/TableView.java +++ b/src/main/java/app/views/table/TableView.java @@ -1,8 +1,8 @@ package app.views.table; import app.data.service.PlayerService; -import app.navigation.NavigationLevel; -import app.navigation.NavigationService; +import app.navigation.regular.RegularNavigationLevel; +import app.navigation.regular.RegularNavigationService; import app.views.main.MainView; import app.views.navigation.NavigationViewBase; import app.views.table.components.TableCard; @@ -22,12 +22,12 @@ public class TableView extends NavigationViewBase { private TableCard tableCard; - public TableView(@Autowired NavigationService navigationService, + public TableView(@Autowired RegularNavigationService regularNavigationService, @Autowired PlayerService playerService) { - super(navigationService, "table", NavigationLevel.MATCHDAY); + super(regularNavigationService, "table", RegularNavigationLevel.MATCHDAY); this.playerService = playerService; - this.navigation.setOnlyMatchdaysWithActivity(true); + this.regularNavigation.setOnlyMatchdaysWithActivity(true); addClassName("table-view"); @@ -39,7 +39,7 @@ public class TableView extends NavigationViewBase { //////////// private void defineLayout() { - tableCard = new TableCard(navigation, playerService); + tableCard = new TableCard(regularNavigation, playerService); add(tableCard); } diff --git a/src/main/java/app/views/table/components/TableCard.java b/src/main/java/app/views/table/components/TableCard.java index 7465dd7..4245cc6 100644 --- a/src/main/java/app/views/table/components/TableCard.java +++ b/src/main/java/app/views/table/components/TableCard.java @@ -3,9 +3,9 @@ package app.views.table.components; import app.data.bean.PlayerForTable; import app.data.entity.Matchday; import app.data.service.PlayerService; -import app.navigation.Navigation; -import app.navigation.components.button.NextMatchdayButton; -import app.navigation.components.button.PrevMatchdayButton; +import app.navigation.regular.RegularNavigation; +import app.navigation.regular.components.button.NextMatchdayButton; +import app.navigation.regular.components.button.PrevMatchdayButton; import app.utils.ComponentUtils; import app.utils.EntityStringUtils; import app.utils.StringUtils; @@ -27,7 +27,7 @@ import java.util.NoSuchElementException; public class TableCard extends Div implements ContentConfigurable { - private final Navigation navigation; + private final RegularNavigation regularNavigation; private final PlayerService playerService; @@ -35,8 +35,8 @@ public class TableCard extends Div implements ContentConfigurable { private final HorizontalLayout headerLabelLayout = new HorizontalLayout(); private final Grid grid = new Grid<>(); - public TableCard(Navigation navigation, @Autowired PlayerService playerService) { - this.navigation = navigation; + public TableCard(RegularNavigation regularNavigation, @Autowired PlayerService playerService) { + this.regularNavigation = regularNavigation; this.playerService = playerService; addClassName("card"); @@ -47,7 +47,7 @@ public class TableCard extends Div implements ContentConfigurable { } private void defineHeader() { - header.add(new PrevMatchdayButton(this.navigation), headerLabelLayout, new NextMatchdayButton(this.navigation)); + header.add(new PrevMatchdayButton(this.regularNavigation), headerLabelLayout, new NextMatchdayButton(this.regularNavigation)); header.setWidthFull(); headerLabelLayout.addClassName("table-header-label-layout"); @@ -161,7 +161,7 @@ public class TableCard extends Div implements ContentConfigurable { @Override public void configureContent() { try { - Matchday matchday = navigation.getSelectedMatchday().orElseThrow(); + Matchday matchday = regularNavigation.getSelectedMatchday().orElseThrow(); String mainText = "Table"; String matchdayText = String.format("Matchday %s", EntityStringUtils.getMatchdayString(matchday)); @@ -169,7 +169,7 @@ public class TableCard extends Div implements ContentConfigurable { grid.setItems(playerService.getPlayersForTable(matchday)); } catch (NoSuchElementException e) { removeAll(); - add(navigation.getValidationLabel()); + add(regularNavigation.getValidationLabel()); } } }