]> git.localhorst.tv Git - alttp.git/blobdiff - app/Http/Controllers/AosSeedController.php
first half of AoS generator
[alttp.git] / app / Http / Controllers / AosSeedController.php
index 3e3a2b05afcd293acd034bb2bf79f5e2e4daa9b4..a1718a13fcaee60da1c91ba502edcac27e7ea00b 100644 (file)
@@ -2,8 +2,10 @@
 
 namespace App\Http\Controllers;
 
+use App\DiscordAppCommands\AosrPresetCommand;
 use App\Models\AosSeed;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Artisan;
 
 class AosSeedController extends Controller
 {
@@ -21,4 +23,50 @@ class AosSeedController extends Controller
                return $seed->toJson();
        }
 
+       public function generate(Request $request) {
+               $validatedData = $request->validate([
+                       'preset' => 'string|required',
+                       'race' => 'boolean',
+               ]);
+               $presetName = $validatedData['preset'];
+               $race = $validatedData['race'] ?? false;
+
+               $preset = AosrPresetCommand::presetByName($presetName);
+               if (!$preset) {
+                       abort(404);
+               }
+               $seed = AosSeed::generateSurge($preset['value'], $preset['settings'], $race);
+               Artisan::call('aos:generate '.intval($seed->id));
+
+               $seed = $this->censor($seed->fresh());
+               return $seed->toJson();
+       }
+
+       public function presets() {
+               return array_values(AosrPresetCommand::$presets);
+       }
+
+       public function retry($hash) {
+               $seed = AosSeed::where('hash', '=', $hash)->firstOrFail();
+
+               if ($seed->status == 'error') {
+                       $seed->status = 'pending';
+                       $seed->save();
+                       Artisan::call('aos:generate '.intval($seed->id));
+               }
+
+               $seed = $this->censor($seed->fresh());
+               return $seed->toJson();
+       }
+
+       private function censor(AosSeed $seed) {
+               if ($seed->race) {
+                       $seed->makeHidden('seed');
+               }
+               if ($seed->mystery) {
+                       $seed->makeHidden('settings');
+               }
+               return $seed;
+       }
+
 }