fix: answer null instead of 500 when the export marker is missing
This commit is contained in:
1 parent
8a6ce7606f
commit
c2c55bc8b2
4 files changed
+83
-15
No files matched your search
@@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\BusProNet\Model;
|
||||
|
||||
use League\Flysystem\FilesystemException;
|
||||
use League\Flysystem\FilesystemOperator;
|
||||
|
||||
final readonly class XmlExportInfo
|
||||
{
|
||||
private const INFO_FILENAME = 'uebertragung.info';
|
||||
@@ -20,6 +23,26 @@ final readonly class XmlExportInfo
|
||||
return self::INFO_FILENAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the marker from a storage, or null when it is missing or unreadable.
|
||||
*
|
||||
* A marker caught mid-sync or truncated is treated as absent rather than as an error:
|
||||
* callers only ever want to know which export they are looking at, and "unknown" is
|
||||
* an answer they can act on.
|
||||
*/
|
||||
public static function fromStorage(FilesystemOperator $storage): ?self
|
||||
{
|
||||
try {
|
||||
if (false === $storage->fileExists(self::INFO_FILENAME)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::fromString($storage->read(self::INFO_FILENAME));
|
||||
} catch (FilesystemException|\InvalidArgumentException) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static function fromString(string $content): self
|
||||
{
|
||||
$content = mb_convert_encoding($content, 'UTF-8', 'Windows-1252');
|
||||
|
||||
Reference in new issue
Block a user