diff --git a/app/Http/Controllers/QuestionController.php b/app/Http/Controllers/QuestionController.php
new file mode 100644
index 0000000..56f281c
--- /dev/null
+++ b/app/Http/Controllers/QuestionController.php
@@ -0,0 +1,91 @@
+validate([
+ "question" => "required|string",
+ "answer" => "required|string",
+ "points" => "required|integer|min:1",
+ "test_id" => "required|integer",
+ ]);
+
+ Question::create($validated);
+
+ return redirect(route("tests.edit", [
+ "test" => Test::where("id", $validated["test_id"])->first()
+ ]));
+ }
+
+ /**
+ * Display the specified resource.
+ */
+ public function show(Question $question)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ */
+ public function edit(Question $question)
+ {
+ return view("questions.edit", [
+ "question" => $question,
+ ]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(Request $request, Question $question)
+ {
+ $validated = $request->validate([
+ "question" => "required|string",
+ "answer" => "required|string",
+ "points" => "required|integer|min:1"
+ ]);
+
+ $question->update($validated);
+
+ return view("tests.edit", [
+ "test" => $validated["test_id"]
+ ]);
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy(Question $question)
+ {
+ $question->delete();
+
+ return redirect(route("tests.edit", $question->test_id));
+ }
+}
diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php
new file mode 100644
index 0000000..0bdfb42
--- /dev/null
+++ b/app/Http/Controllers/TestController.php
@@ -0,0 +1,83 @@
+ $request->user()->tests()->get()
+ ]);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ */
+ public function create()
+ {
+ //
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ */
+ public function store(Request $request)
+ {
+ $validated = $request->validate([
+ "name" => "required|string"
+ ]);
+
+ $request->user()->tests()->create($validated);
+
+ return redirect(route("tests.index"));
+ }
+
+ /**
+ * Display the specified resource.
+ */
+ public function show(Test $test)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ */
+ public function edit(Test $test)
+ {
+ return view("tests.edit", [
+ "test" => $test,
+ ]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(Request $request, Test $test)
+ {
+ $validated = $request->validate([
+ "name" => "required|string"
+ ]);
+
+ $test->update($validated);
+
+ return redirect(route("tests.index"));
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy(Test $test)
+ {
+ $test->delete();
+
+ return redirect(route("tests.index"));
+ }
+}
diff --git a/app/Models/Question.php b/app/Models/Question.php
new file mode 100644
index 0000000..4272b65
--- /dev/null
+++ b/app/Models/Question.php
@@ -0,0 +1,24 @@
+belongsTo(Test::class);
+ }
+}
diff --git a/app/Models/Test.php b/app/Models/Test.php
new file mode 100644
index 0000000..fcf6412
--- /dev/null
+++ b/app/Models/Test.php
@@ -0,0 +1,27 @@
+belongsTo(User::class);
+ }
+
+ public function questions(): HasMany
+ {
+ return $this->hasMany(Question::class);
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
index 20bbd33..d35a2be 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -49,4 +49,9 @@ class User extends Authenticatable
{
return $this->hasMany(Chirp::class);
}
+
+ public function tests(): HasMany
+ {
+ return $this->hasMany(Test::class);
+ }
}
diff --git a/config/database.php b/config/database.php
index 137ad18..be92f0e 100644
--- a/config/database.php
+++ b/config/database.php
@@ -108,44 +108,4 @@ return [
'migrations' => 'migrations',
- /*
- |--------------------------------------------------------------------------
- | Redis Databases
- |--------------------------------------------------------------------------
- |
- | Redis is an open source, fast, and advanced key-value store that also
- | provides a richer body of commands than a typical key-value system
- | such as APC or Memcached. Laravel makes it easy to dig right in.
- |
- */
-
- 'redis' => [
-
- 'client' => env('REDIS_CLIENT', 'phpredis'),
-
- 'options' => [
- 'cluster' => env('REDIS_CLUSTER', 'redis'),
- 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
- ],
-
- 'default' => [
- 'url' => env('REDIS_URL'),
- 'host' => env('REDIS_HOST', '127.0.0.1'),
- 'username' => env('REDIS_USERNAME'),
- 'password' => env('REDIS_PASSWORD'),
- 'port' => env('REDIS_PORT', '6379'),
- 'database' => env('REDIS_DB', '0'),
- ],
-
- 'cache' => [
- 'url' => env('REDIS_URL'),
- 'host' => env('REDIS_HOST', '127.0.0.1'),
- 'username' => env('REDIS_USERNAME'),
- 'password' => env('REDIS_PASSWORD'),
- 'port' => env('REDIS_PORT', '6379'),
- 'database' => env('REDIS_CACHE_DB', '1'),
- ],
-
- ],
-
];
diff --git a/database/migrations/2023_10_29_153809_create_tests_table.php b/database/migrations/2023_10_29_153809_create_tests_table.php
new file mode 100644
index 0000000..d280bbf
--- /dev/null
+++ b/database/migrations/2023_10_29_153809_create_tests_table.php
@@ -0,0 +1,29 @@
+id();
+ $table->foreignId("user_id")->references("id")->on("users")->constrained()->cascadeOnDelete();
+ $table->string("name");
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('tests');
+ }
+};
diff --git a/database/migrations/2023_10_29_172100_create_questions_table.php b/database/migrations/2023_10_29_172100_create_questions_table.php
new file mode 100644
index 0000000..6f98c70
--- /dev/null
+++ b/database/migrations/2023_10_29_172100_create_questions_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->foreignId("test_id")->references("id")->on("tests")->constrained()->cascadeOnDelete();
+ $table->string("question");
+ $table->string("answer");
+ $table->unsignedInteger("points")->default(1);
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('questions');
+ }
+};
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index a9f4519..9b3a803 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -3,7 +3,10 @@
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
+
+use App\Models\User;
use Illuminate\Database\Seeder;
+use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
@@ -12,11 +15,23 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
- // \App\Models\User::factory(10)->create();
-
- // \App\Models\User::factory()->create([
- // 'name' => 'Test User',
- // 'email' => 'test@example.com',
- // ]);
+ User::create([
+ 'name' => "admin",
+ 'email' => "admin@admin",
+ 'password' => Hash::make("admin"),
+ 'role' => "admin"
+ ]);
+ User::create([
+ 'name' => "Bob teacher",
+ 'email' => "bob@teacher",
+ 'password' => Hash::make("bob"),
+ 'role' => "teacher"
+ ]);
+ User::create([
+ 'name' => "Alice student",
+ 'email' => "alice@student",
+ 'password' => Hash::make("alice"),
+ 'role' => "student"
+ ]);
}
}
diff --git a/lang/lt.json b/lang/lt.json
index 8d2f144..1a05c1b 100644
--- a/lang/lt.json
+++ b/lang/lt.json
@@ -13,5 +13,7 @@
"Edit": "Atnaujinti",
"Delete": "Ištrinti",
"Save": "Saugoti",
- "Cancel": "Atšaukti"
+ "Cancel": "Atšaukti",
+ "Create test": "Sukurti testą",
+ "Tests": "Testai"
}
diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php
index 3a9dd81..21537f4 100644
--- a/resources/views/layouts/navigation.blade.php
+++ b/resources/views/layouts/navigation.blade.php
@@ -23,6 +23,11 @@
{{ __('Users') }}
@endif
+ @if (Auth::user()->role == "teacher")
+
+ {{ __('Tests') }}
+
+ @endif
@@ -86,6 +91,11 @@
{{ __('Users') }}
@endif
+ @if (Auth::user()->role == "teacher")
+
+ {{ __('Tests') }}
+
+ @endif
diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php
index e0e1d38..b27a21a 100644
--- a/resources/views/profile/edit.blade.php
+++ b/resources/views/profile/edit.blade.php
@@ -19,11 +19,11 @@
-
-
- @include('profile.partials.delete-user-form')
-
-
+ {{-- --}}
+ {{--
--}}
+ {{-- @include('profile.partials.delete-user-form') --}}
+ {{--
--}}
+ {{--
--}}
diff --git a/resources/views/questions/edit.blade.php b/resources/views/questions/edit.blade.php
new file mode 100644
index 0000000..5723c20
--- /dev/null
+++ b/resources/views/questions/edit.blade.php
@@ -0,0 +1,26 @@
+
+
+
diff --git a/resources/views/tests/edit.blade.php b/resources/views/tests/edit.blade.php
new file mode 100644
index 0000000..8945987
--- /dev/null
+++ b/resources/views/tests/edit.blade.php
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+ {{ __("Question") }} |
+ {{ __("Answer") }} |
+ {{ __("Points") }} |
+ |
+
+
+ @foreach ($test->questions()->get() as $question)
+
+ {{ $question->question }} |
+ {{ $question->answer }} |
+ {{ $question->points }} |
+
+
+
+
+
+
+
+ {{ __("Edit") }}
+
+
+
+
+ |
+
+ @endforeach
+
+
+
diff --git a/resources/views/tests/index.blade.php b/resources/views/tests/index.blade.php
new file mode 100644
index 0000000..a7a3881
--- /dev/null
+++ b/resources/views/tests/index.blade.php
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ {{ __("Name") }} |
+ |
+
+
+ @foreach ($tests as $test)
+
+ {{ $test->name }} |
+
+
+
+
+
+
+
+ {{ __("Edit") }}
+
+
+
+
+ |
+
+ @endforeach
+
+
+
diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php
index 03daec3..d587a3b 100644
--- a/resources/views/users/index.blade.php
+++ b/resources/views/users/index.blade.php
@@ -8,7 +8,6 @@
- {{-- --}}
{{ __("Name") }} |
@@ -50,6 +49,5 @@
@endforeach
- {{--
--}}
diff --git a/routes/web.php b/routes/web.php
index e4d007f..c32d51e 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -2,6 +2,8 @@
use App\Http\Controllers\ChirpController;
use App\Http\Controllers\ProfileController;
+use App\Http\Controllers\QuestionController;
+use App\Http\Controllers\TestController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
@@ -38,4 +40,12 @@ Route::resource("users", UserController::class)
->only(["index", "store", "edit", "update", "destroy"])
->middleware(["auth", "verified"]);
+Route::resource("tests", TestController::class)
+ ->only(["index", "store", "edit", "update", "destroy"])
+ ->middleware(["auth", "verified"]);
+
+Route::resource("questions", QuestionController::class)
+ ->only(["index", "store", "edit", "update", "destroy"])
+ ->middleware(["auth", "verified"]);
+
require __DIR__.'/auth.php';