feat: create tables
This commit is contained in:
parent
645dc352da
commit
857cd10580
|
|
@ -1,3 +1,5 @@
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
|
||||||
###> symfony/framework-bundle ###
|
###> symfony/framework-bundle ###
|
||||||
/.env
|
/.env
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,10 @@
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"App\\": "src/"
|
"App\\": "src/"
|
||||||
}
|
},
|
||||||
|
"files": [
|
||||||
|
"stubs/utils.php"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ COPY bin /var/www/bin
|
||||||
COPY migrations /var/www/migrations
|
COPY migrations /var/www/migrations
|
||||||
COPY config /var/www/config
|
COPY config /var/www/config
|
||||||
COPY public /var/www/public
|
COPY public /var/www/public
|
||||||
|
COPY stubs /var/www/stubs
|
||||||
|
|
||||||
COPY .env.example /var/www/.env
|
COPY .env.example /var/www/.env
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,227 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
use function App\Stubs\getCSV; # should be copied here
|
||||||
|
|
||||||
|
final class Version20251220194258 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Create basic tables';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE TABLE "provider"(
|
||||||
|
"id" UUID NOT NULL PRIMARY KEY,
|
||||||
|
"name" VARCHAR(255) NOT NULL
|
||||||
|
);
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE TABLE "league"(
|
||||||
|
"id" UUID NOT NULL PRIMARY KEY,
|
||||||
|
"provider_id" UUID NOT NULL,
|
||||||
|
"provider_league_id" VARCHAR(255) NOT NULL,
|
||||||
|
"name" VARCHAR(255) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "fk_league_provider"
|
||||||
|
FOREIGN KEY ("provider_id")
|
||||||
|
REFERENCES "provider" ("id")
|
||||||
|
);
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_league_provider_id"
|
||||||
|
ON "league" ("provider_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE TABLE "season"(
|
||||||
|
"id" UUID NOT NULL PRIMARY KEY,
|
||||||
|
"provider_id" UUID NOT NULL,
|
||||||
|
"provider_season_id" VARCHAR(255) NOT NULL,
|
||||||
|
"year" INT NOT NULL,
|
||||||
|
"kind" VARCHAR(255) NOT NULL,
|
||||||
|
"league_id" UUID NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "fk_season_provider"
|
||||||
|
FOREIGN KEY ("provider_id")
|
||||||
|
REFERENCES "provider" ("id"),
|
||||||
|
|
||||||
|
CONSTRAINT "fk_season_league"
|
||||||
|
FOREIGN KEY ("league_id")
|
||||||
|
REFERENCES "league" ("id")
|
||||||
|
);
|
||||||
|
SQL);
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_season_provider_id"
|
||||||
|
ON "season" ("provider_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_season_league_id"
|
||||||
|
ON "season" ("league_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE TABLE "team"(
|
||||||
|
"id" UUID NOT NULL PRIMARY KEY,
|
||||||
|
"provider_id" UUID NOT NULL,
|
||||||
|
"provider_team_id" VARCHAR(255) NOT NULL,
|
||||||
|
"name" VARCHAR(255) NOT NULL,
|
||||||
|
"alias" VARCHAR(255) NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
|
||||||
|
CONSTRAINT "fk_team_provider"
|
||||||
|
FOREIGN KEY ("provider_id")
|
||||||
|
REFERENCES "provider" ("id")
|
||||||
|
);
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_team_provider_id"
|
||||||
|
ON "team" ("provider_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE TABLE "game"(
|
||||||
|
"id" UUID NOT NULL PRIMARY KEY,
|
||||||
|
"provider_id" UUID NOT NULL,
|
||||||
|
"provider_game_id" VARCHAR(255) NOT NULL,
|
||||||
|
"start_time_scheduled" TIMESTAMPTZ NOT NULL,
|
||||||
|
"end_time_scheduled" TIMESTAMPTZ,
|
||||||
|
"season_id" UUID NOT NULL,
|
||||||
|
"home_team_id" UUID NOT NULL,
|
||||||
|
"away_team_id" UUID NOT NULL,
|
||||||
|
"venue" VARCHAR(255) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "fk_game_provider"
|
||||||
|
FOREIGN KEY ("provider_id")
|
||||||
|
REFERENCES "provider" ("id"),
|
||||||
|
|
||||||
|
CONSTRAINT "fk_game_season"
|
||||||
|
FOREIGN KEY ("season_id")
|
||||||
|
REFERENCES "season" ("id"),
|
||||||
|
|
||||||
|
CONSTRAINT "fk_game_home_team"
|
||||||
|
FOREIGN KEY ("home_team_id")
|
||||||
|
REFERENCES "team" ("id"),
|
||||||
|
|
||||||
|
CONSTRAINT "fk_game_away_team"
|
||||||
|
FOREIGN KEY ("away_team_id")
|
||||||
|
REFERENCES "team" ("id")
|
||||||
|
);
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_game_provider_id"
|
||||||
|
ON "game" ("provider_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_game_season_id"
|
||||||
|
ON "game" ("season_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_game_home_team_id"
|
||||||
|
ON "game" ("home_team_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->addSql(<<<SQL
|
||||||
|
CREATE INDEX "idx_game_away_team_id"
|
||||||
|
ON "game" ("away_team_id");
|
||||||
|
SQL);
|
||||||
|
|
||||||
|
$this->loadBootstrapData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql(/** @lang SQL */ "DROP TABLE IF EXISTS game");
|
||||||
|
$this->addSql(/** @lang SQL */ "DROP TABLE IF EXISTS season");
|
||||||
|
$this->addSql(/** @lang SQL */ "DROP TABLE IF EXISTS league");
|
||||||
|
$this->addSql(/** @lang SQL */ "DROP TABLE IF EXISTS team");
|
||||||
|
$this->addSql(/** @lang SQL */ "DROP TABLE IF EXISTS provider");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function loadBootstrapData(): void
|
||||||
|
{
|
||||||
|
$values = [];
|
||||||
|
$params = [];
|
||||||
|
foreach (getCSV(__DIR__.'/../stubs/Version20251220194258/providers.csv') as $row) {
|
||||||
|
$values[] = "(?, ?)";
|
||||||
|
$params[] = $row['id'];
|
||||||
|
$params[] = $row['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addSql(
|
||||||
|
'INSERT INTO "provider" ("id", "name") VALUES '
|
||||||
|
. implode(', ', $values)
|
||||||
|
. ' ON CONFLICT ("id") DO NOTHING',
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
$values = [];
|
||||||
|
$params = [];
|
||||||
|
foreach (getCSV(__DIR__.'/../stubs/Version20251220194258/leagues.csv') as $row) {
|
||||||
|
$values[] = "(?, ?, ?, ?)";
|
||||||
|
$params[] = $row['id'];
|
||||||
|
$params[] = $row['provider_id'];
|
||||||
|
$params[] = $row['provider_league_id'];
|
||||||
|
$params[] = $row['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addSql(
|
||||||
|
'INSERT INTO "league" ("id", "provider_id", "provider_league_id", "name") VALUES '
|
||||||
|
. implode(', ', $values)
|
||||||
|
. ' ON CONFLICT ("id") DO NOTHING',
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
$values = [];
|
||||||
|
$params = [];
|
||||||
|
foreach (getCSV(__DIR__.'/../stubs/Version20251220194258/seasons.csv') as $row) {
|
||||||
|
$values[] = "(?, ?, ?, ?, ?, ?)";
|
||||||
|
$params[] = $row['id'];
|
||||||
|
$params[] = $row['provider_id'];
|
||||||
|
$params[] = $row['provider_season_id'];
|
||||||
|
$params[] = $row['year'];
|
||||||
|
$params[] = $row['kind'];
|
||||||
|
$params[] = $row['league_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addSql(
|
||||||
|
'INSERT INTO "season" ("id", "provider_id", "provider_season_id", "year", "kind", "league_id") VALUES '
|
||||||
|
. implode(', ', $values)
|
||||||
|
. ' ON CONFLICT ("id") DO NOTHING',
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
$values = [];
|
||||||
|
$params = [];
|
||||||
|
foreach (getCSV(__DIR__.'/../stubs/Version20251220194258/teams.csv') as $row) {
|
||||||
|
$values[] = "(?, ?, ?, ?, ?, ?)";
|
||||||
|
$params[] = $row['id'];
|
||||||
|
$params[] = $row['provider_id'];
|
||||||
|
$params[] = $row['provider_team_id'];
|
||||||
|
$params[] = $row['name'];
|
||||||
|
$params[] = $row['alias'];
|
||||||
|
$params[] = $row['active'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addSql(
|
||||||
|
'INSERT INTO "team" ("id", "provider_id", "provider_team_id", "name", "alias", "active") VALUES '
|
||||||
|
. implode(', ', $values)
|
||||||
|
. ' ON CONFLICT ("id") DO NOTHING',
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
id,provider_id,provider_league_id,name
|
||||||
|
c2ac5513-302a-4c60-a052-a8f871fa24e5,885fe581-c4c3-45e7-a06c-29ece7d47fad,fd560107-a85b-4388-ab0d-655ad022aff7,NHL
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
id,name
|
||||||
|
885fe581-c4c3-45e7-a06c-29ece7d47fad,SportRadar
|
||||||
|
c7fd0cf5-5418-41b3-9930-34f41eb09a82,Liquipedia
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
id,provider_id,provider_season_id,year,kind,league_id
|
||||||
|
15c834cb-1f4f-4403-8314-6ee313938668,885fe581-c4c3-45e7-a06c-29ece7d47fad,4383ec83-6112-47f0-867a-8839145e1d58,2025,PRE,c2ac5513-302a-4c60-a052-a8f871fa24e5
|
||||||
|
85cadf04-3022-4d0c-80b8-ab05f0b7ed52,885fe581-c4c3-45e7-a06c-29ece7d47fad,4a67cca6-b450-45f9-91c6-48e92ac19069,2025,REG,c2ac5513-302a-4c60-a052-a8f871fa24e5
|
||||||
|
bdec6e19-ab61-4d2c-b529-cfef716fa4bd,885fe581-c4c3-45e7-a06c-29ece7d47fad,3c1bb21f-6523-4115-87ee-c8c16ed80421,2025,PST,c2ac5513-302a-4c60-a052-a8f871fa24e5
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
id,provider_id,provider_team_id,name,alias,active
|
||||||
|
897b3f25-405e-425b-9d7e-9944e44dd65f,885fe581-c4c3-45e7-a06c-29ece7d47fad,4415ce44-0f24-11e2-8525-18a905767e44,Colorado Avalanche,COL,1
|
||||||
|
13b05ad3-35c1-4ace-9f95-a8bf81d8da3c,885fe581-c4c3-45e7-a06c-29ece7d47fad,4416272f-0f24-11e2-8525-18a905767e44,Chicago Blackhawks,CHI,1
|
||||||
|
3369e748-7bd6-4e91-b1aa-e8ae617d10dd,885fe581-c4c3-45e7-a06c-29ece7d47fad,44167db4-0f24-11e2-8525-18a905767e44,Colombus Blue Jackets,CBJ,1
|
||||||
|
eab40eb6-7928-45ad-8eed-103d1410e0e5,885fe581-c4c3-45e7-a06c-29ece7d47fad,441660ea-0f24-11e2-8525-18a905767e44,St. Louis Blues,STL,1
|
||||||
|
e08686af-7660-45f3-96b0-195bf4f94432,885fe581-c4c3-45e7-a06c-29ece7d47fad,4416ba1a-0f24-11e2-8525-18a905767e44,Boston Bruins,BOS,1
|
||||||
|
856cc963-ac7d-42ef-8b2f-7ecabd427cf6,885fe581-c4c3-45e7-a06c-29ece7d47fad,441713b7-0f24-11e2-8525-18a905767e44,Montreal Canadiens,MTL,1
|
||||||
|
1452d761-56a9-4802-bc8e-b60b2889b53e,885fe581-c4c3-45e7-a06c-29ece7d47fad,4415b0a7-0f24-11e2-8525-18a905767e44,Vancouver Canucks,VAN,1
|
||||||
|
d0f07a23-5b24-47af-95c1-59e741dd25c3,885fe581-c4c3-45e7-a06c-29ece7d47fad,4417eede-0f24-11e2-8525-18a905767e44,Washington Capitals,WSH,1
|
||||||
|
42b507fc-3550-45f7-8df9-6590d4ad7cee,885fe581-c4c3-45e7-a06c-29ece7d47fad,44174b0c-0f24-11e2-8525-18a905767e44,New Jersey Devils,NJ,1
|
||||||
|
7316c79a-26cf-4b7d-a0d8-54c17a905523,885fe581-c4c3-45e7-a06c-29ece7d47fad,441862de-0f24-11e2-8525-18a905767e44,Anaheim Ducks,ANA,1
|
||||||
|
76005657-a34e-412b-905b-ed45aff9f42a,885fe581-c4c3-45e7-a06c-29ece7d47fad,44159241-0f24-11e2-8525-18a905767e44,Calgary Flames,CGY,1
|
||||||
|
46d94319-767e-44f3-8eb3-c3fc8c3e4cdb,885fe581-c4c3-45e7-a06c-29ece7d47fad,44179d47-0f24-11e2-8525-18a905767e44,Philadelphia Flyers,PHI,1
|
||||||
|
4d418987-0073-478c-9c83-4da0fd469f78,885fe581-c4c3-45e7-a06c-29ece7d47fad,42376e1c-6da8-461e-9443-cfcf0a9fcc4d,Vegas Golden Knights,VGK,1
|
||||||
|
e086d6f6-b5c9-4ace-ad09-5d257244a954,885fe581-c4c3-45e7-a06c-29ece7d47fad,44182a9d-0f24-11e2-8525-18a905767e44,Carolina Hurricanes,CAR,1
|
||||||
|
68b8839f-6e60-4578-a38f-f080a41dd26c,885fe581-c4c3-45e7-a06c-29ece7d47fad,441766b9-0f24-11e2-8525-18a905767e44,New York Islanders,NYI,1
|
||||||
|
5b1dfbb4-a561-4bbf-a155-9f715eacafbc,885fe581-c4c3-45e7-a06c-29ece7d47fad,44180e55-0f24-11e2-8525-18a905767e44,Winnipeg Jets,WPG,1
|
||||||
|
cd5abd08-1c82-4f21-a70d-f72d36086b8b,885fe581-c4c3-45e7-a06c-29ece7d47fad,44151f7a-0f24-11e2-8525-18a905767e44,Los Angeles Kings,LA,1
|
||||||
|
ca9cbe53-7459-4394-9e5c-0613bda54872,885fe581-c4c3-45e7-a06c-29ece7d47fad,1fb48e65-9688-4084-8868-02173525c3e1,Seattle Kraken,SEA,1
|
||||||
|
4087cf79-b130-434f-b0cb-efe0b9336cad,885fe581-c4c3-45e7-a06c-29ece7d47fad,4417d3cb-0f24-11e2-8525-18a905767e44,Tampa Bay Lightning,TB,1
|
||||||
|
2ff3c84d-f5ea-4024-aa78-be7290ab59c8,885fe581-c4c3-45e7-a06c-29ece7d47fad,715a1dba-4e9f-4158-8346-3473b6e3557f,Utah Mammoth,UTA,1
|
||||||
|
7b132dd4-8474-400b-a146-243c513c8f01,885fe581-c4c3-45e7-a06c-29ece7d47fad,441730a9-0f24-11e2-8525-18a905767e44,Toronto Maple Leafs,TOR,1
|
||||||
|
3dced743-221a-4805-8a90-49f0e752e049,885fe581-c4c3-45e7-a06c-29ece7d47fad,4415ea6c-0f24-11e2-8525-18a905767e44,Edmonton Oilers,EDM,1
|
||||||
|
8c1f3644-997a-46d0-9e17-206b6a0210cb,885fe581-c4c3-45e7-a06c-29ece7d47fad,4418464d-0f24-11e2-8525-18a905767e44,Florida Panthers,FLA,1
|
||||||
|
7d42bbe2-bc4b-407a-a580-6882b51de839,885fe581-c4c3-45e7-a06c-29ece7d47fad,4417b7d7-0f24-11e2-8525-18a905767e44,Pittsburgh Penguins,PIT,1
|
||||||
|
ef116944-0602-42c5-b8a6-c420bbde87c6,885fe581-c4c3-45e7-a06c-29ece7d47fad,441643b7-0f24-11e2-8525-18a905767e44,Nashville Predators,NSH,1
|
||||||
|
dfa5ee11-2518-46b2-bf3f-300398f8ca73,885fe581-c4c3-45e7-a06c-29ece7d47fad,441781b9-0f24-11e2-8525-18a905767e44,New York Rangers,NYR,1
|
||||||
|
9caba47c-529b-4ca5-82c6-d828a3dbb308,885fe581-c4c3-45e7-a06c-29ece7d47fad,44169bb9-0f24-11e2-8525-18a905767e44,Detroit Red Wings,DET,1
|
||||||
|
e584619f-fb08-409e-b202-41889b553d7f,885fe581-c4c3-45e7-a06c-29ece7d47fad,4416d559-0f24-11e2-8525-18a905767e44,Buffalo Sabres,BUF,1
|
||||||
|
d031ffba-9114-4745-b415-015a1feac1cc,885fe581-c4c3-45e7-a06c-29ece7d47fad,4416f5e2-0f24-11e2-8525-18a905767e44,Ottawa Senators,OTT,1
|
||||||
|
3f83b808-343d-473d-9fe0-14e6f23dca65,885fe581-c4c3-45e7-a06c-29ece7d47fad,44155909-0f24-11e2-8525-18a905767e44,San Jose Sharks,SJ,1
|
||||||
|
5568327b-fee4-40ee-a12c-0637840ef825,885fe581-c4c3-45e7-a06c-29ece7d47fad,44157522-0f24-11e2-8525-18a905767e44,Dallas Stars,DAL,1
|
||||||
|
3cf51bb1-2d58-4a38-b691-670fd36f4ca8,885fe581-c4c3-45e7-a06c-29ece7d47fad,4416091c-0f24-11e2-8525-18a905767e44,Minnesota Wild,MIN,1
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Stubs;
|
||||||
|
|
||||||
|
function getCSV(string $filename, $names = []): \Generator
|
||||||
|
{
|
||||||
|
if (false !== ($handle = fopen($filename, "r"))) {
|
||||||
|
while (false !== ($data = fgetcsv($handle))) {
|
||||||
|
if (empty($names)) {
|
||||||
|
$names = $data;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield array_combine($names, $data);
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue