From 0d0c182df87ee554e35ae12297cba9db9309c009 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sat, 10 Aug 2024 17:12:55 -0500 Subject: [PATCH] Foundation work for user flags Work on #64 --- app/Enums/UserFlags.php | 8 +++++ app/Models/User.php | 29 ++++++++++++++++++ app/Models/UserFlag.php | 21 +++++++++++++ ...4_08_10_214837_create_user_flags_table.php | 30 +++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 app/Enums/UserFlags.php create mode 100644 app/Models/UserFlag.php create mode 100644 database/migrations/2024_08_10_214837_create_user_flags_table.php diff --git a/app/Enums/UserFlags.php b/app/Enums/UserFlags.php new file mode 100644 index 0000000..aa174d4 --- /dev/null +++ b/app/Enums/UserFlags.php @@ -0,0 +1,8 @@ +hasMany(ScoreSheet::class); } + public function flags(): HasMany + { + return $this->hasMany(UserFlag::class); + } + + public function hasFlag($flag): bool + { + $flags = []; + foreach ($this->flags as $checkFlag) { + $flags[] = $checkFlag->flag_name->value; + } + + return in_array($flag, $flags); + + } + + public function addFlag($flag): void + { + if ($this->hasFlag($flag)) { + return; + } + $enum = match ($flag) { + 'head_director' => UserFlags::HEAD_DIRECTOR, + }; + $this->flags()->create(['flag_name' => $enum]); + $this->load('flags'); + } + public function scoresForEntry($entry) { return $this->scoreSheets->where('entry_id', '=', $entry)->first()?->subscores; diff --git a/app/Models/UserFlag.php b/app/Models/UserFlag.php new file mode 100644 index 0000000..f2e616d --- /dev/null +++ b/app/Models/UserFlag.php @@ -0,0 +1,21 @@ + UserFlags::class, + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} diff --git a/database/migrations/2024_08_10_214837_create_user_flags_table.php b/database/migrations/2024_08_10_214837_create_user_flags_table.php new file mode 100644 index 0000000..9de75e2 --- /dev/null +++ b/database/migrations/2024_08_10_214837_create_user_flags_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignIdFor(User::class)->constrained()->cascadeOnUpdate()->cascadeOnDelete(); + $table->string('flag_name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_flags'); + } +};