Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCrwHHnGCB5XH968Nxokqw
55 lines
1.6 KiB
PHP
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();
|
|
}
|
|
}
|