Ad Contract for settings
This commit is contained in:
parent
62fb792e65
commit
d2a000cb31
|
@ -2,9 +2,11 @@
|
|||
|
||||
namespace App\Invoice;
|
||||
|
||||
use App\Setting\Contracts\Indexable;
|
||||
use App\Setting\Contracts\Storeable;
|
||||
use App\Setting\LocalSettings;
|
||||
|
||||
class InvoiceSettings extends LocalSettings
|
||||
class InvoiceSettings extends LocalSettings implements Indexable, Storeable
|
||||
{
|
||||
public string $from_long;
|
||||
|
||||
|
@ -41,7 +43,7 @@ class InvoiceSettings extends LocalSettings
|
|||
return SettingIndexAction::class;
|
||||
}
|
||||
|
||||
public static function saveAction(): string
|
||||
public static function storeAction(): string
|
||||
{
|
||||
return SettingSaveAction::class;
|
||||
}
|
||||
|
|
|
@ -4,9 +4,11 @@ namespace App\Mailman;
|
|||
|
||||
use App\Mailman\Actions\SettingIndexAction;
|
||||
use App\Mailman\Actions\SettingSaveAction;
|
||||
use App\Setting\Contracts\Indexable;
|
||||
use App\Setting\Contracts\Storeable;
|
||||
use App\Setting\LocalSettings;
|
||||
|
||||
class MailmanSettings extends LocalSettings
|
||||
class MailmanSettings extends LocalSettings implements Storeable, Indexable
|
||||
{
|
||||
public ?string $base_url;
|
||||
|
||||
|
@ -39,7 +41,7 @@ class MailmanSettings extends LocalSettings
|
|||
return SettingIndexAction::class;
|
||||
}
|
||||
|
||||
public static function saveAction(): string
|
||||
public static function storeAction(): string
|
||||
{
|
||||
return SettingSaveAction::class;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Setting\Contracts;
|
||||
|
||||
interface Indexable
|
||||
{
|
||||
/**
|
||||
* @return class-string
|
||||
*/
|
||||
public static function indexAction(): string;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Setting\Contracts;
|
||||
|
||||
interface Storeable
|
||||
{
|
||||
/**
|
||||
* @return class-string
|
||||
*/
|
||||
public static function storeAction(): string;
|
||||
}
|
|
@ -14,16 +14,6 @@ class GeneralSettings extends Settings
|
|||
/** @var array<int, int> */
|
||||
public array $allowed_nami_accounts;
|
||||
|
||||
/**
|
||||
* @return array<int, string>
|
||||
*/
|
||||
public function moduleOptions(): array
|
||||
{
|
||||
return [
|
||||
'bill',
|
||||
];
|
||||
}
|
||||
|
||||
public static function group(): string
|
||||
{
|
||||
return 'general';
|
||||
|
|
|
@ -8,16 +8,6 @@ abstract class LocalSettings extends Settings
|
|||
{
|
||||
abstract public static function slug(): string;
|
||||
|
||||
/**
|
||||
* @return class-string
|
||||
*/
|
||||
abstract public static function indexAction(): string;
|
||||
|
||||
/**
|
||||
* @return class-string
|
||||
*/
|
||||
abstract public static function saveAction(): string;
|
||||
|
||||
abstract public static function title(): string;
|
||||
|
||||
public static function url(): string
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace App\Setting;
|
||||
|
||||
use App\Setting\Contracts\Indexable;
|
||||
use App\Setting\Contracts\Storeable;
|
||||
use Illuminate\Routing\Router;
|
||||
|
||||
class SettingFactory
|
||||
|
@ -12,14 +14,19 @@ class SettingFactory
|
|||
private array $settings = [];
|
||||
|
||||
/**
|
||||
* @param class-string<LocalSettings> $setting
|
||||
* @param class-string $setting
|
||||
*/
|
||||
public function register(string $setting): void
|
||||
{
|
||||
$this->settings[] = $setting;
|
||||
|
||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->get($setting::url(), $setting::indexAction());
|
||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->post($setting::url(), $setting::saveAction());
|
||||
if (new $setting() instanceof Indexable) {
|
||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->get($setting::url(), $setting::indexAction());
|
||||
}
|
||||
|
||||
if (new $setting() instanceof Storeable) {
|
||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->post($setting::url(), $setting::storeAction());
|
||||
}
|
||||
|
||||
if (1 === count($this->settings)) {
|
||||
app(Router::class)->redirect('/setting', '/setting/'.$setting::slug());
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Bill;
|
||||
namespace Tests\Feature\Invoice;
|
||||
|
||||
use App\Invoice\InvoiceSettings;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
Loading…
Reference in New Issue