feat: create tables
This commit is contained in:
parent
645dc352da
commit
857cd10580
|
|
@ -1,3 +1,5 @@
|
|||
.idea
|
||||
.vscode
|
||||
|
||||
###> symfony/framework-bundle ###
|
||||
/.env
|
||||
|
|
|
|||
|
|
@ -38,7 +38,10 @@
|
|||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"stubs/utils.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ COPY bin /var/www/bin
|
|||
COPY migrations /var/www/migrations
|
||||
COPY config /var/www/config
|
||||
COPY public /var/www/public
|
||||
COPY stubs /var/www/stubs
|
||||
|
||||
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