147 lines
5.2 KiB
PHP
147 lines
5.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Policies\SiteSettingPolicy;
|
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
|
use Illuminate\Database\Eloquent\Attributes\UsePolicy;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
/**
|
|
* @property array<string, string|null> $social_links
|
|
* @property list<array{title?: string, body?: string}>|null $method_steps
|
|
* @property list<string>|null $principles
|
|
* @property bool $analytics_enabled
|
|
* @property string|null $default_og_image_path
|
|
* @property string|null $default_og_image_alt
|
|
* @property string|null $about_image_path
|
|
* @property string|null $about_image_alt
|
|
* @property string|null $hero_image_path
|
|
* @property string|null $hero_image_alt
|
|
* @property string|null $services_hero_image_path
|
|
* @property string|null $services_hero_image_alt
|
|
* @property string|null $portfolio_hero_image_path
|
|
* @property string|null $portfolio_hero_image_alt
|
|
* @property string|null $logo_path
|
|
* @property string|null $logo_alt
|
|
*/
|
|
#[Fillable([
|
|
'brand_name',
|
|
'logo_path',
|
|
'logo_alt',
|
|
'hero_eyebrow',
|
|
'hero_title',
|
|
'hero_subtitle',
|
|
'hero_cta_label',
|
|
'hero_secondary_cta_label',
|
|
'hero_note',
|
|
'hero_image_path',
|
|
'hero_image_alt',
|
|
'services_hero_image_path',
|
|
'services_hero_image_alt',
|
|
'portfolio_hero_image_path',
|
|
'portfolio_hero_image_alt',
|
|
'about_summary',
|
|
'about_image_path',
|
|
'about_image_alt',
|
|
'manifesto_title',
|
|
'manifesto_lead',
|
|
'manifesto_body',
|
|
'method_intro',
|
|
'method_steps',
|
|
'principles',
|
|
'email',
|
|
'phone',
|
|
'city',
|
|
'social_links',
|
|
'default_meta_title',
|
|
'default_meta_description',
|
|
'default_og_image_path',
|
|
'default_og_image_alt',
|
|
'analytics_enabled',
|
|
'analytics_script',
|
|
])]
|
|
#[UsePolicy(SiteSettingPolicy::class)]
|
|
class SiteSetting extends Model
|
|
{
|
|
public static function instance(): self
|
|
{
|
|
return static::query()->firstOrCreate([], [
|
|
'brand_name' => 'Amare Assessoria',
|
|
'hero_eyebrow' => 'Assessoria e produção de eventos · São Paulo',
|
|
'hero_title' => 'Celebrações com propósito',
|
|
'hero_subtitle' => 'Planejamento completo para casamentos e eventos corporativos.',
|
|
'hero_cta_label' => 'Solicitar proposta',
|
|
'hero_secondary_cta_label' => 'Conheça nosso olhar',
|
|
'hero_note' => 'Planejamento cuidadoso, comunicação clara e execução segura — do primeiro encontro ao último detalhe.',
|
|
'about_summary' => 'Assessoria boutique em São Paulo - SP.',
|
|
'manifesto_title' => 'Sofisticação que também se traduz em organização.',
|
|
'manifesto_lead' => 'Um evento memorável não nasce apenas de uma boa estética. Ele depende de decisões bem conduzidas, fornecedores alinhados e atenção constante ao que realmente importa.',
|
|
'manifesto_body' => 'A Amare combina sensibilidade e precisão para criar encontros coerentes com cada cliente, marca e ocasião — sem fórmulas prontas, excessos ou ruído.',
|
|
'method_intro' => 'Clareza em cada etapa. Tranquilidade durante todo o processo.',
|
|
'method_steps' => self::defaultMethodSteps(),
|
|
'principles' => self::defaultPrinciples(),
|
|
'email' => 'amareassessoriaeventos@gmail.com',
|
|
'phone' => '(11) 99999-9999',
|
|
'city' => 'São Paulo - SP',
|
|
'social_links' => [],
|
|
'default_meta_title' => 'Amare Assessoria de Eventos',
|
|
'default_meta_description' => 'Assessoria premium para casamentos e eventos corporativos em São Paulo.',
|
|
'analytics_enabled' => false,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @return list<array{title: string, body: string}>
|
|
*/
|
|
public static function defaultMethodSteps(): array
|
|
{
|
|
return [
|
|
[
|
|
'title' => 'Escuta',
|
|
'body' => 'Entendimento do contexto, das prioridades, do público e do que o evento precisa comunicar.',
|
|
],
|
|
[
|
|
'title' => 'Direção',
|
|
'body' => 'Definição de escopo, próximos passos, responsabilidades e critérios para orientar decisões.',
|
|
],
|
|
[
|
|
'title' => 'Produção',
|
|
'body' => 'Coordenação de cronograma, fornecedores, detalhes, alinhamentos e contingências.',
|
|
],
|
|
[
|
|
'title' => 'Execução',
|
|
'body' => 'Presença atenta no evento para que o planejado aconteça com ritmo, cuidado e segurança.',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function defaultPrinciples(): array
|
|
{
|
|
return [
|
|
'Personalização sem complicação desnecessária',
|
|
'Comunicação clara e decisões bem orientadas',
|
|
'Atenção à experiência de clientes e convidados',
|
|
'Execução responsável do início ao fim',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string|class-string>
|
|
*/
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'social_links' => 'array',
|
|
'method_steps' => 'array',
|
|
'principles' => 'array',
|
|
'analytics_enabled' => 'boolean',
|
|
];
|
|
}
|
|
}
|