From 3dd7c48b08ddd77baec19dbc6f9fc0946372fc75 Mon Sep 17 00:00:00 2001 From: Daan Meijer Date: Mon, 15 Jun 2026 23:22:08 +0200 Subject: [PATCH] feat: Implement Ledger alignment and correct corrective mutation authors in seeders --- app/Http/Requests/StoreLedgerRequest.php | 1 + app/Models/Ledger.php | 1 + database/factories/LedgerFactory.php | 1 + ..._211757_add_alignment_to_ledgers_table.php | 28 ++++++++++++ database/seeders/DatabaseSeeder.php | 13 ++++-- resources/js/components/CreateLedgerForm.vue | 28 ++++++++++++ resources/js/components/LedgerList.vue | 43 ++++++++++++++++++ resources/js/components/MutationList.vue | 26 +++++++++-- resources/js/pages/Ledgers/Show.vue | 44 +++++++++++++++++++ 9 files changed, 177 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2026_06_15_211757_add_alignment_to_ledgers_table.php diff --git a/app/Http/Requests/StoreLedgerRequest.php b/app/Http/Requests/StoreLedgerRequest.php index 18a12d0..8f47082 100644 --- a/app/Http/Requests/StoreLedgerRequest.php +++ b/app/Http/Requests/StoreLedgerRequest.php @@ -27,6 +27,7 @@ class StoreLedgerRequest extends FormRequest return [ 'name' => ['required', 'string', 'max:255'], 'rules' => ['nullable', 'string'], + 'alignment' => ['required', 'string', 'in:positive,neutral,negative'], 'media' => ['nullable', 'array'], 'media.*' => ['file', 'mimes:jpg,jpeg,png,gif,mp4,mov,avi,webm', 'max:20480'], ]; diff --git a/app/Models/Ledger.php b/app/Models/Ledger.php index cb49b0f..13a78f1 100644 --- a/app/Models/Ledger.php +++ b/app/Models/Ledger.php @@ -18,6 +18,7 @@ class Ledger extends Model 'name', 'rules', 'score', + 'alignment', ]; public function dynamic(): BelongsTo diff --git a/database/factories/LedgerFactory.php b/database/factories/LedgerFactory.php index 107ae09..358d68c 100644 --- a/database/factories/LedgerFactory.php +++ b/database/factories/LedgerFactory.php @@ -30,6 +30,7 @@ class LedgerFactory extends Factory ]), 'rules' => 'Scores are added by Doms and subtracted for protocol breaches.', 'score' => 0, + 'alignment' => 'neutral', ]; } } diff --git a/database/migrations/2026_06_15_211757_add_alignment_to_ledgers_table.php b/database/migrations/2026_06_15_211757_add_alignment_to_ledgers_table.php new file mode 100644 index 0000000..54b5b46 --- /dev/null +++ b/database/migrations/2026_06_15_211757_add_alignment_to_ledgers_table.php @@ -0,0 +1,28 @@ +string('alignment')->default('neutral')->after('rules'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('ledgers', function (Blueprint $table) { + $table->dropColumn('alignment'); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 50ba27e..150359d 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -94,6 +94,7 @@ class DatabaseSeeder extends Seeder 'name' => 'Curfew Compliance', 'rules' => 'Must be in bed and checked in by 11:00 PM.', 'score' => 35, + 'alignment' => 'positive', ]); $cleaningLedger = Ledger::create([ @@ -101,6 +102,7 @@ class DatabaseSeeder extends Seeder 'name' => 'Dungeon Cleaning', 'rules' => 'Earn +10 to +20 points for cleaning/setup. Penalty -10 for disorganization.', 'score' => 45, + 'alignment' => 'neutral', ]); $etiquetteLedger = Ledger::create([ @@ -108,6 +110,7 @@ class DatabaseSeeder extends Seeder 'name' => 'Protocol & Etiquette', 'rules' => 'Address others by correct titles. -5 per infraction.', 'score' => -15, + 'alignment' => 'negative', ]); // Seed Curfew Mutations @@ -168,7 +171,7 @@ class DatabaseSeeder extends Seeder Mutation::create([ 'ledger_id' => $cleaningLedger->id, - 'user_id' => $bob->id, + 'user_id' => $alice->id, 'type' => 'penalty', 'amount' => -10, 'description' => 'Left keys in the locks unmonitored', @@ -209,7 +212,7 @@ class DatabaseSeeder extends Seeder // Seed Etiquette Mutations Mutation::create([ 'ledger_id' => $etiquetteLedger->id, - 'user_id' => $bob->id, + 'user_id' => $alice->id, 'type' => 'penalty', 'amount' => -5, 'description' => 'Interrupted Domina Alice during daily instructions', @@ -218,7 +221,7 @@ class DatabaseSeeder extends Seeder Mutation::create([ 'ledger_id' => $etiquetteLedger->id, - 'user_id' => $bob->id, + 'user_id' => $alice->id, 'type' => 'penalty', 'amount' => -10, 'description' => 'Forgot correct posture during morning roll call', @@ -227,7 +230,7 @@ class DatabaseSeeder extends Seeder Mutation::create([ 'ledger_id' => $etiquetteLedger->id, - 'user_id' => $bob->id, + 'user_id' => $alice->id, 'type' => 'penalty', 'amount' => -5, 'description' => 'Spoke out of turn in general chat', @@ -288,6 +291,7 @@ class DatabaseSeeder extends Seeder 'name' => 'Kitchen Chores', 'rules' => 'Scores for dishwashing, trash duty, and deep oven cleaning.', 'score' => 40, + 'alignment' => 'positive', ]); $coffeeLedger = Ledger::create([ @@ -295,6 +299,7 @@ class DatabaseSeeder extends Seeder 'name' => 'Coffee Machine Maintenance', 'rules' => ' refill beans and descale monthly.', 'score' => 10, + 'alignment' => 'neutral', ]); // Seed Chores Mutations diff --git a/resources/js/components/CreateLedgerForm.vue b/resources/js/components/CreateLedgerForm.vue index ad3a427..463ff2e 100644 --- a/resources/js/components/CreateLedgerForm.vue +++ b/resources/js/components/CreateLedgerForm.vue @@ -9,6 +9,7 @@ const props = defineProps<{ const form = useForm({ name: '', rules: '', + alignment: 'neutral', media: [] as File[], }); @@ -80,6 +81,29 @@ function submit() { +
+ + +
+ {{ form.errors.alignment }} +
+
+