Optimize academy
This commit is contained in:
@@ -27,6 +27,7 @@ class UpsertAcademyPromptTemplateRequest extends FormRequest
|
||||
'placeholders' => $this->normalizePlaceholders($this->input('placeholders')),
|
||||
'helper_prompts' => $this->normalizeHelperPrompts($this->input('helper_prompts')),
|
||||
'prompt_variants' => $this->normalizePromptVariants($this->input('prompt_variants')),
|
||||
'filled_examples' => $this->normalizeFilledExamples($this->input('filled_examples')),
|
||||
'tool_notes' => collect($this->input('tool_notes', []))
|
||||
->filter(static fn ($note): bool => is_array($note) || is_string($note))
|
||||
->map(function ($note): array|string {
|
||||
@@ -59,8 +60,10 @@ class UpsertAcademyPromptTemplateRequest extends FormRequest
|
||||
$promptId = $this->route('academyPromptTemplate')?->id;
|
||||
|
||||
return [
|
||||
'category_id' => ['nullable', 'integer', 'exists:academy_categories,id'],
|
||||
'new_category_name' => ['nullable', 'string', 'max:120'],
|
||||
// Require either an existing category selection or a new category name.
|
||||
'category_id' => ['nullable', 'integer', 'exists:academy_categories,id', 'required_without:new_category_name'],
|
||||
'new_category_name' => ['nullable', 'string', 'max:120', 'required_without:category_id'],
|
||||
|
||||
'title' => ['required', 'string', 'max:180'],
|
||||
'slug' => ['required', 'string', 'max:180', Rule::unique('academy_prompt_templates', 'slug')->ignore($promptId)],
|
||||
'excerpt' => ['nullable', 'string'],
|
||||
@@ -112,6 +115,12 @@ class UpsertAcademyPromptTemplateRequest extends FormRequest
|
||||
'prompt_variants.*.risk_notes' => ['nullable', 'array'],
|
||||
'prompt_variants.*.risk_notes.*' => ['nullable', 'string'],
|
||||
'prompt_variants.*.active' => ['nullable', 'boolean'],
|
||||
'filled_examples' => ['nullable', 'array', 'max:5'],
|
||||
'filled_examples.*.title' => ['nullable', 'string', 'max:180'],
|
||||
'filled_examples.*.description' => ['nullable', 'string'],
|
||||
'filled_examples.*.placeholder_values' => ['nullable', 'array'],
|
||||
'filled_examples.*.prompt' => ['required_with:filled_examples', 'string'],
|
||||
'filled_examples.*.negative_prompt' => ['nullable', 'string'],
|
||||
'difficulty' => ['required', 'string', Rule::in((array) config('academy.difficulty_levels', []))],
|
||||
'access_level' => ['required', 'string', Rule::in(['free', 'creator', 'pro'])],
|
||||
'aspect_ratio' => ['nullable', 'string', 'max:20'],
|
||||
@@ -283,6 +292,53 @@ class UpsertAcademyPromptTemplateRequest extends FormRequest
|
||||
->all();
|
||||
}
|
||||
|
||||
private function normalizeFilledExamples(mixed $value): mixed
|
||||
{
|
||||
$value = $this->decodeStructuredInput($value);
|
||||
|
||||
if ($value === null) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (! is_array($value)) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
$value = $this->normalizeStructuredObjectList($value, ['title', 'description', 'placeholder_values', 'prompt', 'negative_prompt']);
|
||||
|
||||
return collect($value)
|
||||
->values()
|
||||
->map(function ($example): mixed {
|
||||
if (! is_array($example)) {
|
||||
return $example;
|
||||
}
|
||||
|
||||
return [
|
||||
'title' => $this->normalizeOptionalString($example['title'] ?? null),
|
||||
'description' => $this->normalizeOptionalString($example['description'] ?? null),
|
||||
'placeholder_values' => is_array($example['placeholder_values'] ?? null) ? $example['placeholder_values'] : [],
|
||||
'prompt' => $this->normalizeOptionalString($example['prompt'] ?? null),
|
||||
'negative_prompt' => $this->normalizeOptionalString($example['negative_prompt'] ?? null),
|
||||
];
|
||||
})
|
||||
->filter(function ($example): bool {
|
||||
if (! is_array($example)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return collect([
|
||||
$example['title'] ?? null,
|
||||
$example['description'] ?? null,
|
||||
$example['prompt'] ?? null,
|
||||
$example['negative_prompt'] ?? null,
|
||||
$example['placeholder_values'] ?? null,
|
||||
])->contains(fn ($item): bool => $item !== null && $item !== '' && $item !== []);
|
||||
})
|
||||
->take(5)
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
|
||||
private function normalizePromptVariants(mixed $value): mixed
|
||||
{
|
||||
$value = $this->decodeStructuredInput($value);
|
||||
|
||||
Reference in New Issue
Block a user