12-05-2026 Frontend dev
This commit is contained in:
parent
405df0a122
commit
5b8bdf4182
779 changed files with 480564 additions and 6241 deletions
27
database/seeders/AdminPresetSeeder.php
Normal file
27
database/seeders/AdminPresetSeeder.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\AdminPreset;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class AdminPresetSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
AdminPreset::query()->updateOrCreate(
|
||||
['key' => AdminPreset::PRESS_RELEASE_DELETED_PUBLISHED_TEXT],
|
||||
[
|
||||
'area' => 'press_releases',
|
||||
'type' => 'text',
|
||||
'label' => 'Ersatztext fuer geloeschte veroeffentlichte Pressemitteilungen',
|
||||
'value' => "Diese Pressemitteilung wurde entfernt.\n\nDer Inhalt ist nicht mehr verfuegbar. Bitte wenden Sie sich bei Rueckfragen an den Betreiber des Presseportals.",
|
||||
'payload' => null,
|
||||
'is_active' => true,
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
100
database/seeders/CategorySeeder.php
Normal file
100
database/seeders/CategorySeeder.php
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\Portal;
|
||||
use App\Models\Category;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class CategorySeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$categories = [
|
||||
[
|
||||
'key' => 'news-wirtschaft',
|
||||
'portal' => Portal::Both,
|
||||
'translations' => [
|
||||
'de' => [
|
||||
'name' => 'Wirtschaft',
|
||||
'slug' => 'wirtschaft',
|
||||
'description' => 'Pressemitteilungen aus Wirtschaft und Unternehmen.',
|
||||
],
|
||||
'en' => [
|
||||
'name' => 'Business',
|
||||
'slug' => 'business',
|
||||
'description' => 'Press releases from business and companies.',
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'key' => 'news-technologie',
|
||||
'portal' => Portal::Both,
|
||||
'translations' => [
|
||||
'de' => [
|
||||
'name' => 'Technologie',
|
||||
'slug' => 'technologie',
|
||||
'description' => 'News rund um Innovation, IT und digitale Themen.',
|
||||
],
|
||||
'en' => [
|
||||
'name' => 'Technology',
|
||||
'slug' => 'technology',
|
||||
'description' => 'News around innovation, IT, and digital topics.',
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'key' => 'news-finanzen',
|
||||
'portal' => Portal::Both,
|
||||
'translations' => [
|
||||
'de' => [
|
||||
'name' => 'Finanzen',
|
||||
'slug' => 'finanzen',
|
||||
'description' => 'Pressemitteilungen zu Banken, Boerse und Finanzthemen.',
|
||||
],
|
||||
'en' => [
|
||||
'name' => 'Finance',
|
||||
'slug' => 'finance',
|
||||
'description' => 'Press releases about banks, stock markets, and finance topics.',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($categories as $categoryData) {
|
||||
$deSlug = $categoryData['translations']['de']['slug'];
|
||||
|
||||
$category = Category::query()
|
||||
->whereHas('translations', function ($query) use ($deSlug) {
|
||||
$query->where('locale', 'de')->where('slug', $deSlug);
|
||||
})
|
||||
->first();
|
||||
|
||||
if (! $category) {
|
||||
$category = Category::query()->create([
|
||||
'portal' => $categoryData['portal']->value,
|
||||
'is_active' => true,
|
||||
]);
|
||||
} else {
|
||||
$category->update([
|
||||
'portal' => $categoryData['portal']->value,
|
||||
'is_active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($categoryData['translations'] as $locale => $translation) {
|
||||
$category->translations()->updateOrCreate(
|
||||
['locale' => $locale],
|
||||
[
|
||||
'name' => $translation['name'],
|
||||
'slug' => $translation['slug'],
|
||||
'description' => $translation['description'],
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,22 +2,51 @@
|
|||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\Portal;
|
||||
use App\Enums\RegistrationType;
|
||||
use App\Models\User;
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use App\Services\Auth\UserRolePermissionSyncService;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
public function run(UserRolePermissionSyncService $rolePermissionSync): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
|
||||
User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
'email' => 'test@example.com',
|
||||
$this->call([
|
||||
RolesAndPermissionsSeeder::class,
|
||||
AdminPresetSeeder::class,
|
||||
PaymentOptionSeeder::class,
|
||||
CategorySeeder::class,
|
||||
]);
|
||||
|
||||
$adminUser = User::firstOrCreate([
|
||||
'email' => 'admin@presseportale.test',
|
||||
], [
|
||||
'name' => 'Portal Admin',
|
||||
'password' => Hash::make('password'),
|
||||
'portal' => Portal::Both->value,
|
||||
'registration_type' => RegistrationType::ExistingLegacy->value,
|
||||
'language' => 'de',
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$rolePermissionSync->assignRoleAndSyncPermissions($adminUser, 'admin');
|
||||
|
||||
$testUser = User::firstOrCreate([
|
||||
'email' => 'test@example.com',
|
||||
], [
|
||||
'name' => 'Test User',
|
||||
'password' => Hash::make('password'),
|
||||
'portal' => Portal::Both->value,
|
||||
'registration_type' => RegistrationType::ExistingLegacy->value,
|
||||
'language' => 'de',
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$rolePermissionSync->assignRoleAndSyncPermissions($testUser, 'customer');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
78
database/seeders/PaymentOptionSeeder.php
Normal file
78
database/seeders/PaymentOptionSeeder.php
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\PaymentOptionType;
|
||||
use App\Models\PaymentOption;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class PaymentOptionSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$options = [
|
||||
[
|
||||
'article_number' => 'PR-MONTHLY-001',
|
||||
'type' => PaymentOptionType::Recurring->value,
|
||||
'price_cents' => 4900,
|
||||
'currency' => 'EUR',
|
||||
'interval' => 'monthly',
|
||||
'is_hidden' => false,
|
||||
'stripe_product_id' => 'prod_placeholder_monthly',
|
||||
'stripe_price_id' => 'price_placeholder_monthly',
|
||||
'translations' => [
|
||||
'de' => ['name' => 'Monatspaket', 'description' => 'Monatliche Veroeffentlichungen'],
|
||||
'en' => ['name' => 'Monthly package', 'description' => 'Monthly publication package'],
|
||||
],
|
||||
],
|
||||
[
|
||||
'article_number' => 'PR-YEARLY-001',
|
||||
'type' => PaymentOptionType::Recurring->value,
|
||||
'price_cents' => 49900,
|
||||
'currency' => 'EUR',
|
||||
'interval' => 'yearly',
|
||||
'is_hidden' => false,
|
||||
'stripe_product_id' => 'prod_placeholder_yearly',
|
||||
'stripe_price_id' => 'price_placeholder_yearly',
|
||||
'translations' => [
|
||||
'de' => ['name' => 'Jahrespaket', 'description' => 'Jaehrliche Veroeffentlichungen'],
|
||||
'en' => ['name' => 'Yearly package', 'description' => 'Yearly publication package'],
|
||||
],
|
||||
],
|
||||
[
|
||||
'article_number' => 'PR-BOOST-ONCE-001',
|
||||
'type' => PaymentOptionType::Onetime->value,
|
||||
'price_cents' => 9900,
|
||||
'currency' => 'EUR',
|
||||
'interval' => 'once',
|
||||
'is_hidden' => false,
|
||||
'stripe_product_id' => 'prod_placeholder_onetime',
|
||||
'stripe_price_id' => 'price_placeholder_onetime',
|
||||
'translations' => [
|
||||
'de' => ['name' => 'Reichweiten-Boost', 'description' => 'Einmaliger Promotion-Boost'],
|
||||
'en' => ['name' => 'Reach boost', 'description' => 'One-time promotion boost'],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($options as $optionData) {
|
||||
$translations = $optionData['translations'];
|
||||
unset($optionData['translations']);
|
||||
|
||||
$option = PaymentOption::updateOrCreate(
|
||||
['article_number' => $optionData['article_number']],
|
||||
$optionData
|
||||
);
|
||||
|
||||
foreach ($translations as $locale => $translation) {
|
||||
$option->translations()->updateOrCreate(
|
||||
['locale' => $locale],
|
||||
$translation
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,9 @@
|
|||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RolesAndPermissionsSeeder extends Seeder
|
||||
{
|
||||
|
|
@ -15,65 +13,54 @@ class RolesAndPermissionsSeeder extends Seeder
|
|||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// Rollen
|
||||
Role::create(['name' => 'superadmin']);
|
||||
Role::create(['name' => 'admin']);
|
||||
Role::create(['name' => 'trader']);
|
||||
Role::create(['name' => 'customer']);
|
||||
$roles = [
|
||||
'admin',
|
||||
'editor',
|
||||
'customer',
|
||||
'api-only',
|
||||
];
|
||||
|
||||
// Beispiel-Permissions
|
||||
//Trader
|
||||
Permission::create(['name' => 'products_manage']);
|
||||
foreach ($roles as $role) {
|
||||
Role::firstOrCreate(['name' => $role]);
|
||||
}
|
||||
|
||||
//Customer
|
||||
Permission::create(['name' => 'orders_view']);
|
||||
$permissions = [
|
||||
'press-releases:read',
|
||||
'press-releases:write',
|
||||
'press-releases:publish',
|
||||
'press-release-images:write',
|
||||
'companies:read',
|
||||
'newsletter:subscribe',
|
||||
'users:manage',
|
||||
'roles:manage',
|
||||
];
|
||||
|
||||
foreach ($permissions as $permission) {
|
||||
Permission::firstOrCreate(['name' => $permission]);
|
||||
}
|
||||
|
||||
//Admin
|
||||
//CMS
|
||||
Permission::create(['name' => 'cms_manage']);
|
||||
Permission::create(['name' => 'cms_view']);
|
||||
Permission::create(['name' => 'cms_create']);
|
||||
Permission::create(['name' => 'cms_delete']);
|
||||
Permission::create(['name' => 'cms_list']);
|
||||
|
||||
//User
|
||||
Permission::create(['name' => 'user_edit']);
|
||||
Permission::create(['name' => 'user_view']);
|
||||
Permission::create(['name' => 'user_create']);
|
||||
Permission::create(['name' => 'user_delete']);
|
||||
Permission::create(['name' => 'user_list']);
|
||||
|
||||
|
||||
|
||||
//Superadmin
|
||||
//alles
|
||||
/*Permission::create(['name' => 'products_manage']);
|
||||
Permission::create(['name' => 'orders_view']);
|
||||
Permission::create(['name' => 'user_settings']);
|
||||
Permission::create(['name' => 'system_settings']);
|
||||
Permission::create(['name' => 'user_manage']);
|
||||
Permission::create(['name' => 'order_manage']);
|
||||
Permission::create(['name' => 'product_manage']);
|
||||
Permission::create(['name' => 'user_view']);
|
||||
Permission::create(['name' => 'order_view']);
|
||||
Permission::create(['name' => 'product_view']);
|
||||
Permission::create(['name' => 'system_view']);
|
||||
Permission::create(['name' => 'user_create']);
|
||||
Permission::create(['name' => 'order_create']);
|
||||
Permission::create(['name' => 'product_create']);
|
||||
Permission::create(['name' => 'system_create']);
|
||||
Permission::create(['name' => 'order_edit']);
|
||||
Permission::create(['name' => 'product_edit']);
|
||||
Permission::create(['name' => 'system_edit']);
|
||||
Permission::create(['name' => 'user_delete']);
|
||||
Permission::create(['name' => 'order_delete']);
|
||||
Permission::create(['name' => 'product_delete']);
|
||||
Permission::create(['name' => 'system_delete']);
|
||||
Permission::create(['name' => 'user_list']);
|
||||
Permission::create(['name' => 'order_list']);
|
||||
Permission::create(['name' => 'product_list']);
|
||||
Permission::create(['name' => 'system_list']);*/
|
||||
|
||||
Role::findByName('admin')->syncPermissions($permissions);
|
||||
Role::findByName('editor')->syncPermissions([
|
||||
'press-releases:read',
|
||||
'press-releases:write',
|
||||
'press-releases:publish',
|
||||
'press-release-images:write',
|
||||
'companies:read',
|
||||
'newsletter:subscribe',
|
||||
]);
|
||||
Role::findByName('customer')->syncPermissions([
|
||||
'press-releases:read',
|
||||
'press-releases:write',
|
||||
'press-release-images:write',
|
||||
'companies:read',
|
||||
'newsletter:subscribe',
|
||||
]);
|
||||
Role::findByName('api-only')->syncPermissions([
|
||||
'press-releases:read',
|
||||
'press-releases:write',
|
||||
'press-release-images:write',
|
||||
'companies:read',
|
||||
'newsletter:subscribe',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue