RequirementTemplateSeeder.php
1 <?php 2 3 namespace Database\Seeders; 4 5 use App\Enums\InboxFileTypeEnum; 6 use App\Models\RequirementTemplate; 7 use App\Models\ValidationType; 8 use File; 9 use Illuminate\Database\Console\Seeds\WithoutModelEvents; 10 use Illuminate\Database\Eloquent\Collection; 11 use Illuminate\Database\Seeder; 12 use Illuminate\Database\Eloquent\Factories\Sequence; 13 14 15 class RequirementTemplateSeeder extends Seeder 16 { 17 /** 18 * Run the database seeds. 19 * 20 * @return void 21 */ 22 public function run() 23 { 24 $lang = app()->getLocale(); 25 $json = File::get('database/data/requirement-templates.json'); 26 $data = json_decode($json, true)[$lang]; 27 $validationTypes = ValidationType::all(); 28 29 foreach ($validationTypes as $validationType) { 30 if ($validationType->name == InboxFileTypeEnum::id2name(1)) { 31 // Lista de requerimientos de Revisión de Solicitud de Certificacion (InformeValidacionSolicitudCertificacion) 32 $this->createRequirementTemplates($validationType->id, 'RequestRequirement-', $data['reviewData']); 33 } else { 34 // Lista de requerimientos de Validación ETR y Validación de Informe Parcial 35 $this->createRequirementTemplates($validationType->id, 'Validation/F-', $data['validateData']); 36 } 37 } 38 } 39 40 /** 41 * Creates requirements based on a set of data for a specific validation type. 42 * 43 * @param int $validationTypeId The ID of the validation type to which the requirements will be assigned. 44 * @param string $titlePrefix The prefix to be used for the title of each requirement. 45 * @param array $data The data of the requirements, in array format. 46 * @return Illuminate\Database\Eloquent\Collection The collection of created requirement templates. 47 */ 48 private function createRequirementTemplates(int $validationTypeId, string $titlePrefix, array $data): Collection 49 { 50 return RequirementTemplate::factory() 51 ->count(count($data)) 52 ->sequence(fn (Sequence $sequence) => [ 53 'title' => $titlePrefix . ($sequence->index + 1), 54 'description' => $data[$sequence->index], 55 ]) 56 ->create([ 57 'validation_type_id' => $validationTypeId, 58 ]); 59 } 60 }