Skip to content

Commit 396abdc

Browse files
committed
feat: improvements
1 parent 44a4075 commit 396abdc

54 files changed

Lines changed: 791 additions & 533 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/lint.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ jobs:
3939
- name: Lint Frontend
4040
run: npm run lint
4141

42+
- name: TypeScript Check
43+
run: npx tsc --noEmit
44+
4245
# - name: Commit Changes
4346
# uses: stefanzweifel/git-auto-commit-action@v7
4447
# with:

app/Concerns/WorkshopModBehavior.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public function modSections(): array
3232
];
3333
}
3434

35+
/**
36+
* @param array<string, mixed> $validated
37+
*/
3538
public function syncPresetMods(ModPreset $preset, array $validated): void
3639
{
3740
$preset->mods()->sync($validated['mod_ids'] ?? []);

app/Console/Commands/GenerateGameTypesCommand.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ private function extractFieldsBySource(array $schema): array
167167

168168
/**
169169
* Resolve the TypeScript type for a schema field.
170+
*
171+
* @param array<string, mixed> $field
170172
*/
171173
private function resolveFieldTsType(array $field): string
172174
{

app/Contracts/GameHandler.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,15 @@ public function getServerLogPath(Server $server): string;
127127
* The optional $server parameter is provided during updates so that
128128
* unique rules can ignore the current server (e.g., query_port uniqueness).
129129
* On store, $server is null.
130+
*
131+
* @return array<string, mixed>
130132
*/
131133
public function serverValidationRules(?Server $server = null): array;
132134

133135
/**
134136
* Validation rules for game-specific settings (difficulty, network, reforger settings, etc.)
137+
*
138+
* @return array<string, mixed>
135139
*/
136140
public function settingsValidationRules(): array;
137141

@@ -185,6 +189,8 @@ public function createRelatedSettings(Server $server): void;
185189
/**
186190
* Update game-specific related settings from validated request data.
187191
* Called from ServerController::update().
192+
*
193+
* @param array<string, mixed> $validated
188194
*/
189195
public function updateRelatedSettings(Server $server, array $validated): void;
190196

@@ -203,6 +209,8 @@ public function modSections(): array;
203209
/**
204210
* Sync a preset's mods from validated request data.
205211
* Each handler knows which relationships to sync.
212+
*
213+
* @param array<string, mixed> $validated
206214
*/
207215
public function syncPresetMods(ModPreset $preset, array $validated): void;
208216

app/Contracts/SupportsRegisteredMods.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public function registeredModPivotTable(): string;
3232

3333
/**
3434
* Create a new registered mod from validated request data.
35+
*
36+
* @param array<string, mixed> $data
3537
*/
3638
public function storeRegisteredMod(array $data): Model;
3739

app/GameHandlers/AbstractGameHandler.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
namespace App\GameHandlers;
44

55
use App\Contracts\GameHandler;
6+
use App\Contracts\HasQueryPort;
67
use App\Models\ModPreset;
78
use App\Models\Server;
89
use Illuminate\Database\Eloquent\Model;
10+
use Illuminate\Validation\Rule;
911

1012
abstract class AbstractGameHandler implements GameHandler
1113
{
@@ -65,11 +67,27 @@ final public function settingsRelationName(): ?string
6567
// Default Implementations (override as needed)
6668
// ---------------------------------------------------------------
6769

70+
/**
71+
* @return array<string, mixed>
72+
*/
6873
public function serverValidationRules(?Server $server = null): array
6974
{
70-
return [];
75+
$rules = [];
76+
77+
if ($this instanceof HasQueryPort) {
78+
$rules['query_port'] = [
79+
'required', 'integer', 'min:1', 'max:65535',
80+
Rule::unique('servers', 'query_port')->when($server, fn ($rule) => $rule->ignore($server->id)),
81+
Rule::unique('servers', 'port')->when($server, fn ($rule) => $rule->ignore($server->id)),
82+
];
83+
}
84+
85+
return $rules;
7186
}
7287

88+
/**
89+
* @return array<string, mixed>
90+
*/
7391
public function settingsValidationRules(): array
7492
{
7593
return [];
@@ -89,6 +107,9 @@ public function createRelatedSettings(Server $server): void
89107
$this->settingsModelClass::query()->create(['server_id' => $server->id]);
90108
}
91109

110+
/**
111+
* @param array<string, mixed> $validated
112+
*/
92113
public function updateRelatedSettings(Server $server, array $validated): void
93114
{
94115
if ($this->settingsRelationName === null || $this->settingsModelClass === null) {
@@ -115,6 +136,9 @@ public function modSections(): array
115136
return [];
116137
}
117138

139+
/**
140+
* @param array<string, mixed> $validated
141+
*/
118142
public function syncPresetMods(ModPreset $preset, array $validated): void
119143
{
120144
// No-op for handlers without mod support.

app/GameHandlers/Arma3Handler.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use App\Models\Server;
1717
use App\Services\Renderer\TwigConfigRenderer;
1818
use Illuminate\Support\Facades\Log;
19-
use Illuminate\Validation\Rule;
2019

2120
final class Arma3Handler extends AbstractGameHandler implements DetectsServerState, HasQueryPort, ManagesModAssets, SteamGameHandler, SupportsBackups, SupportsHeadlessClients, SupportsMissions, SupportsWorkshopMods
2221
{
@@ -476,19 +475,21 @@ public function settingsSchema(): array
476475

477476
// --- Validation ---
478477

478+
/**
479+
* @return array<string, mixed>
480+
*/
479481
public function serverValidationRules(?Server $server = null): array
480482
{
481483
return [
482-
'query_port' => [
483-
'required', 'integer', 'min:1', 'max:65535',
484-
Rule::unique('servers', 'query_port')->when($server, fn ($rule) => $rule->ignore($server->id)),
485-
Rule::unique('servers', 'port')->when($server, fn ($rule) => $rule->ignore($server->id)),
486-
],
484+
...parent::serverValidationRules($server),
487485
'password' => ['nullable', 'string', 'max:255'],
488486
'additional_params' => ['nullable', 'string', 'max:1000'],
489487
];
490488
}
491489

490+
/**
491+
* @return array<string, mixed>
492+
*/
492493
public function settingsValidationRules(): array
493494
{
494495
return [

app/GameHandlers/FactorioHandler.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,19 +284,21 @@ public function settingsSchema(): array
284284

285285
// --- Validation ---
286286

287+
/**
288+
* @return array<string, mixed>
289+
*/
287290
public function serverValidationRules(?Server $server = null): array
288291
{
289292
return [
290-
'query_port' => [
291-
'required', 'integer', 'min:1', 'max:65535',
292-
\Illuminate\Validation\Rule::unique('servers', 'query_port')->when($server, fn ($rule) => $rule->ignore($server->id)),
293-
\Illuminate\Validation\Rule::unique('servers', 'port')->when($server, fn ($rule) => $rule->ignore($server->id)),
294-
],
293+
...parent::serverValidationRules($server),
295294
'password' => ['nullable', 'string', 'max:255'],
296295
'additional_params' => ['nullable', 'string', 'max:1000'],
297296
];
298297
}
299298

299+
/**
300+
* @return array<string, mixed>
301+
*/
300302
public function settingsValidationRules(): array
301303
{
302304
$scaleRule = 'in:none,very-low,low,normal,high,very-high';

app/GameHandlers/ProjectZomboidHandler.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,9 @@ public function settingsSchema(): array
168168

169169
// --- Validation ---
170170

171+
/**
172+
* @return array<string, mixed>
173+
*/
171174
public function serverValidationRules(?Server $server = null): array
172175
{
173176
return [
@@ -176,6 +179,9 @@ public function serverValidationRules(?Server $server = null): array
176179
];
177180
}
178181

182+
/**
183+
* @return array<string, mixed>
184+
*/
179185
public function settingsValidationRules(): array
180186
{
181187
return [

app/GameHandlers/ReforgerHandler.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ public function settingsSchema(): array
205205

206206
// --- Validation ---
207207

208+
/**
209+
* @return array<string, mixed>
210+
*/
208211
public function settingsValidationRules(): array
209212
{
210213
return [
@@ -231,6 +234,9 @@ public function modSections(): array
231234
];
232235
}
233236

237+
/**
238+
* @param array<string, mixed> $validated
239+
*/
234240
public function syncPresetMods(ModPreset $preset, array $validated): void
235241
{
236242
$preset->reforgerMods()->sync($validated['reforger_mod_ids'] ?? []);
@@ -258,6 +264,9 @@ public function registeredModPivotTable(): string
258264
return 'mod_preset_reforger_mod';
259265
}
260266

267+
/**
268+
* @param array<string, mixed> $data
269+
*/
261270
public function storeRegisteredMod(array $data): Model
262271
{
263272
return ReforgerMod::query()->create($data);

0 commit comments

Comments
 (0)