Files
IPZ_1/docs/06_infrastructure.md
2026-05-17 17:17:04 +02:00

110 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Infrastructure
## MySQL Container
The MySQL 8.4 OLTP database runs in Docker (or Podman) for easy setup and teardown without requiring a local MySQL installation.
### Starting and stopping
**Linux (Docker):**
```bash
./docker/start.sh # start
./docker/stop.sh # stop (data is preserved)
```
**Linux (Podman):**
```bash
./docker/start.sh --podman
./docker/stop.sh --podman
```
**Windows (PowerShell):**
```powershell
./docker/start.ps1
./docker/stop.ps1
```
### Connection details
| Property | Value |
|---|---|
| Host | 127.0.0.1 |
| Port | **13306** (non-standard to avoid conflicts with any local MySQL) |
| Database | ewc2025 |
| User | root |
| Password | ewc2025root |
### What happens on first start
When the container is created for the first time, MySQL automatically executes any `.sql` files found in `/docker-entrypoint-initdb.d/`. The start script mounts `sql/schema.sql` there, so the database schema is created automatically — you do not need to run the DDL manually.
### Data persistence
Container data is stored in a named Docker/Podman volume (`ewc2025-mysql-data`). Stopping and restarting the container does not lose any data.
To fully reset the database (drop all data and re-create from scratch):
```bash
docker rm ewc2025-mysql
docker volume rm ewc2025-mysql-data
./docker/start.sh # fresh container, empty schema
dotnet run ./scripts/seed.cs
```
---
## Seed Script
The seed script (`scripts/seed.cs`) is a single-file **.NET 10 C# script** — no project file or solution needed.
### Requirements
- .NET 10 SDK installed
- MySQL container running
### Running it
```bash
dotnet run ./scripts/seed.cs
```
The script can be run from any directory — it walks up the directory tree to find the `data/` folder automatically.
### What it does
Reads all 10 CSV files and inserts data into MySQL in this order:
1. `game` — deduplicates game names from file 01
2. `country` — from file 08; additional countries auto-inserted as encountered
3. `point_system` — from file 09
4. `prize_pool_category` — from file 06
5. `organization` — collects all org names across files 0205, 10; enriches with file 04 details
6. `tournament` — from file 01
7. `schedule` — from file 07; matched to tournaments by game name + start date
8. `player` — from file 05
9. `medalist` — from file 02
10. `match_result` — from file 10
11. `club_championship_standing` — from file 03
12. `organization_game_competing` — from file 04 (multi-value column split)
13. `organization_game_won` — from file 03 (multi-value column split)
Expected output on a clean database:
```
Connected to MySQL.
[1/13] game
[2/13] country
...
[13/13] organization_game_won
Done. Database seeded.
```
A `WARN:` line is printed for `Battlegrounds Mobile India` (not an EWC 2025 tournament — expected and harmless).
### NuGet packages used
| Package | Purpose |
|---|---|
| `MySqlConnector 2.3.7` | MySQL database driver |
| `CsvHelper 33.0.1` | CSV parsing (handles quoted fields with commas) |
These are declared at the top of the script with `#:package` directives and restored automatically by `dotnet run`.