diff --git a/app/Http/Controllers/Api/MessageController.php b/app/Http/Controllers/Api/MessageController.php new file mode 100644 index 0000000..e8d0a54 --- /dev/null +++ b/app/Http/Controllers/Api/MessageController.php @@ -0,0 +1,27 @@ +toArray(); + Message::query()->create([ + 'message' => $data['message'], + 'email' => $data['email'], + 'sender' => $data['sender'], + ]); + + return response()->json([ + 'message' => 'Dziękuję za wiadomość! Odpowiem możliwie najszybciej.' + ]); + } +} diff --git a/app/Http/Controllers/Dashboard/MessageController.php b/app/Http/Controllers/Dashboard/MessageController.php index 326c0f5..f8da6ae 100644 --- a/app/Http/Controllers/Dashboard/MessageController.php +++ b/app/Http/Controllers/Dashboard/MessageController.php @@ -5,11 +5,15 @@ declare(strict_types=1); namespace App\Http\Controllers\Dashboard; use App\Http\Controllers\Controller; +use App\Http\Resources\MessageCollection; +use App\Models\Message; use Inertia\Response as InertiaResponse; class MessageController extends Controller { public function index() : InertiaResponse { - return inertia('Messages/Index'); + return inertia('Messages/Index', [ + 'messages' => new MessageCollection(Message::all()), + ]); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 67c4b51..c6f1137 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -18,7 +18,6 @@ class Kernel extends HttpKernel \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, Core::class, - \App\Http\Middleware\HandleInertiaRequests::class, ]; protected $middlewareGroups = [ @@ -29,6 +28,7 @@ class Kernel extends HttpKernel \Illuminate\View\Middleware\ShareErrorsFromSession::class, \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, + \App\Http\Middleware\HandleInertiaRequests::class, ], 'api' => [ diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 149f405..9fc74ae 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -1,5 +1,7 @@ 'required|string|min:3|max:500', + 'sender' => 'required|string|min:3|max:50', + 'email' => 'required|email|max:250', + ]; + } + + public function messages(): array + { + return [ + 'message.required' => 'Pole wiadomości jest wymagane.', + 'sender.required' => 'Pole nadawcy jest wymagane.', + 'email.required' => 'Pole e-mail jest wymagane.', + 'message.min' => 'Pole wiadomości wymaga 3 znaki.', + 'sender.min' => 'Pole nadawcy wymaga 3 znaki.', + 'email.email' => 'Pole musi być e-mailem.', + ]; + } +} diff --git a/app/Http/Resources/MessageCollection.php b/app/Http/Resources/MessageCollection.php new file mode 100644 index 0000000..88adf7a --- /dev/null +++ b/app/Http/Resources/MessageCollection.php @@ -0,0 +1,17 @@ + $this->collection, + ]; + } +} diff --git a/app/Http/Resources/MessageResource.php b/app/Http/Resources/MessageResource.php new file mode 100644 index 0000000..461d9a7 --- /dev/null +++ b/app/Http/Resources/MessageResource.php @@ -0,0 +1,22 @@ + $this->id, + 'sender' => $this->sender, + 'email' => $this->email, + 'message' => $this->message, + ]; + } +} diff --git a/app/Models/Message.php b/app/Models/Message.php new file mode 100644 index 0000000..e3f5320 --- /dev/null +++ b/app/Models/Message.php @@ -0,0 +1,21 @@ +id(); + $table->string('message', 500); + $table->string('email', 250); + $table->string('sender', 50); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('messages'); + } +}; diff --git a/resources/js/Pages/Messages/Index.vue b/resources/js/Pages/Messages/Index.vue index 82f50a9..9e9b610 100644 --- a/resources/js/Pages/Messages/Index.vue +++ b/resources/js/Pages/Messages/Index.vue @@ -1,3 +1,12 @@ + + diff --git a/resources/js/Share/Layout/App.vue b/resources/js/Share/Layout/App.vue index 6938efe..1130520 100644 --- a/resources/js/Share/Layout/App.vue +++ b/resources/js/Share/Layout/App.vue @@ -27,9 +27,8 @@ defineProps({ diff --git a/routes/api.php b/routes/api.php index 06d1a68..40aaea1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,3 +19,5 @@ Route::prefix('project')->group(function() { }); Route::get('cv/{cv}', 'CVController@show'); + +Route::post('message', 'MessageController@store');