From bccb71d8d1e1eff68b284200b6e809a91251965f Mon Sep 17 00:00:00 2001 From: ashish aryal Date: Mon, 29 Sep 2025 13:29:11 +0200 Subject: [PATCH] Enums and basic usage --- app/Enums/SuggestionStatus.php | 10 ++++++++++ app/Enums/TripStatus.php | 10 ++++++++++ app/Enums/VoteType.php | 10 ++++++++++ app/Http/Controllers/V1/SuggestionController.php | 7 +++++-- app/Http/Requests/TripRequest.php | 4 +++- app/Repositories/TripRepository.php | 5 +++-- 6 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 app/Enums/SuggestionStatus.php create mode 100644 app/Enums/TripStatus.php create mode 100644 app/Enums/VoteType.php diff --git a/app/Enums/SuggestionStatus.php b/app/Enums/SuggestionStatus.php new file mode 100644 index 0000000..7777df9 --- /dev/null +++ b/app/Enums/SuggestionStatus.php @@ -0,0 +1,10 @@ +validate([ - 'type' => 'required|in:up,down', + 'type' => ['required', new Enum(VoteType::class)], ]); $suggestion->vote()->updateOrCreate([ @@ -56,7 +59,7 @@ public function status(Suggestion $suggestion, Request $request): RedirectRespon { $validated = $request->validate([ - 'type' => 'required|in:approved,rejected', + 'type' => ['required', new Enum(SuggestionStatus::class)], ]); $suggestion->update(['status' => $validated['type']]); diff --git a/app/Http/Requests/TripRequest.php b/app/Http/Requests/TripRequest.php index 2c263b1..fd8f98d 100644 --- a/app/Http/Requests/TripRequest.php +++ b/app/Http/Requests/TripRequest.php @@ -2,7 +2,9 @@ namespace App\Http\Requests; +use App\Enums\TripStatus; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rules\Enum; class TripRequest extends FormRequest { @@ -24,7 +26,7 @@ public function rules(): array return [ 'title' => 'required', 'description' => 'required', - 'status' => 'required', + 'status' => ['required', new Enum(TripStatus::class)], ]; } } diff --git a/app/Repositories/TripRepository.php b/app/Repositories/TripRepository.php index 4d97d1a..4fa4515 100644 --- a/app/Repositories/TripRepository.php +++ b/app/Repositories/TripRepository.php @@ -4,6 +4,7 @@ namespace App\Repositories; +use App\Enums\VoteType; use App\Models\Trip; use App\Repositories\Contracts\TripRepositoryContract; use Illuminate\Support\Collection; @@ -29,10 +30,10 @@ public function findWithSuggestions(Trip $trip): Trip 'suggestions' => function ($query) { $query->withCount([ 'vote as up_votes_count' => function ($q) { - $q->where('type', 'up'); + $q->where('type', VoteType::UP); }, 'vote as down_votes_count' => function ($q) { - $q->where('type', 'down'); + $q->where('type', VoteType::DOWN); }, ]); },