From 8f2cf8e64235898b3a2d1a75bd6490f2ed71f62f Mon Sep 17 00:00:00 2001 From: Daan Meijer Date: Mon, 15 Jun 2026 00:34:58 +0200 Subject: [PATCH] feat: Implement Mutations CRUD --- app/Http/Controllers/MutationController.php | 78 +++++++++++++++++++++ app/Http/Requests/StoreMutationRequest.php | 37 ++++++++++ resources/js/pages/Ledgers/Show.vue | 36 +++++++++- routes/web.php | 2 + 4 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/MutationController.php create mode 100644 app/Http/Requests/StoreMutationRequest.php diff --git a/app/Http/Controllers/MutationController.php b/app/Http/Controllers/MutationController.php new file mode 100644 index 0000000..ff1f071 --- /dev/null +++ b/app/Http/Controllers/MutationController.php @@ -0,0 +1,78 @@ +mutations()->create([ + ...$request->validated(), + 'user_id' => $request->user()->id, + ]); + + $ledger->increment('score', $request->validated('amount')); + }); + + return redirect()->route('dynamics.ledgers.show', [$dynamic, $ledger]); + } + + /** + * Display the specified resource. + */ + public function show(Dynamic $dynamic, Ledger $ledger, Mutation $mutation) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Dynamic $dynamic, Ledger $ledger, Mutation $mutation) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Dynamic $dynamic, Ledger $ledger, Mutation $mutation) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Dynamic $dynamic, Ledger $ledger, Mutation $mutation) + { + // + } +} diff --git a/app/Http/Requests/StoreMutationRequest.php b/app/Http/Requests/StoreMutationRequest.php new file mode 100644 index 0000000..0c781cc --- /dev/null +++ b/app/Http/Requests/StoreMutationRequest.php @@ -0,0 +1,37 @@ +route('ledger'); + + return $ledger && $this->user()->can('view', $ledger); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'amount' => ['required', 'integer'], + 'description' => ['required', 'string'], + 'type' => ['nullable', 'string'], + 'status' => ['nullable', 'string'], + ]; + } +} diff --git a/resources/js/pages/Ledgers/Show.vue b/resources/js/pages/Ledgers/Show.vue index 69eaa65..360cb65 100644 --- a/resources/js/pages/Ledgers/Show.vue +++ b/resources/js/pages/Ledgers/Show.vue @@ -1,6 +1,6 @@