add modules seeeders to base apps

This commit is contained in:
2024-11-05 18:40:23 +05:00
parent 158569663a
commit db69904f38
19 changed files with 69 additions and 76 deletions

View File

@@ -3,17 +3,13 @@
namespace App\Filament\Resources; namespace App\Filament\Resources;
use App\Filament\Resources\BankResource\Pages; use App\Filament\Resources\BankResource\Pages;
use App\Filament\Resources\BankResource\RelationManagers;
use App\Modules\Bank\Models\Bank; use App\Modules\Bank\Models\Bank;
use Filament\Forms;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Tables; use Filament\Tables;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
class BankResource extends Resource class BankResource extends Resource
@@ -21,6 +17,7 @@ class BankResource extends Resource
protected static ?string $model = Bank::class; protected static ?string $model = Bank::class;
protected static ?string $navigationGroup = 'Settings'; protected static ?string $navigationGroup = 'Settings';
protected static ?string $navigationIcon = 'heroicon-o-building-library'; protected static ?string $navigationIcon = 'heroicon-o-building-library';
public static function form(Form $form): Form public static function form(Form $form): Form
@@ -57,7 +54,7 @@ class BankResource extends Resource
->dateTime() ->dateTime()
->sortable() ->sortable()
->sinceTooltip() ->sinceTooltip()
->formatStateUsing(fn (?Carbon $state) => $state?->format('H:i, d.m.Y')) ->formatStateUsing(fn (?Carbon $state) => $state?->format('H:i, d.m.Y')),
]) ])
->filters([ ->filters([
// //

View File

@@ -3,7 +3,6 @@
namespace App\Filament\Resources\BankResource\Pages; namespace App\Filament\Resources\BankResource\Pages;
use App\Filament\Resources\BankResource; use App\Filament\Resources\BankResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord;
class CreateBank extends CreateRecord class CreateBank extends CreateRecord

View File

@@ -3,23 +3,20 @@
namespace App\Filament\Resources\Codes; namespace App\Filament\Resources\Codes;
use App\Filament\Resources\Codes\PaymentPurposeCodeResource\Pages; use App\Filament\Resources\Codes\PaymentPurposeCodeResource\Pages;
use App\Filament\Resources\Codes\PaymentPurposeCodeResource\RelationManagers;
use App\Modules\PaymentPurposeCode\Models\PaymentPurposeCode; use App\Modules\PaymentPurposeCode\Models\PaymentPurposeCode;
use Filament\Forms;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Tables; use Filament\Tables;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class PaymentPurposeCodeResource extends Resource class PaymentPurposeCodeResource extends Resource
{ {
protected static ?string $model = PaymentPurposeCode::class; protected static ?string $model = PaymentPurposeCode::class;
protected static ?string $navigationIcon = 'heroicon-o-cube'; protected static ?string $navigationIcon = 'heroicon-o-cube';
protected static ?string $navigationGroup = 'Settings'; protected static ?string $navigationGroup = 'Settings';
public static function form(Form $form): Form public static function form(Form $form): Form

View File

@@ -3,7 +3,6 @@
namespace App\Filament\Resources\Codes\PaymentPurposeCodeResource\Pages; namespace App\Filament\Resources\Codes\PaymentPurposeCodeResource\Pages;
use App\Filament\Resources\Codes\PaymentPurposeCodeResource; use App\Filament\Resources\Codes\PaymentPurposeCodeResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord;
class CreatePaymentPurposeCode extends CreateRecord class CreatePaymentPurposeCode extends CreateRecord

View File

@@ -1,6 +1,8 @@
<?php <?php
use App\Modules\BaseModule;
use App\Modules\EmptyModule; use App\Modules\EmptyModule;
use App\Modules\Module;
use App\Modules\ModuleContract; use App\Modules\ModuleContract;
use App\Modules\TurkmenNumberFormatter\Repositories\TurkmenNumberFormatter; use App\Modules\TurkmenNumberFormatter\Repositories\TurkmenNumberFormatter;
use Illuminate\Contracts\Cache\Repository as CacheRepository; use Illuminate\Contracts\Cache\Repository as CacheRepository;
@@ -56,12 +58,12 @@ function modules_path(string $path = ''): string
/** /**
* Modules * Modules
* *
* @return Collection<array-key, string> * @return Collection<array-key, BaseModule>
*/ */
function modules(bool $withDisabled = false): Collection function modules(bool $withDisabled = false): Collection
{ {
if (temp_cache()->has('modules')) { if (temp_cache()->has('modules')) {
/** @var Collection<array-key, string> $modules */ /** @var Collection<array-key, BaseModule> $modules */
$modules = temp_cache('modules'); $modules = temp_cache('modules');
return $modules; return $modules;
@@ -74,21 +76,21 @@ function modules(bool $withDisabled = false): Collection
foreach ($modulesDir as $modulePath) { foreach ($modulesDir as $modulePath) {
$moduleName = Str::afterLast($modulePath, '/'); $moduleName = Str::afterLast($modulePath, '/');
$moduleOptions = [ $module = new BaseModule(
'path' => $modulePath, path: $modulePath,
'name' => $moduleName.'Module', name: $moduleName,
'enabled' => module($moduleName)->isEnabled(), enabled: module($moduleName)->isEnabled()
]; );
// Include all // Include all
if ($withDisabled) { if ($withDisabled) {
$modules->push($moduleOptions); $modules->push($module);
continue; continue;
} }
if ($moduleOptions['enabled']) { if ($module->enabled) {
$modules->push($moduleOptions); $modules->push($module);
} }
} }

BIN
app/Modules/.DS_Store vendored

Binary file not shown.

View File

@@ -27,7 +27,7 @@ class BankModule implements ModuleContract
*/ */
public function disable(): void public function disable(): void
{ {
$this->enabled = false; $this->enabled = false;
} }
/** /**
@@ -35,7 +35,7 @@ class BankModule implements ModuleContract
*/ */
public function enable(): void public function enable(): void
{ {
$this->enabled = true; $this->enabled = true;
} }
/** /**

View File

@@ -3,7 +3,6 @@
namespace App\Modules\Bank\Database\Seeders; namespace App\Modules\Bank\Database\Seeders;
use App\Modules\Bank\Models\Bank; use App\Modules\Bank\Models\Bank;
use Exception;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
@@ -17,14 +16,7 @@ class BankTableSeeder extends Seeder
$data = collect(File::json(__DIR__.'/../../Resources/Data/data.json')); $data = collect(File::json(__DIR__.'/../../Resources/Data/data.json'));
$data->each(function ($item) { $data->each(function ($item) {
try { Bank::create(['bab' => $item['key'], 'name' => $item['value']]);
Bank::create(['bab' => $item['key'], 'name' => $item['value']]);
} catch (Exception $e) {
info([
'm' => $e->getMessage(),
'item' => $item,
]);
}
}); });
} }
} }

View File

@@ -2,7 +2,6 @@
namespace App\Modules\Bank\Models; namespace App\Modules\Bank\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
@@ -10,7 +9,4 @@ use Illuminate\Database\Eloquent\Model;
* @property string $bab * @property string $bab
* @property ?string $hb * @property ?string $hb
*/ */
class Bank extends Model class Bank extends Model {}
{
}

View File

@@ -2,9 +2,4 @@
namespace App\Modules\Bank\Repositories; namespace App\Modules\Bank\Repositories;
use App\Modules\Bank\Models\Bank; class BankRepository {}
class BankRepository
{
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Modules;
class BaseModule
{
public function __construct(
public string $path,
public string $name,
public bool $enabled,
) {}
}

View File

@@ -2,7 +2,6 @@
namespace App\Modules\PaymentPurposeCode\Models; namespace App\Modules\PaymentPurposeCode\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
@@ -12,7 +11,4 @@ use Illuminate\Database\Eloquent\Model;
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at
* @property Carbon\Carbon $updated_at * @property Carbon\Carbon $updated_at
*/ */
class PaymentPurposeCode extends Model class PaymentPurposeCode extends Model {}
{
}

View File

@@ -27,7 +27,7 @@ class PaymentPurposeCodeModule implements ModuleContract
*/ */
public function disable(): void public function disable(): void
{ {
$this->enabled = false; $this->enabled = false;
} }
/** /**
@@ -35,7 +35,7 @@ class PaymentPurposeCodeModule implements ModuleContract
*/ */
public function enable(): void public function enable(): void
{ {
$this->enabled = true; $this->enabled = true;
} }
/** /**

View File

@@ -2,9 +2,4 @@
namespace App\Modules\PaymentPurposeCode\Repositories; namespace App\Modules\PaymentPurposeCode\Repositories;
use App\Modules\PaymentPurposeCode\Models\PaymentPurposeCode; class PaymentPurposeCodeRepository {}
class PaymentPurposeCodeRepository
{
}

View File

@@ -2,10 +2,6 @@
namespace App\Modules\UserCompany\Models; namespace App\Modules\UserCompany\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class UserCompany extends Model class UserCompany extends Model {}
{
}

View File

@@ -2,9 +2,4 @@
namespace App\Modules\UserCompany\Repositories; namespace App\Modules\UserCompany\Repositories;
use App\Modules\UserCompany\Models\UserCompany; class UserCompanyRepository {}
class UserCompanyRepository
{
}

View File

@@ -27,7 +27,7 @@ class UserCompanyModule implements ModuleContract
*/ */
public function disable(): void public function disable(): void
{ {
$this->enabled = false; $this->enabled = false;
} }
/** /**
@@ -35,7 +35,7 @@ class UserCompanyModule implements ModuleContract
*/ */
public function enable(): void public function enable(): void
{ {
$this->enabled = true; $this->enabled = true;
} }
/** /**

View File

@@ -2,6 +2,7 @@
namespace App\Providers; namespace App\Providers;
use App\Modules\BaseModule;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
@@ -34,8 +35,10 @@ class AppServiceProvider extends ServiceProvider
public function registerModules(): void public function registerModules(): void
{ {
$migrationDirectories = []; $migrationDirectories = [];
modules()->each(function ($module) use (&$migrationDirectories) { modules()->each(function (BaseModule $module) use (&$migrationDirectories) {
is_dir($module['path'].'/Database/Migrations') ? array_push($migrationDirectories, $module['path'].'/Database/Migrations') : ''; // @phpstan-ignore-line is_dir($module->path.'/Database/Migrations')
? array_push($migrationDirectories, $module->path.'/Database/Migrations')
: '';
}); });
$this->loadMigrationsFrom($migrationDirectories); $this->loadMigrationsFrom($migrationDirectories);

View File

@@ -3,9 +3,10 @@
namespace Database\Seeders; namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents; // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use App\Modules\Bank\Database\Seeders\BankTableSeeder;
use App\Modules\PaymentPurposeCode\Database\Seeders\PaymentPurposeCodeSeeder; use App\Modules\BaseModule;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
{ {
@@ -14,8 +15,26 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
$this->call([ $seeders = [];
BankTableSeeder::class,
]); modules()->each(function (BaseModule $module) use (&$seeders) {
$seedersPath = $module->path.'/Database/Seeders';
if (is_dir($seedersPath)) {
$files = File::files($seedersPath);
foreach ($files as $file) {
$file->getFilenameWithoutExtension();
$moduleClass = 'App\\Modules\\'.$module->name.'\\Database\\Seeders\\'.$file->getFilenameWithoutExtension();
if (class_exists($moduleClass)) {
$seeders[] = $moduleClass;
}
}
}
});
$this->call($seeders);
} }
} }