intervle - app/Http/Controllers/GameController.php
<?php
namespace App\Http\Controllers;
use App\Models\Event;
use Illuminate\Http\Request;
class GameController extends Controller
{
public function show(string $difficulty, string $date)
{
if (!in_array($difficulty, ['easy', 'medium', 'hard'])) {
return response('', 400);
}
$seed = $this->getSeedFromDateAndDifficulty($difficulty, $date);
if ($seed == -1) {
return response('', 400);
}
$events = Event::dailyRandom($seed)->get();
return view('game.show', compact('events'));
}
public function submit(Request $request, string $difficulty, string $date)
{
if (!in_array($difficulty, ['easy', 'medium', 'hard'])) {
return response('', 400);
}
$seed = $this->getSeedFromDateAndDifficulty($difficulty, $date);
if ($seed == -1) {
return response('', 400);
}
$submitted = $request->input('order');
$correct = Event::dailyRandomOrdered($seed)
->pluck('id')
->toArray();
$results = [];
foreach ($submitted as $index => $eventId) {
$results[] = [
'id' => $eventId,
'correct' => ($correct[$index] ?? null) == $eventId
];
}
return response()->json([
'correct_order' => $correct,
'results' => $results
]);
}
private function getSeedFromDateAndDifficulty(string $difficulty, string $date) {
$today = intval(date('Ymd'));
if ($date == 'today') {
$seed = $today;
} else {
if (intval($date) <= intval($today)) {
$seed = $date;
} else {
return -1;
}
}
return $seed . $difficulty;
}
}