75 lines
2.2 KiB
PHP
75 lines
2.2 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\Cache;
|
||
use Illuminate\Support\Facades\Redis;
|
||
use Illuminate\Support\Facades\Auth;
|
||
|
||
class TaskStatusController
|
||
{
|
||
public function index(Request $request): JsonResponse
|
||
{
|
||
$userId = (int) $request->user()->id; // du hast in Redis bereits "user:{id}:tasks"
|
||
$keySet = "user:{$userId}:tasks";
|
||
|
||
$taskKeys = Redis::smembers($keySet) ?: [];
|
||
$items = [];
|
||
|
||
foreach ($taskKeys as $key) {
|
||
$snap = Cache::store('redis')->get($key);
|
||
if ($snap) {
|
||
// erwartet: ['type','status','message','payload'=>['domain'=>..], ...]
|
||
$items[] = ['id' => $key] + $snap;
|
||
}
|
||
}
|
||
|
||
return response()->json([
|
||
'ok' => true,
|
||
'count' => count($items),
|
||
'items' => $items,
|
||
]);
|
||
}
|
||
|
||
public function active(Request $request)
|
||
{
|
||
$userId = Auth::id() ?? 0; // oder feste 3, wenn du noch ohne Login testest
|
||
$setKey = "user:{$userId}:tasks";
|
||
|
||
$items = [];
|
||
foreach (Redis::smembers($setKey) ?? [] as $taskKey) {
|
||
if ($payload = Cache::store('redis')->get($taskKey)) {
|
||
$items[] = ['id' => $taskKey] + $payload;
|
||
}
|
||
}
|
||
|
||
return response()->json(['items' => $items]);
|
||
}
|
||
|
||
// public function active(Request $request)
|
||
// {
|
||
// // Wenn du pro-User Toaster verwaltest:
|
||
// $userId = Auth::id() ?? 0;
|
||
//
|
||
// // Wir gehen davon aus, dass du eine Set-Liste der Keys pflegst,
|
||
// // z.B. "ui:toasts:users:{id}" und unter jedem $taskKey ein JSON-Objekt im Cache liegt.
|
||
// $setKey = "ui:toasts:users:{$userId}";
|
||
// $keys = Redis::smembers($setKey) ?? [];
|
||
//
|
||
// $items = [];
|
||
// foreach ($keys as $key) {
|
||
// $payload = Cache::store('redis')->get($key);
|
||
// if ($payload) {
|
||
// $items[] = array_merge(['id' => $key], $payload);
|
||
// }
|
||
// }
|
||
//
|
||
// // Immer JSON liefern – kein Redirect, keine Blade-View
|
||
// return response()->json([
|
||
// 'items' => $items,
|
||
// ]);
|
||
// }
|
||
}
|