diff --git a/app/Models/Task.php b/app/Models/Task.php index 5458207..6f6ac12 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -8,4 +8,15 @@ use Illuminate\Database\Eloquent\Model; class Task extends Model { use HasFactory; + + protected $attributes = [ + 'completed' => false, // Set default value for completed + ]; + + public function user() { + return $this->belongsTo(User::class); + } + public function category() { + return $this->belongsTo(Category::class); + } } diff --git a/database/seeders/TaskSeeder.php b/database/seeders/TaskSeeder.php index 4c58715..139fdb1 100644 --- a/database/seeders/TaskSeeder.php +++ b/database/seeders/TaskSeeder.php @@ -13,6 +13,6 @@ class TaskSeeder extends Seeder */ public function run(): void { - Task::factory(100)->create(); + Task::factory(20)->create(); } } diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..4cc7e0e --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,24 @@ + + Login Page +
+ +
+

Login

+
+ @csrf +
+ + + +
+
+ + + +
+ +
+
+
+ +
\ No newline at end of file diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..7d12a89 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,34 @@ + + Register Page +
+ +
+ +
+ @csrf +
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
+ +
\ No newline at end of file diff --git a/resources/views/components/form-button.blade.php b/resources/views/components/form-button.blade.php new file mode 100644 index 0000000..5681175 --- /dev/null +++ b/resources/views/components/form-button.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/components/form-error.blade.php b/resources/views/components/form-error.blade.php new file mode 100644 index 0000000..8cc4c06 --- /dev/null +++ b/resources/views/components/form-error.blade.php @@ -0,0 +1,4 @@ +@props(['name']) +@error($name) +

{{ $message}}

+@enderror \ No newline at end of file diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php index d5903d1..3e78f98 100644 --- a/resources/views/components/layout.blade.php +++ b/resources/views/components/layout.blade.php @@ -3,7 +3,7 @@ - Simple Tailwind Layout + {{ $heading }} @@ -11,17 +11,11 @@
-

MoveMate

+

MoveMate

- + +
diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php new file mode 100644 index 0000000..10b259a --- /dev/null +++ b/resources/views/components/nav-link.blade.php @@ -0,0 +1 @@ +
  • merge(['class' => 'text-gray-600 hover:text-gray-900']) }}> {{ $slot }}
  • \ No newline at end of file diff --git a/resources/views/components/nav.blade.php b/resources/views/components/nav.blade.php new file mode 100644 index 0000000..8e00fa4 --- /dev/null +++ b/resources/views/components/nav.blade.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/resources/views/task/create.blade.php b/resources/views/task/create.blade.php index 5ab2f8a..39faf34 100644 --- a/resources/views/task/create.blade.php +++ b/resources/views/task/create.blade.php @@ -1 +1,44 @@ -Hello \ No newline at end of file + + Create New Task + @if (session('success')) +
    + {{ session('success') }} +
    + @endif +
    + @csrf +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + Cancel +
    +
    +
    \ No newline at end of file diff --git a/resources/views/task/edit.blade.php b/resources/views/task/edit.blade.php new file mode 100644 index 0000000..b61b744 --- /dev/null +++ b/resources/views/task/edit.blade.php @@ -0,0 +1,48 @@ + + Update Task + @if (session('success')) +
    + {{ session('success') }} +
    + @endif +
    + @csrf + @method('PATCH') +
    + + name }} type="text" name="name" class="w-full p-2 mt-1 border rounded-md focus:ring focus:ring-blue-300" required> + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + Cancel +
    +
    +
    \ No newline at end of file diff --git a/resources/views/task/show.blade.php b/resources/views/task/show.blade.php new file mode 100644 index 0000000..4dfd009 --- /dev/null +++ b/resources/views/task/show.blade.php @@ -0,0 +1,17 @@ + + + {{ $task->name }} + + +
    +
    {{ $task->description }}
    +
    Where to go: {{ $task->location }}
    +
    Time Estimate: {{ $task->time_estimate }} hour
    +
    Category: {{ $task->category->name }}
    +
    Owner: {{ $task->user->name }}
    + +
    +
    + Edit +
    +
    \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 4cf28c5..2f09461 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,24 +1,136 @@ Paginate(5); + $task = Task::latest('updated_at')->Paginate(20); return view('task.index', [ 'tasks' => $task ]); }); + + +Route::get('/task', function () { + $task = Task::latest('updated_at')->Paginate(20); + return view('task.index', [ + 'tasks' => $task + ]); +}); + + Route::get('/task/create', function () { - return view('task.create'); + $categories = Category::all(); + return view('task.create', [ + 'categories' => $categories + ]); }); Route::post('/task/create', function () { - + //dd(Auth::id()); + $validatedAtts = request()->validate([ + 'name' => ['required'], + 'description' => ['required'], + 'category_id' => ['required'], + 'location' => ['required'], + 'time_estimate' => ['required'], + ]); + + $validatedAtts['user_id'] = Auth::id(); + + //dd($validatedAtts); + + $task = Task::create( + $validatedAtts + ); + + return redirect()->route('task.create')->with('success', 'Task created successfully!'); +})->name('task.create'); + +Route::get('/task/{id}', function ($id) { + $task = Task::find($id); + return view('task.show', [ + 'task' => $task + ]); +}); + +Route::get('/task/{id}/edit', function ($id) { + $task = Task::find($id); + $categories = Category::all(); + return view('task.edit', [ + 'task' => $task, + 'categories' => $categories + ]); +}); + +Route::patch('/task/{id}', function ($id) { + $task = Task::find($id); + $validatedAtts = request()->validate([ + 'name' => ['required'], + 'description' => ['required'], + 'category_id' => ['required'], + 'location' => ['required'], + 'time_estimate' => ['required'], + ]); + //dd($task); + $task->update($validatedAtts); + + return redirect('/task/'.$task->id); + + +}); + + + +Route::get('/login', function () { + return view('auth.login'); +}); + +Route::post('/login', function () { + $validatedAtts = request()->validate([ + 'email' => ['required'], + 'password' => ['required'] + ]); + //dd($validatedAtts); + // Attemp + if (! Auth::attempt($validatedAtts)) { + throw ValidationException::withMessages([ + 'email' => 'The information does not match' + ]); + + }; + + // regenerate the session token + request()->session()->regenerate(); + + //redirect + return redirect('/task'); +}); + +Route::get('/register', function () { + return view('auth.register'); +}); + +Route::post('/register', function () { + //validate + $validatedAtts = request()->validate([ + 'name' => ['required'], + 'email' => ['required'], + 'password' => ['required', Password::min(2), 'confirmed'] + ]); + $user = User::create($validatedAtts); + Auth::login($user); + +}); + +Route::post('/logout', function() { + Auth::logout(); + return redirect('/'); }); \ No newline at end of file