Serviços e contratos de execução
Esses pontos de entrada cobrem geração programática, registro de feeds, integração com o agendador, transformação escalar e campos opcionais.
GeneratorService
DragonCode\LaravelFeed\Services\GeneratorService gera e publica um feed.
public function feed(Feed $feed, ?OutputStyle $output = null): GenerationResultData
O método publica todas as partes como uma operação, atualiza a última atividade do registro, dispara eventos do ciclo de vida e retorna os caminhos com a quantidade de registros por arquivo. A resolução do disco e do caminho de saída ocorre antes do início da geração. Para um feed comum, as exceções dessa verificação prévia, incluindo UnsupportedStorageDiskException, são lançadas diretamente. Para um feed configurado que implementa HasFeedTargets, as falhas da verificação prévia são envolvidas em FeedGenerationException para manter a chave do alvo disponível. Depois que a verificação prévia é concluída, as falhas de geração são envolvidas para todos os feeds, mantendo a exceção original como exceção anterior.
Resolva o serviço pelo contêiner do Laravel em vez de construir suas dependências internas.
use App\Feeds\UserFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
$result = app(GeneratorService::class)->feed(app(UserFeed::class));
foreach ($result->records as $path => $count) {
processFeedResult($path, $count);
}
GeneratorService gera um único feed configurado e não enumera alvos. Resolva primeiro um alvo ao chamar o serviço diretamente:
use App\Feeds\PartnerFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
use RuntimeException;
$feed = app(PartnerFeed::class);
$target = $feed->findTarget('42')
?? throw new RuntimeException('Feed target [42] not found.');
$result = app(GeneratorService::class)->feed(
$feed->forTarget($target),
);
FeedQuery
DragonCode\LaravelFeed\Queries\FeedQuery gerencia registros persistidos de feeds.
| Método | Resultado |
|---|---|
| `create(string $class, string $title, Expression | string $expression = '0 * * * *', bool $isActive = true, array $extra = []): Feed` |
find(int $id): Feed | Retorna um registro ou lança FeedNotFoundException. |
all(): Builder | Retorna todos os registros ordenados por ID. |
active(): Builder | Retorna registros ativos ordenados por ID. |
setLastActivity(string $class): void | Atualiza last_activity de uma classe de feed. |
delete(int $id): void | Exclui logicamente um registro pelo ID. |
deleteByClass(string $class): void | Remove definitivamente registros da classe, inclusive os excluídos. |
restore(int $id): void | Restaura um registro excluído logicamente. |
$expression aceita uma string de expressão cron bruta, inclusive aliases compatíveis com dragonmantank/cron-expression, como @daily, ou DragonCode\LaravelFeed\Scheduling\Expression. Valores configurados por chamadas fluentes são convertidos na respectiva string cron antes da validação e da persistência. A leitura do modelo retorna a string armazenada. Veja expressões de registro para um exemplo.
Use a migration ou a operação de implantação gerada para alterações comuns, mantendo-as reproduzíveis entre ambientes.
ScheduleFeedHelper
DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper::register() adiciona registros ativos ao agendador do Laravel. Cada registro usa sua expressão cron e um bloqueio contra sobreposição. Execução em segundo plano e TTL vêm de feeds.schedule.
O registro é ignorado com segurança quando a tabela configurada não existe.
Transformer
Implemente DragonCode\LaravelFeed\Contracts\Transformer para converter valores compatíveis antes da serialização.
public function allow(mixed $value): bool
public function transform(mixed $value): string
allow() decide se o transformador aceita o valor. transform() retorna sua representação escalar serializada. Adicione a classe por Feed::transformers() ou feeds.transformers.
OptionalData
Retorne um novo DragonCode\LaravelFeed\Data\OptionalData para um campo que deve ser omitido quando não houver valor. XML, RSS, JSON e JSON Lines o omitem. CSV mantém a coluna e grava um campo vazio.