publish operations
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user