From 1f5b61304f351886aac648c766e2f1f1496a20d5 Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Sat, 22 May 2021 13:50:56 -0700 Subject: [PATCH] Finalize goal change controller --- .../Controllers/JournalDateController.php | 7 +++++-- .../Controllers/JournalEntryController.php | 6 ++++++ app/Models/JournalDate.php | 21 +++++++++++++++++++ app/Models/User.php | 6 +----- .../views/journal-entries/index.blade.php | 2 +- routes/auth.php | 2 +- 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/JournalDateController.php b/app/Http/Controllers/JournalDateController.php index 0b89140..7c2cb41 100644 --- a/app/Http/Controllers/JournalDateController.php +++ b/app/Http/Controllers/JournalDateController.php @@ -14,8 +14,11 @@ class JournalDateController extends Controller */ public function updateGoal(Request $request, JournalDate $journalDate): RedirectResponse { - // @todo Implement goal up behavior. - return redirect()->route('journal-entries.show'); + $attributes = $request->validate(['goal' => 'exists:App\Models\Goal,id']); + $journalDate->goal()->associate($attributes['goal'])->save(); + return redirect()->route('journal-entries.index', [ + 'date' => $journalDate->date->format('Y-m-d') + ]); } } diff --git a/app/Http/Controllers/JournalEntryController.php b/app/Http/Controllers/JournalEntryController.php index 7e296fe..baf4613 100644 --- a/app/Http/Controllers/JournalEntryController.php +++ b/app/Http/Controllers/JournalEntryController.php @@ -9,6 +9,7 @@ use App\Http\Requests\StoreFromNutrientsJournalEntryRequest; use App\Http\Requests\StoreJournalEntryRequest; use App\Models\Food; use App\Models\Goal; +use App\Models\JournalDate; use App\Models\JournalEntry; use App\Models\Recipe; use App\Support\ArrayFormat; @@ -62,12 +63,17 @@ class JournalEntryController extends Controller return ['value' => $goal->id, 'label' => $goal->name]; }); + // Get the associated journal date. + // @todo Refactor journal date as a relationship on journal entries. + $journalDate = JournalDate::getOrCreateJournalDate(Auth::user(), $date); + return view('journal-entries.index') ->with('entries', $entries) ->with('sums', $sums) ->with('currentGoal', $goal) ->with('goalProgress', $goalProgress) ->with('goalOptions', $goalOptions) + ->with('journalDate', $journalDate) ->with('date', $date); } diff --git a/app/Models/JournalDate.php b/app/Models/JournalDate.php index d35f54e..36a5d39 100644 --- a/app/Models/JournalDate.php +++ b/app/Models/JournalDate.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Carbon; /** * App\Models\JournalDate @@ -60,4 +61,24 @@ final class JournalDate extends Model public function user(): BelongsTo { return $this->belongsTo(User::class); } + + /** + * Gets a journal date for a user and date, creating a new one if necessary. + * + * @param \App\Models\User $user + * User. + * @param \Illuminate\Support\Carbon $date + * Date. + * + * @return \App\Models\JournalDate + * Journal date for provided user and date. + */ + public static function getOrCreateJournalDate(User $user, Carbon $date): JournalDate { + /** @var \App\Models\JournalDate $journal_date */ + $journal_date = $user->journalDates()->whereDate('date', '=', $date)->first(); + if (empty($journal_date)) { + $journal_date = JournalDate::make(['date' => $date])->user()->associate($user); + } + return $journal_date; + } } diff --git a/app/Models/User.php b/app/Models/User.php index daeadc5..5c04062 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -120,11 +120,7 @@ final class User extends Authenticatable implements HasMedia * method also creates a JournalDate if one does not already exist. */ public function getGoalByDate(Carbon $date): ?Goal { - /** @var \App\Models\JournalDate $journal_date */ - $journal_date = $this->journalDates()->whereDate('date', '=', $date)->first(); - if (empty($journal_date)) { - $journal_date = JournalDate::make(['date' => $date])->user()->associate(Auth::user()); - } + $journal_date = JournalDate::getOrCreateJournalDate($this, $date); if ($journal_date->goal) { return $journal_date->goal; } diff --git a/resources/views/journal-entries/index.blade.php b/resources/views/journal-entries/index.blade.php index 10dcc43..525bf69 100644 --- a/resources/views/journal-entries/index.blade.php +++ b/resources/views/journal-entries/index.blade.php @@ -108,7 +108,7 @@ {{ $currentGoal->name }} @endempty -
+ @csrf group(function () { Route::get('/ingredient-picker/search', [IngredientPickerController::class, 'search'])->name('ingredient-picker.search'); // Journal dates. - Route::post('/journal-dates/update/goal', [JournalDateController::class, 'updateGoal'])->name('journal-dates.update.goal'); + Route::post('/journal-dates/{journal_date}/update/goal', [JournalDateController::class, 'updateGoal'])->name('journal-dates.update.goal'); // Journal entries. Route::get('/journal-entries/create/from-nutrients', [JournalEntryController::class, 'createFromNutrients'])->name('journal-entries.create.from-nutrients');