Each handler now declares the data class it needs via dataClass(). The controller builds the appropriate typed DTO from the raw request array before calling handle(), giving handlers typed property access instead of raw array lookups. Handlers moved to App\Services\Micropub\Handlers, data objects to App\Services\Micropub\Data. MicropubHandlerRegistry and the interface are documented with flow diagrams and guidance for adding new types. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
44 lines
1.6 KiB
PHP
44 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Micropub\Handlers;
|
|
|
|
use App\Services\Micropub\Data\MicropubData;
|
|
|
|
/**
|
|
* Contract for all Micropub request handlers.
|
|
*
|
|
* The Micropub endpoint receives different types of request — creating an
|
|
* h-entry (note, article, bookmark, like), creating an h-card (place), or
|
|
* updating an existing post. Each type is handled by its own class that
|
|
* implements this interface.
|
|
*
|
|
* Each handler declares the typed data object it needs via dataClass(). The
|
|
* controller calls dataClass()::fromArray() to build the right object before
|
|
* passing it to handle(), so the handler always receives a concrete typed
|
|
* object rather than a raw array.
|
|
*
|
|
* Handlers live in App\Services\Micropub\Handlers.
|
|
* Their corresponding data objects live in App\Services\Micropub\Data.
|
|
* Handlers are registered in MicropubServiceProvider and looked up by type
|
|
* string (e.g. "entry", "card", "update") via MicropubHandlerRegistry.
|
|
*/
|
|
interface MicropubHandlerInterface
|
|
{
|
|
/**
|
|
* Return the fully-qualified class name of the data object this handler
|
|
* expects. The controller will call fromArray() on this class to build the
|
|
* object from the normalised request data before calling handle().
|
|
*
|
|
* @return class-string<MicropubData>
|
|
*/
|
|
public function dataClass(): string;
|
|
|
|
/**
|
|
* Process the request and return a result array with at minimum a
|
|
* 'response' key ('created' or 'updated') and a 'url' key pointing to
|
|
* the affected resource.
|
|
*/
|
|
public function handle(MicropubData $data): array;
|
|
}
|