neoko's avatar
Level 1

Help with model factory pls

Hello, i want to create 3 models of salon_permissions, when salon is created, how can i do this?

Now i'm trying to do createDefaultRoles function when salon created, and call SalonPermission factory, i tried many things, but i stopped when i can't assign role to $this->getDefaultPermissions() function, because role is coming with create([attributes]). chatgpt can't help :( //SalonPermissionsFactory

class SalonPermissionsFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    protected $model = SalonPermissions::class;

    public function definition()
    {
        $role = $this->faker->randomElement(['participant','admin','owner']);
        return [
                'role' => $role,
                'salon_id' => Salon::factory(),
            ] + $this->getDefaultPermissions($role);
    }
    private function getDefaultPermissions(string $role): array
    {
        $defaultPermissions = [
            'participant' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => false,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => false,
                'masters_info_permission' => false,
                'edit_masters_permission' => false,
                'edit_salon_services_permission' => false,
                'edit_bonus_card_permission' => false,
                'edit_certificate_permission' => false,
                'reviews_info_permission' => false,
                'reviews_reply_permission' => false,
                'edit_discounts_permission' => false,
                'notation_permission' => false,
                'edit_salon_permission' => false,
                'moderation_permission' => false,
                'subscription_and_pay_permission' => false,
                'create_invitation_permission' => false,
            ],
            'admin' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => true,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => true,
                'masters_info_permission' => true,
                'edit_masters_permission' => true,
                'edit_salon_services_permission' => true,
                'edit_bonus_card_permission' => true,
                'edit_certificate_permission' => true,
                'reviews_info_permission' => true,
                'reviews_reply_permission' => true,
                'edit_discounts_permission' => true,
                'notation_permission' => true,
                'edit_salon_permission' => true,
                'moderation_permission' => false,
                'subscription_and_pay_permission' => false,
                'create_invitation_permission' => false,
            ],
            'owner' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => true,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => true,
                'masters_info_permission' => true,
                'edit_masters_permission' => true,
                'edit_salon_services_permission' => true,
                'edit_bonus_card_permission' => true,
                'edit_certificate_permission' => true,
                'reviews_info_permission' => true,
                'reviews_reply_permission' => true,
                'edit_discounts_permission' => true,
                'notation_permission' => true,
                'edit_salon_permission' => true,
                'moderation_permission' => true,
                'subscription_and_pay_permission' => true,
                'create_invitation_permission' => true,
            ],
        ];
        return $defaultPermissions[$role] ?? [];
    }
}

//Salon.php model

public function createDefaultRoles()
    {
        SalonPermissions::factory([
            'salon_id' => $this->id,
        ])->count(3)->create();
    }
0 likes
1 reply
neoko's avatar
Level 1

i just replaced all logic to Salon Model, and it worked

public function createDefaultRoles()
    {
        $roles = ['participant', 'admin', 'owner'];
        foreach ($roles as $role) {
            SalonPermissions::create([
                'role' => $role,
                'salon_id' => $this->id,
            ] + $this->getDefaultPermissions($role));
        }
    }
    private function getDefaultPermissions(string $role): array
    {
        $defaultPermissions = [
            'participant' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => false,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => false,
                'masters_info_permission' => false,
                'edit_masters_permission' => false,
                'edit_salon_services_permission' => false,
                'edit_bonus_card_permission' => false,
                'edit_certificate_permission' => false,
                'reviews_info_permission' => false,
                'reviews_reply_permission' => false,
                'edit_discounts_permission' => false,
                'notation_permission' => false,
                'edit_salon_permission' => false,
                'moderation_permission' => false,
                'subscription_and_pay_permission' => false,
                'create_invitation_permission' => false,
            ],
            'admin' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => true,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => true,
                'masters_info_permission' => true,
                'edit_masters_permission' => true,
                'edit_salon_services_permission' => true,
                'edit_bonus_card_permission' => true,
                'edit_certificate_permission' => true,
                'reviews_info_permission' => true,
                'reviews_reply_permission' => true,
                'edit_discounts_permission' => true,
                'notation_permission' => true,
                'edit_salon_permission' => true,
                'moderation_permission' => false,
                'subscription_and_pay_permission' => false,
                'create_invitation_permission' => false,
            ],
            'owner' => [
                'records_info_permission' => true,
                'create_records_permission' => true,
                'edit_records_permission' => true,
                'clients_info_permission' => true,
                'create_clients_permission' => true,
                'edit_clients_permission' => true,
                'add_to_clients_bonus_card_permission' => true,
                'fill_bonus_card_permission' => true,
                'add_to_clients_certificate_permission' => true,
                'work_schedule_info_permission' => true,
                'edit_work_schedule_permission' => true,
                'masters_info_permission' => true,
                'edit_masters_permission' => true,
                'edit_salon_services_permission' => true,
                'edit_bonus_card_permission' => true,
                'edit_certificate_permission' => true,
                'reviews_info_permission' => true,
                'reviews_reply_permission' => true,
                'edit_discounts_permission' => true,
                'notation_permission' => true,
                'edit_salon_permission' => true,
                'moderation_permission' => true,
                'subscription_and_pay_permission' => true,
                'create_invitation_permission' => true,
            ],
        ];
        return $defaultPermissions[$role] ?? [];
    }

Please or to participate in this conversation.