mirror of
https://github.com/nihonbuzz/nihonbuzz-academy.git
synced 2026-01-26 13:32:07 +07:00
first commit
This commit is contained in:
26
database/seeders/AdminUserSeeder.php
Normal file
26
database/seeders/AdminUserSeeder.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class AdminUserSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$user = \App\Models\User::firstOrCreate(
|
||||
['email' => 'admin@nihonbuzz.academy'],
|
||||
[
|
||||
'name' => 'Super Admin',
|
||||
'password' => bcrypt('password'),
|
||||
'email_verified_at' => now(),
|
||||
]
|
||||
);
|
||||
|
||||
$user->assignRole('super_admin');
|
||||
}
|
||||
}
|
||||
32
database/seeders/DatabaseSeeder.php
Normal file
32
database/seeders/DatabaseSeeder.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$this->call([
|
||||
RoleSeeder::class,
|
||||
PermissionSeeder::class,
|
||||
LevelSeeder::class,
|
||||
AdminUserSeeder::class,
|
||||
VocabularySeeder::class,
|
||||
TestDataSeeder::class,
|
||||
]);
|
||||
|
||||
// User::factory(10)->create();
|
||||
|
||||
// User::factory()->create([
|
||||
// 'name' => 'Test User',
|
||||
// 'email' => 'test@example.com',
|
||||
// ]);
|
||||
}
|
||||
}
|
||||
17
database/seeders/EnrollmentSeeder.php
Normal file
17
database/seeders/EnrollmentSeeder.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class EnrollmentSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
28
database/seeders/LevelSeeder.php
Normal file
28
database/seeders/LevelSeeder.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class LevelSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$levels = [
|
||||
['code' => 'BASIC', 'name' => 'Bahasa Jepang Dasar', 'order_index' => 0, 'description' => 'Level pengenalan hiragana, katakana, dan ungkapan dasar.'],
|
||||
['code' => 'N5', 'name' => 'Beginner', 'order_index' => 1, 'description' => 'The ability to understand some basic Japanese.'],
|
||||
['code' => 'N4', 'name' => 'Elementary', 'order_index' => 2, 'description' => 'The ability to understand basic Japanese.'],
|
||||
['code' => 'N3', 'name' => 'Intermediate', 'order_index' => 3, 'description' => 'The ability to understand Japanese used in everyday situations to a certain degree.'],
|
||||
['code' => 'N2', 'name' => 'Pre-Advanced', 'order_index' => 4, 'description' => 'The ability to understand Japanese used in everyday situations, and in a variety of circumstances to a certain degree.'],
|
||||
['code' => 'N1', 'name' => 'Advanced', 'order_index' => 5, 'description' => 'The ability to understand Japanese used in a variety of circumstances.'],
|
||||
];
|
||||
|
||||
foreach ($levels as $level) {
|
||||
\App\Models\Level::firstOrCreate(['code' => $level['code']], $level);
|
||||
}
|
||||
}
|
||||
}
|
||||
66
database/seeders/PermissionSeeder.php
Normal file
66
database/seeders/PermissionSeeder.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class PermissionSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// Reset cached roles and permissions
|
||||
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
|
||||
|
||||
// Define Permissions
|
||||
$permissions = [
|
||||
'manage courses',
|
||||
'manage modules',
|
||||
'manage lessons',
|
||||
'manage vocabularies',
|
||||
'manage students',
|
||||
'view dashboard',
|
||||
'practice srs',
|
||||
];
|
||||
|
||||
foreach ($permissions as $permissionName) {
|
||||
$permission = \App\Models\Permission::where('name', $permissionName)->where('guard_name', 'web')->first();
|
||||
if (!$permission) {
|
||||
\App\Models\Permission::create([
|
||||
'name' => $permissionName,
|
||||
'guard_name' => 'web',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$assign = function($roleName, $perms) {
|
||||
$role = \App\Models\Role::where('name', $roleName)->where('guard_name', 'web')->first();
|
||||
if ($role) {
|
||||
$role->syncPermissions($perms);
|
||||
}
|
||||
};
|
||||
|
||||
$assign('super_admin', \App\Models\Permission::all());
|
||||
$assign('admin', [
|
||||
'manage courses',
|
||||
'manage modules',
|
||||
'manage lessons',
|
||||
'manage vocabularies',
|
||||
'manage students',
|
||||
'view dashboard',
|
||||
]);
|
||||
$assign('teacher', [
|
||||
'manage courses',
|
||||
'manage modules',
|
||||
'manage lessons',
|
||||
'view dashboard',
|
||||
]);
|
||||
$assign('student', [
|
||||
'view dashboard',
|
||||
'practice srs',
|
||||
]);
|
||||
}
|
||||
}
|
||||
47
database/seeders/RoleSeeder.php
Normal file
47
database/seeders/RoleSeeder.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\Role;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RoleSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// Reset cached roles and permissions
|
||||
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
|
||||
|
||||
$roles = [
|
||||
'super_admin',
|
||||
'admin',
|
||||
'editor',
|
||||
'treasurer',
|
||||
'teacher',
|
||||
'student',
|
||||
'class_leader',
|
||||
'alumni',
|
||||
];
|
||||
|
||||
$now = Carbon::now();
|
||||
|
||||
foreach ($roles as $roleName) {
|
||||
$role = Role::where('name', $roleName)->where('guard_name', 'web')->first();
|
||||
if (!$role) {
|
||||
Role::create([
|
||||
'name' => $roleName,
|
||||
'guard_name' => 'web',
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
113
database/seeders/TestDataSeeder.php
Normal file
113
database/seeders/TestDataSeeder.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Course;
|
||||
use App\Models\Enrollment;
|
||||
use App\Models\Level;
|
||||
use App\Models\Lesson;
|
||||
use App\Models\Module;
|
||||
use App\Models\User;
|
||||
use App\Models\UserProgress;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class TestDataSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$admin = User::where('email', 'admin@nihonbuzz.academy')->first();
|
||||
if (!$admin) return;
|
||||
|
||||
$n5 = Level::where('code', 'N5')->first();
|
||||
$basic = Level::where('code', 'BASIC')->first();
|
||||
$n4 = Level::where('code', 'N4')->first();
|
||||
|
||||
// 1. Course: Mastering JLPT N5
|
||||
$course1 = Course::updateOrCreate(
|
||||
['slug' => 'mastering-jlpt-n5'],
|
||||
[
|
||||
'title' => 'Mastering JLPT N5: Dasar Bahasa Jepang',
|
||||
'description' => 'Kursus lengkap untuk persiapan JLPT N5 dari nol.',
|
||||
'level_id' => $n5->id,
|
||||
'teacher_id' => $admin->id,
|
||||
'is_published' => true,
|
||||
'price' => 0,
|
||||
]
|
||||
);
|
||||
|
||||
$module1 = Module::updateOrCreate(
|
||||
['course_id' => $course1->id, 'title' => 'Introduction to N5'],
|
||||
['order_index' => 1]
|
||||
);
|
||||
|
||||
$lessons1 = [
|
||||
['title' => 'Selamat Datang di N5', 'slug' => 'welcome-n5', 'type' => 'video'],
|
||||
['title' => 'Struktur Menulis Jepang', 'slug' => 'writing-structure', 'type' => 'text'],
|
||||
['title' => 'Kata Ganti Orang', 'slug' => 'pronouns', 'type' => 'video'],
|
||||
];
|
||||
|
||||
foreach ($lessons1 as $index => $lessonData) {
|
||||
Lesson::updateOrCreate(
|
||||
['module_id' => $module1->id, 'slug' => $lessonData['slug']],
|
||||
['title' => $lessonData['title'], 'type' => $lessonData['type'], 'order_index' => $index + 1]
|
||||
);
|
||||
}
|
||||
|
||||
// 2. Course: Hiragana & Katakana
|
||||
$course2 = Course::updateOrCreate(
|
||||
['slug' => 'kana-mastery'],
|
||||
[
|
||||
'title' => 'Katakana & Hiragana Mastery',
|
||||
'description' => 'Kuasai cara baca dan tulis Hiragana & Katakana dalam 2 minggu.',
|
||||
'level_id' => $basic->id,
|
||||
'teacher_id' => $admin->id,
|
||||
'is_published' => true,
|
||||
'price' => 0,
|
||||
]
|
||||
);
|
||||
|
||||
$module2 = Module::updateOrCreate(
|
||||
['course_id' => $course2->id, 'title' => 'Hiragana Basics'],
|
||||
['order_index' => 1]
|
||||
);
|
||||
|
||||
$lessons2 = [
|
||||
['title' => 'Baris A-I-U-E-O', 'slug' => 'vowels-kana', 'type' => 'video'],
|
||||
['title' => 'Baris KA-KI-KU-KE-KO', 'slug' => 'ka-line', 'type' => 'video'],
|
||||
];
|
||||
|
||||
foreach ($lessons2 as $index => $lessonData) {
|
||||
Lesson::updateOrCreate(
|
||||
['module_id' => $module2->id, 'slug' => $lessonData['slug']],
|
||||
['title' => $lessonData['title'], 'type' => $lessonData['type'], 'order_index' => $index + 1]
|
||||
);
|
||||
}
|
||||
|
||||
// 3. Enroll Student
|
||||
Enrollment::updateOrCreate(
|
||||
['user_id' => $admin->id, 'course_id' => $course1->id],
|
||||
['enrolled_at' => now(), 'status' => 'active']
|
||||
);
|
||||
|
||||
Enrollment::updateOrCreate(
|
||||
['user_id' => $admin->id, 'course_id' => $course2->id],
|
||||
['enrolled_at' => now(), 'status' => 'active']
|
||||
);
|
||||
|
||||
// 4. Progress
|
||||
$lessonToComplete = Lesson::where('slug', 'welcome-n5')->first();
|
||||
if ($lessonToComplete) {
|
||||
UserProgress::updateOrCreate(
|
||||
['user_id' => $admin->id, 'lesson_id' => $lessonToComplete->id],
|
||||
['completed_at' => now()]
|
||||
);
|
||||
}
|
||||
|
||||
// 5. Update User Stats
|
||||
$admin->update([
|
||||
'xp_points' => 1250,
|
||||
'current_streak' => 5,
|
||||
]);
|
||||
}
|
||||
}
|
||||
17
database/seeders/UserProgressSeeder.php
Normal file
17
database/seeders/UserProgressSeeder.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class UserProgressSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
54
database/seeders/VocabularySeeder.php
Normal file
54
database/seeders/VocabularySeeder.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class VocabularySeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$n5 = \App\Models\Level::where('code', 'N5')->first();
|
||||
|
||||
$vocabularies = [
|
||||
[
|
||||
'word' => '私',
|
||||
'reading' => 'わたし',
|
||||
'meaning_en' => 'I, me',
|
||||
'level_id' => $n5?->id,
|
||||
],
|
||||
[
|
||||
'word' => '家',
|
||||
'reading' => 'いえ',
|
||||
'meaning_en' => 'House, home',
|
||||
'level_id' => $n5?->id,
|
||||
],
|
||||
[
|
||||
'word' => '食べる',
|
||||
'reading' => 'たべる',
|
||||
'meaning_en' => 'To eat',
|
||||
'level_id' => $n5?->id,
|
||||
],
|
||||
[
|
||||
'word' => '日本語',
|
||||
'reading' => 'にほんご',
|
||||
'meaning_en' => 'Japanese language',
|
||||
'level_id' => $n5?->id,
|
||||
],
|
||||
[
|
||||
'word' => '勉強',
|
||||
'reading' => 'べんきょう',
|
||||
'meaning_en' => 'Study',
|
||||
'level_id' => $n5?->id,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($vocabularies as $vocab) {
|
||||
\App\Models\Vocabulary::create($vocab);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user