Files
hado/core/app/Http/Controllers/Me/EventsController.php
2026-09-04 07:05:50 -03:00

55 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Me;
use App\Delivery\EventActions;
use App\Enums\EventState;
use App\Http\Controllers\Api\EventsController as ApiPresenter;
use App\Http\Controllers\Controller;
use App\Models\Event;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class EventsController extends Controller
{
public function __construct(private readonly EventActions $actions) {}
public function index(Request $request): JsonResponse
{
/** @var User $user */
$user = $request->attributes->get('user');
$states = $request->query('state')
? [$request->query('state')]
: EventState::nonTerminalValues();
$events = $user->events()->whereIn('state', $states)->orderBy('due_date')->orderBy('due_instant')->get();
return response()->json(['events' => $events->map(fn (Event $e) => ApiPresenter::present($e) + ['source' => $e->source->name])->values()]);
}
public function ack(Request $request, int $event): JsonResponse
{
$model = $this->own($request, $event);
$this->actions->ack($model);
return response()->json(ApiPresenter::present($model->fresh()));
}
public function done(Request $request, int $event): JsonResponse
{
$model = $this->own($request, $event);
$this->actions->done($model);
return response()->json(ApiPresenter::present($model->fresh()));
}
private function own(Request $request, int $id): Event
{
/** @var User $user */
$user = $request->attributes->get('user');
return $user->events()->whereKey($id)->firstOrFail();
}
}