Game Version
A GameVersion tracks a specific release of a Game. Each uploaded zip file becomes a version that goes through the quarantine pipeline before it can be published.
Properties
| Property | Type | Description |
|---|---|---|
Id | int | Primary key |
GameId | int | FK → parent Game |
VersionName | string | Semantic label (e.g. 1.0.0, beta-2) |
ChangelogHtml | string? | Release notes in HTML |
IsDemo | bool | Whether this is a demo version |
State | GameVersionState | Current lifecycle state (see below) |
QuarantineBlobName | string? | Blob key in the quarantine container |
PublishedBlobName | string? | Blob key in the published container |
OriginalFileName | string | Filename as uploaded |
ContentType | string | MIME type |
Sha256 | string? | SHA-256 hash computed after scan |
SizeBytes | long | File size |
ScanResult | string? | Raw scan output |
CreatedAtUtc | DateTime | Upload timestamp |
ScannedAtUtc | DateTime? | When the scan completed |
PublishedAtUtc | DateTime? | When the version went live |
Version States
| Value | Name | Description |
|---|---|---|
| 0 | Draft / New | Just uploaded, awaiting quarantine |
| 1 | Quarantined | Currently being scanned |
| 2 | Approved | Scan passed, ready to publish |
| 3 | Rejected | Scan failed, cannot be published |
| 4 | Published | Live — players can download/play |
| 5 | Deprecated | Superseded by a newer version |
| 6 | Archived | Removed from active use |
Quarantine Pipeline
Upload → Quarantine Blob → Queue Message → Azure Function scans
→ Approved → Copy to published blob → SHA-256 hash computed
→ Rejected → Maker notified, version stays in quarantineThe quarantine pipeline is handled by Azure Functions (HandleQuarantineCreated and HandleQuarantineResult). The maker can then choose to publish an approved version from the game edit page.
Relationships
GameVersion (N) ──── (1) Game