- Rearange formularies in Settings Controller

- formulary api output
- Formulary seeder slug unique
- rename Formulary visible column because the prop is hidden by Model trait Concerns\HideAttributes
- mandatory input phone was not type of phone
- form factory to be status default
- formulary factory type
This commit is contained in:
Jérémy Munsch 2023-08-23 09:44:51 +02:00
parent ed0e115ed0
commit 15ee6ece22
No known key found for this signature in database
GPG key ID: 18361AF3BFEC0FEC
10 changed files with 92 additions and 36 deletions

View file

@ -6,7 +6,6 @@ use App\Enums\SettingTypesEnum;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use App\Http\Resources\ApiResponseResource;
use App\Models\Formulary;
class SettingsController extends Controller
{
@ -30,14 +29,4 @@ class SettingsController extends Controller
return new ApiResponseResource("OK", $response);
}
/**
* Get Formulary settings.
*
* @return \Illuminate\Http\JsonResponse
*/
public function getFormulary()
{
return new ApiResponseResource("OK", Formulary::get()->makeHidden(['created_at', 'updated_at']));
}
}

View file

@ -7,12 +7,14 @@ use App\Http\Resources\AppUserResource;
use App\Http\Resources\ContactResource;
use App\Http\Resources\DirectoryResource;
use App\Http\Resources\DocumentResource;
use App\Http\Resources\FormularyResource;
use App\Mail\SendFlyer;
use App\Mail\SendFlyerFailed;
use App\Models\AppUser;
use App\Models\Contact;
use App\Models\Directory;
use App\Models\Document;
use App\Models\Formulary;
use App\Models\Setting;
use Google\Cloud\Vision\V1\ImageAnnotatorClient;
use GuzzleHttp\Exception\ClientException;
@ -94,6 +96,14 @@ class SyncController extends Controller
return ['version' => $version->version, 'ShowIsActive' => $ShowIsActive->ShowIsActive, 'newApp' => $newApp];
}
/**
* @return \App\Http\Resources\ContactsCollection
*/
public function getFormularies()
{
return FormularyResource::collection(Formulary::all());
}
/**
* @param \Illuminate\Http\Request $request
* @return string

View file

@ -28,7 +28,7 @@ class StoreFormularyRequest extends FormRequest
{
$this->merge([
'required' => $this->required ? true : false,
'visible' => $this->visible ? true : false,
'is_visible' => $this->visible ? true : false,
]);
}
@ -50,7 +50,7 @@ class StoreFormularyRequest extends FormRequest
'details.*' => 'required|array',
'details.*.*' => 'sometimes|string|min:3|max:100',
'required' => 'required|boolean',
'visible' => 'required|boolean',
'is_visible' => 'required|boolean',
];
if (intval($this->status) !== InputStatusEnum::locked()->value) {
$rules = array_merge($rules, ['name' => 'required|string|min:3|max:70']);
@ -77,7 +77,7 @@ class StoreFormularyRequest extends FormRequest
'details.*' => trans('détail 2'),
'details.*.value' => trans('valeur d\'un élément dans la liste des détails du contenu'),
'required' => trans('l\'état d\'obligation'),
'visible' => trans('l\'état de visibilité'),
'is_visible' => trans('l\'état de visibilité'),
];
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class FormularyResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
* @phpcs:disable: Squiz.Commenting.FunctionComment.TypeHintMissing
* @phpcs:disable: Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function toArray($request)
{
/** @var \App\Models\Formulary */
$formulary = $this;
return [
'id' => $formulary->id,
'type' => $formulary->type->value,
'name' => $formulary->name,
'placeholder' => $formulary->placeholder,
'details' => \collect($formulary->details)->filter()->map(function (array $detail) {
// * Realm can't hold more deeper dans Map<mixed,primitive>
return \json_encode($detail);
})->all(),
'is_visible' => $formulary->is_visible,
'required' => $formulary->required,
'status' => $formulary->status->value,
'order' => $formulary->order,
];
}
}

View file

@ -11,13 +11,15 @@ use Kwaadpepper\Enum\Traits\CastsEnums;
/**
* @property integer $id
* @property InputTypeEnum $type
* @property \App\Enums\Formularies\InputTypeEnum $type
* @property string $name
* @property string $placeholder
* @property string $details
* @property boolean $visible
* @property string $slug
* @property array<string,string> $placeholder
* @property array<string,array<string,string>> $details
* @property boolean $is_visible
* @property boolean $required
* @property InputStatusEnum $status
* @property \App\Enums\Formularies\InputStatusEnum $status
* @property integer $order
*/
class Formulary extends Model
{
@ -34,7 +36,7 @@ class Formulary extends Model
'slug',
'placeholder',
'details',
'visible',
'is_visible',
'required',
'status',
];
@ -43,6 +45,8 @@ class Formulary extends Model
* @var string[]
*/
protected $casts = [
'required' => 'bool',
'is_visible' => 'bool',
'placeholder' => 'json',
'details' => 'json',
];
@ -68,9 +72,11 @@ class Formulary extends Model
static::setSlug($model);
static::setStatusField($model);
static::setOrder($model);
static::makeRequiredSense($model);
});
static::updating(function (self $model) {
static::setSlug($model);
static::makeRequiredSense($model);
});
}
@ -88,6 +94,21 @@ class Formulary extends Model
$model->slug = Str::slug($model->name);
}
/**
* Set required logical
*
* @param self $model
*
* @return void
*/
private static function makeRequiredSense(self $model)
{
if ($model->is_visible == false) {
$model->required = false;
\session()->flash(trans('Le champ ne peut être obligatoire si il n\'est pas visible'));
}
}
/**
* Set the status field.
*

View file

@ -17,7 +17,7 @@ class FormularyFactory extends Factory
public function definition()
{
$mandatoryLocales = ['fr', 'en', 'de', 'nl'];
$name = $this->faker->company;
$name = $this->faker->unique()->company;
$type = \collect(InputTypeEnum::toArray())->random();
$details = null;
if (
@ -29,7 +29,7 @@ class FormularyFactory extends Factory
$details = $this->faker->words(\count($mandatoryLocales));
}
return [
'type' => \collect(InputTypeEnum::toArray())->random(),
'type' => $type,
'name' => $name,
'slug' => Str::of($name)->slug(),
'placeholder' => \collect($mandatoryLocales)->mapWithKeys(function ($locale) {
@ -39,10 +39,10 @@ class FormularyFactory extends Factory
return \collect($mandatoryLocales)->mapWithKeys(function ($locale) use ($word) {
return [$locale => "{$locale} {$word}"];
})->all();
})->all() : $details,
'visible' => $this->faker->boolean(75),
})->all() : null,
'is_visible' => $this->faker->boolean(75),
'required' => $this->faker->boolean(75),
'status' => \collect(InputStatusEnum::toArray())->random(),
'status' => InputStatusEnum::default(),
];
}
}

View file

@ -20,7 +20,7 @@ class CreateFormulariesTable extends Migration
$table->string('slug')->unique()->comment('The slug of the input name.');
$table->text('placeholder')->nullable()->comment('Placeholder of the input.');
$table->text('details')->nullable()->comment('Details of the input.');
$table->boolean('visible')->comment('The input is visible or not.');
$table->boolean('is_visible')->comment('The input is visible or not.');
$table->boolean('required')->comment('The input is required or not.');
$table->boolean('status')->comment('The status of the input.');
$table->integer('order')->comment('Order of this specific input.');

View file

@ -25,7 +25,7 @@ class MandatoryFormularySeeder extends Seeder
$formulary->placeholder = ["fr" => "Prénom", "en" => "Firstname", "de" => "Vorname", "nl" => "Voornaam"];
$formulary->details = null;
$formulary->required = true;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::locked();
$formulary->order = 1;
$formulary->saveOrFail();
@ -39,7 +39,7 @@ class MandatoryFormularySeeder extends Seeder
$formulary->placeholder = ["fr" => "Nom", "en" => "Lastname", "de" => "Name", "nl" => "Naam"];
$formulary->details = null;
$formulary->required = true;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::locked();
$formulary->order = 2;
$formulary->saveOrFail();
@ -53,7 +53,7 @@ class MandatoryFormularySeeder extends Seeder
$formulary->placeholder = ["fr" => "E-mail", "en" => "E-mail", "de" => "E-mail", "nl" => "E-mail"];
$formulary->details = null;
$formulary->required = true;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::system();
$formulary->order = 3;
$formulary->saveOrFail();
@ -67,7 +67,7 @@ class MandatoryFormularySeeder extends Seeder
$formulary->placeholder = ["fr" => "Société", "en" => "Society", "de" => "Unternehmen", "nl" => "Bedrijf"];
$formulary->details = null;
$formulary->required = false;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::locked();
$formulary->order = 4;
$formulary->saveOrFail();
@ -81,7 +81,7 @@ class MandatoryFormularySeeder extends Seeder
$formulary->placeholder = ["fr" => "Adresse", "en" => "Address", "de" => "Anschrift", "nl" => "Adres"];
$formulary->details = null;
$formulary->required = false;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::locked();
$formulary->order = 5;
$formulary->saveOrFail();
@ -89,13 +89,13 @@ class MandatoryFormularySeeder extends Seeder
if (!Formulary::query()->where('slug', 'phone')->exists()) {
$formulary = new Formulary();
$formulary->type = InputTypeEnum::text();
$formulary->type = InputTypeEnum::phone();
$formulary->name = "phone";
$formulary->slug = "phone";
$formulary->placeholder = ["fr" => "Téléphone", "en" => "Phone", "de" => "Telefon", "nl" => "Telefoon"];
$formulary->details = null;
$formulary->required = false;
$formulary->visible = true;
$formulary->is_visible = true;
$formulary->status = InputStatusEnum::locked();
$formulary->order = 6;
$formulary->saveOrFail();

View file

@ -6,7 +6,7 @@
'type' => __('Type'),
'name' => __('Nom'),
'required' => __('Requis'),
'visible' => __('Visible'),
'is_visible' => __('Visible'),
'order' => __('Ordre')
];
@endphp
@ -33,7 +33,7 @@
@endif
</td>
<td class="text-center">
@if ($formularyModel->visible)
@if ($formularyModel->is_visible)
<i class="fa-solid fa-circle-check text-primary"></i>
@else
<i class="fa-solid fa-circle-xmark text-danger"></i>

View file

@ -19,8 +19,8 @@ use Illuminate\Support\Facades\Route;
Route::name('api.')->middleware('api.token')->group(function () {
// FIXME: sur les méthodes GET le token est visible dans les logs server..
Route::get('settings', [SettingsController::class, 'get'])->name('settings.index');
Route::get('settings/form', [SettingsController::class, 'getFormulary'])->name('formularies.index');
Route::get('app', [AppController::class, 'get'])->name('settings.app');
Route::get('formularies', [SyncController::class, 'getFormularies'])->name('formularies.index');
Route::get('users', [SyncController::class, 'getUsers'])->name('users.index');
Route::get('directories', [SyncController::class, 'getDirectories'])->name('directories.index');
Route::get('documents', [SyncController::class, 'getDocuments'])->name('documents.index');