diff --git a/app/Http/Controllers/Dashboard/NoteController.php b/app/Http/Controllers/Dashboard/NoteController.php new file mode 100644 index 0000000..b171d17 --- /dev/null +++ b/app/Http/Controllers/Dashboard/NoteController.php @@ -0,0 +1,84 @@ + new NoteCollection( + Note::query() + ->orderByDesc('id') + ->get() + ), + ] + ); + } + + public function create(): InertiaResponse + { + return inertia('Notes/Create'); + } + + public function store(NoteRequest $request): RedirectResponse + { + $note = Note::query()->create([ + 'title' => $request->get('title'), + 'note' => $request->get('note'), + ]); + + return redirect() + ->route('admin.note.show', compact('note')) + ->with('success', 'Utworzono nową notatkę.'); + } + + public function show(Note $note): InertiaResponse + { + return inertia('Notes/Show', ['note' => new NoteResource($note)]); + } + + public function edit(Note $note): InertiaResponse + { + return inertia('Notes/Edit', ['note' => new NoteResource($note)]); + } + + public function update(NoteRequest $request, Note $note): RedirectResponse + { + $note->update([ + 'title' => $request->get('title'), + 'note' => $request->get('note'), + ]); + + return redirect() + ->route('admin.note.show', compact('note')) + ->with('success', 'Notatka ' . $request->get('title') . ' została zaktualizowana.'); + } + + public function delete(Note $note): InertiaResponse + { + return inertia('Notes/ConfirmDelete', ['note' => new NoteResource($note)]); + } + + public function destroy(Note $note): RedirectResponse + { + $title = $note->title; + $note->delete(); + + return redirect() + ->route('admin.note.index') + ->with('info', 'Notatka ' . $title . ' została usunięta.'); + } +} diff --git a/app/Http/Requests/NoteRequest.php b/app/Http/Requests/NoteRequest.php new file mode 100644 index 0000000..8bc6026 --- /dev/null +++ b/app/Http/Requests/NoteRequest.php @@ -0,0 +1,18 @@ + 'required|string|min:3|max:250', + 'note' => 'required|string|min:3|max:1000', + ]; + } +} diff --git a/app/Http/Resources/NoteCollection.php b/app/Http/Resources/NoteCollection.php new file mode 100644 index 0000000..2209dde --- /dev/null +++ b/app/Http/Resources/NoteCollection.php @@ -0,0 +1,17 @@ + $this->collection, + ]; + } +} diff --git a/app/Http/Resources/NoteResource.php b/app/Http/Resources/NoteResource.php new file mode 100644 index 0000000..1d64ebe --- /dev/null +++ b/app/Http/Resources/NoteResource.php @@ -0,0 +1,25 @@ + $this->resource->id, + 'title' => $this->resource->title, + 'note' => $this->resource->note, + ]; + } +} diff --git a/app/Models/Note.php b/app/Models/Note.php new file mode 100644 index 0000000..ec3da41 --- /dev/null +++ b/app/Models/Note.php @@ -0,0 +1,20 @@ +id(); + $table->string('title', 250); + $table->text('note'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('notes'); + } +}; diff --git a/resources/js/Pages/Notes/ConfirmDelete.vue b/resources/js/Pages/Notes/ConfirmDelete.vue new file mode 100644 index 0000000..7ff6c5d --- /dev/null +++ b/resources/js/Pages/Notes/ConfirmDelete.vue @@ -0,0 +1,37 @@ + + + diff --git a/resources/js/Pages/Notes/Create.vue b/resources/js/Pages/Notes/Create.vue new file mode 100644 index 0000000..ff3caf6 --- /dev/null +++ b/resources/js/Pages/Notes/Create.vue @@ -0,0 +1,49 @@ + + + diff --git a/resources/js/Pages/Notes/Edit.vue b/resources/js/Pages/Notes/Edit.vue new file mode 100644 index 0000000..0b0ad66 --- /dev/null +++ b/resources/js/Pages/Notes/Edit.vue @@ -0,0 +1,69 @@ + + + diff --git a/resources/js/Pages/Notes/Index.vue b/resources/js/Pages/Notes/Index.vue new file mode 100644 index 0000000..0626d94 --- /dev/null +++ b/resources/js/Pages/Notes/Index.vue @@ -0,0 +1,57 @@ + + + diff --git a/resources/js/Pages/Notes/Show.vue b/resources/js/Pages/Notes/Show.vue new file mode 100644 index 0000000..4bcd3fa --- /dev/null +++ b/resources/js/Pages/Notes/Show.vue @@ -0,0 +1,64 @@ + + + diff --git a/resources/js/Share/Layout/App.vue b/resources/js/Share/Layout/App.vue index 6dff48b..49a9bcb 100644 --- a/resources/js/Share/Layout/App.vue +++ b/resources/js/Share/Layout/App.vue @@ -29,6 +29,7 @@ defineProps({ diff --git a/routes/web.php b/routes/web.php index 1e0638e..2286353 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,6 +7,26 @@ use Illuminate\Support\Facades\Route; Route::name('admin.')->group(function () { Route::namespace('Dashboard')->middleware('auth')->group(function (): void { Route::get('', 'AdminPanelController')->name('home'); + + Route::name('note.')->prefix('note')->group(function (): void { + Route::get('', 'NoteController@index') + ->name('index'); + Route::get('create', 'NoteController@create') + ->name('create'); + Route::post('', 'NoteController@store') + ->name('store'); + Route::get('{note}', 'NoteController@show') + ->name('show'); + Route::get('{note}/edit', 'NoteController@edit') + ->name('edit'); + Route::put('{note}', 'NoteController@update') + ->name('update'); + Route::get('{note}/delete', 'NoteController@delete') + ->name('delete'); + Route::delete('{note}/delete', 'NoteController@destroy') + ->name('destroy'); + }); + Route::name('message.')->prefix('message')->group(function (): void { Route::get('', 'MessageController@index') ->name('index');