File: /home/eslinced-103/brise-edu.or.kr/app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use App\Models\Central\Tenant;
use Illuminate\Contracts\Foundation\CachesConfiguration;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Laravel\Cashier\Cashier;
use Symfony\Component\Finder\Finder;
use Laravel\Passport\Passport;
use League\OAuth2\Server\CryptKey;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->overrideConfigs();
\Stancl\Tenancy\Listeners\UpdateSyncedResource::$shouldQueue = true;
if (config('amuz.admin_host') != null) $this->replaceNovaUrl();
$this->registerResources();
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Passport::loadKeysFrom(base_path('storage'));
app()->bind('League\OAuth2\Server\CryptKey', function () {
return new CryptKey(
storage_path('oauth-private.key'),
null,
false
);
});
$this->registerCommands();
Cashier::ignoreMigrations();
Cashier::useCustomerModel(Tenant::class);
}
private function replaceNovaUrl(): void
{
//도메인 기반의 노바주소를 호스트기반으로 변경해준다.
if (current(explode(".", request()->getHost())) === config('amuz.admin_host')) {
config(['nova.domain' => request()->httpHost()]);
} else {
config(['nova.domain' => config('amuz.admin_host') . '.' . request()->httpHost()]);
}
}
private function overrideConfigs(): void
{
$tenancyMigrationParams = config('tenancy.migration_parameters');
//패키지 내에있는 마이그레이션을 추가할 수 있도록
$packages = $this->getAmuzPackages();
foreach ($packages as $package) {
$tenancyMigrationParams['--path'][] = base_path(sprintf('AmuzPackages/%s/Database/migrations/tenant', $package));
}
config(['tenancy.migration_parameters' => $tenancyMigrationParams]);
//Nova Language
$locales = [];
foreach (config('amuz.languages') as $code => $language) {
$locales[$code] = $language['display'];
}
config([
'nova-language-switch' => $locales
]);
foreach ($packages as $package) {
$packagePath = base_path(sprintf('AmuzPackages/%s/config', $package));
if (!is_dir($packagePath)) {
mkdir($packagePath);
}
$configs = File::files($packagePath);
foreach ($configs as $config) {
if ($config->getExtension() == "php") {
$this->mergeConfigFrom($config->getRealPath(), $config->getFilenameWithoutExtension());
}
}
}
}
protected function mergeConfigFrom($path, $key): void
{
if (! ($this->app instanceof CachesConfiguration && $this->app->configurationIsCached())) {
$config = $this->app->make('config');
$config->set($key, array_merge(
$config->get($key, []),
require $path
));
}
}
private function getAmuzPackages(): array
{
return Storage::disk('package')->directories();
}
protected function registerResources(): void
{
$path = base_path(config('amuz.package_path'));
$namespace = config('amuz.package_path');
if (!is_dir($path)) return;
foreach ((new Finder())->in($path)->directories() as $dir) {
$name = Str::studly($dir->getFilename());
$provider = "$namespace\\$name\\{$name}ServiceProvider";
if (class_exists($provider)) {
$this->app->register($provider);
}
}
}
protected function registerCommands(): void
{
$this->commands([
\App\Commands\CreateActionCommand::class,
\App\Commands\CreateCardCommand::class,
\App\Commands\CreateCustomFilterCommand::class,
\App\Commands\CreateDashboardCommand::class,
\App\Commands\CreateFilterCommand::class,
\App\Commands\CreateFieldCommand::class,
\App\Commands\CreateLensCommand::class,
\App\Commands\CreateMigrationCommand::class,
\App\Commands\CreateModelCommand::class,
\App\Commands\CreatePackageCommand::class,
\App\Commands\CreatePartitionCommand::class,
\App\Commands\CreatePolicyCommand::class,
\App\Commands\CreateProgressCommand::class,
\App\Commands\CreateResourceCommand::class,
\App\Commands\CreateResourceToolCommand::class,
\App\Commands\CreateServiceProviderCommand::class,
\App\Commands\CreateToolCommand::class,
\App\Commands\CreateTrendCommand::class,
\App\Commands\CreateValueCommand::class,
\App\Commands\SeedCommand::class,
\App\Commands\ResourceListCommand::class
]);
}
}