]> git.localhorst.tv Git - alttp.git/blobdiff - app/Http/Controllers/AosSeedController.php
add aos generate api endpoint
[alttp.git] / app / Http / Controllers / AosSeedController.php
index 9d35bc09fd0fcc44324a94178665f0158c974a9f..1e2aa73a91b637a07d223cacfa4fb3b729249d2e 100644 (file)
@@ -2,9 +2,10 @@
 
 namespace App\Http\Controllers;
 
-use App\Jobs\GenerateAosSeed;
+use App\DiscordAppCommands\AosrPresetCommand;
 use App\Models\AosSeed;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Artisan;
 
 class AosSeedController extends Controller
 {
@@ -22,16 +23,46 @@ 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;
+
+               if (!isset(AosrPresetCommand::$presets[$presetName])) {
+                       abort(404);
+               }
+               $preset = AosrPresetCommand::$presets[$presetName];
+               $seed = AosSeed::generateSurge($presetName, $preset['settings'], $race);
+               Artisan::call('aos:generate '.intval($seed->id));
+
+               $seed = $this->censor($seed->fresh());
+               return $seed->toJson();
+       }
+
        public function retry($hash) {
                $seed = AosSeed::where('hash', '=', $hash)->firstOrFail();
 
                if ($seed->status == 'error') {
                        $seed->status = 'pending';
                        $seed->save();
-                       GenerateAosSeed::dispatch($seed)->onConnection('database');
+                       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;
+       }
+
 }