publish operations

This commit is contained in:
2026-01-09 19:08:00 +02:00
parent 84cd04c94f
commit 0ed0106103
14 changed files with 519 additions and 106 deletions
+81 -12
View File
@@ -1,5 +1,6 @@
<?php namespace Lucent\Core\Record;
use Illuminate\Support\Facades\Validator;
use Lucent\Core\Data\RecordError;
use Lucent\Core\Data\RecordField;
use Lucent\Core\Data\RecordMode;
@@ -23,7 +24,7 @@ class RecordValidationModule
$errors = [];
foreach ($schemaFields as $schemaField) {
$res = static::validateField("main", $schemaField, $recordFields);
$errors = array_merge($errors, $res);
$errors[] = $res;
if ($schemaField->translatable) {
foreach ($locales as $locale) {
$res = static::validateField(
@@ -31,7 +32,7 @@ class RecordValidationModule
$schemaField,
$recordFields,
);
$errors = array_merge($errors, $res);
$errors[] = $res;
}
}
}
@@ -52,15 +53,27 @@ class RecordValidationModule
string $locale,
Field $schemaField,
array $recordFields,
): array {
): ?RecordError {
// General Validations
$error = static::validateRequired($locale, $schemaField, $recordFields);
if (!empty($error)) {
return $error;
}
// Type specific
$error = match ($schemaField->type) {
"text" => static::validateText(
$locale,
$schemaField,
$recordFields,
),
default => static::validateText(
$locale,
$schemaField,
$recordFields,
),
};
return collect([$error])
->filter(fn($err) => $err !== null)
->values()
->toArray();
return $error;
}
/**
@@ -77,11 +90,7 @@ class RecordValidationModule
if ($schemaField->required === false) {
return null;
}
$recordField = collect($recordFields)->first(
fn(RecordField $field) => $field->id === $schemaField->id &&
$field->locale === $locale &&
$field->mode === RecordMode::DRAFT,
);
$recordField = static::findField($recordFields, $schemaField, $locale);
if (empty($recordField) || empty($recordField->value)) {
return new RecordError(
@@ -93,4 +102,64 @@ class RecordValidationModule
return null;
}
/**
*
* @param Field $schemaField
* @param RecordField[] $recordFields
* @return ?RecordError
*/
public static function validateText(
string $locale,
Field $schemaField,
array $recordFields,
): ?RecordError {
$recordField = static::findField($recordFields, $schemaField, $locale);
if (empty($recordField)) {
// We have already checked for required fields so only validate existing
return null;
}
$rules = "";
if ($schemaField->props->min > 0) {
$rules = "min:" . $schemaField->props->min;
}
if ($schemaField->props->max > 0) {
$rules = "max:" . $schemaField->props->max;
}
if (empty($rules)) {
return null;
}
$validator = Validator::make(
["value" => $recordField->value],
[
"value" => $rules,
],
);
if ($validator->fails()) {
return new RecordError(
$schemaField->id,
$locale,
$validator->errors()->first(),
);
}
return null;
}
private static function findField(
array $recordFields,
Field $schemaField,
string $locale,
): ?RecordField {
return collect($recordFields)->first(
fn(RecordField $field) => $field->id === $schemaField->id &&
$field->locale === $locale &&
$field->mode === RecordMode::DRAFT,
);
}
}