refactor: Use ActivityService to create system messages in seeder
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('predefined_mutations', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('dynamic_id')->constrained()->cascadeOnDelete();
|
||||
$table->string('name');
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('amount');
|
||||
$table->string('type')->default('reward');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('predefined_mutations');
|
||||
}
|
||||
};
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('mutations', function (Blueprint $table) {
|
||||
$table->foreignId('predefined_mutation_id')->nullable()->constrained()->onDelete('set null');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('mutations', function (Blueprint $table) {
|
||||
$table->dropForeign(['predefined_mutation_id']);
|
||||
$table->dropColumn('predefined_mutation_id');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -7,6 +7,7 @@ use App\Models\Dynamic;
|
||||
use App\Models\Ledger;
|
||||
use App\Models\Mutation;
|
||||
use App\Models\Message;
|
||||
use App\Services\ActivityService;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -16,9 +17,9 @@ class DatabaseSeeder extends Seeder
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
public function run(ActivityService $activityService): void
|
||||
{
|
||||
DB::transaction(function () {
|
||||
DB::transaction(function () use ($activityService) {
|
||||
// 1. Create Core Users
|
||||
$testUser = User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
@@ -52,7 +53,9 @@ class DatabaseSeeder extends Seeder
|
||||
// ----------------------------------------------------
|
||||
$velvetSanctuary = Dynamic::create([
|
||||
'name' => 'The Velvet Sanctuary',
|
||||
'rules' => "1. Respect limits and boundaries at all times.\n2. Submit daily logs for curfew and chores.\n3. Maintain proper protocol in the general discussion.",
|
||||
'rules' => "1. Respect limits and boundaries at all times.
|
||||
2. Submit daily logs for curfew and chores.
|
||||
3. Maintain proper protocol in the general discussion.",
|
||||
]);
|
||||
|
||||
// Add participants (Test User is owner, Alice is owner, Bob is submissive/participant)
|
||||
@@ -64,29 +67,10 @@ class DatabaseSeeder extends Seeder
|
||||
$velvetChat = $velvetSanctuary->chat;
|
||||
|
||||
// Seed Dynamic Chat Messages
|
||||
Message::create([
|
||||
'chat_id' => $velvetChat->id,
|
||||
'user_id' => $alice->id,
|
||||
'content' => 'Good morning everyone. Bob, please ensure the Obsidian room is polished before 4 PM.',
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $velvetChat->id,
|
||||
'user_id' => $testUser->id,
|
||||
'content' => 'I will review the curfew log later today.',
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $velvetChat->id,
|
||||
'user_id' => $bob->id,
|
||||
'content' => "Yes, Sir. Yes, Ma'am. I am starting on the chores now.",
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $velvetChat->id,
|
||||
'user_id' => $testUser->id,
|
||||
'content' => 'Excellent. Keep up the high standard.',
|
||||
]);
|
||||
$activityService->createMessage($velvetChat, $alice, 'Good morning everyone. Bob, please ensure the Obsidian room is polished before 4 PM.');
|
||||
$activityService->createMessage($velvetChat, $testUser, 'I will review the curfew log later today.');
|
||||
$activityService->createMessage($velvetChat, $bob, "Yes, Sir. Yes, Ma'am. I am starting on the chores now.");
|
||||
$activityService->createMessage($velvetChat, $testUser, 'Excellent. Keep up the high standard.');
|
||||
|
||||
// Add Ledgers
|
||||
$curfewLedger = Ledger::create([
|
||||
@@ -114,145 +98,37 @@ class DatabaseSeeder extends Seeder
|
||||
]);
|
||||
|
||||
// Seed Curfew Mutations
|
||||
Mutation::create([
|
||||
'ledger_id' => $curfewLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 10,
|
||||
'description' => 'Checked in by 10:45 PM on Friday',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $curfewLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 15,
|
||||
'description' => 'Checked in by 10:30 PM on Saturday',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $curfewLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 10,
|
||||
'description' => 'Checked in by 10:50 PM on Sunday',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
$activityService->createMutation($curfewLedger, $bob, 'reward', 10, 'Checked in by 10:45 PM on Friday', 'approved');
|
||||
$activityService->createMutation($curfewLedger, $bob, 'reward', 15, 'Checked in by 10:30 PM on Saturday', 'approved');
|
||||
$activityService->createMutation($curfewLedger, $bob, 'reward', 10, 'Checked in by 10:50 PM on Sunday', 'approved');
|
||||
|
||||
// Seed Cleaning Mutations
|
||||
Mutation::create([
|
||||
'ledger_id' => $cleaningLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 15,
|
||||
'description' => 'Deep cleaning of the main chamber',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $cleaningLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 20,
|
||||
'description' => 'Arranged gear rack and polished leather accessories',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $cleaningLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 10,
|
||||
'description' => 'Mopped obsidian floors',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $cleaningLedger->id,
|
||||
'user_id' => $alice->id,
|
||||
'type' => 'penalty',
|
||||
'amount' => -10,
|
||||
'description' => 'Left keys in the locks unmonitored',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
$activityService->createMutation($cleaningLedger, $bob, 'reward', 15, 'Deep cleaning of the main chamber', 'approved');
|
||||
$activityService->createMutation($cleaningLedger, $bob, 'reward', 20, 'Arranged gear rack and polished leather accessories', 'approved');
|
||||
$activityService->createMutation($cleaningLedger, $bob, 'reward', 10, 'Mopped obsidian floors', 'approved');
|
||||
$activityService->createMutation($cleaningLedger, $alice, 'penalty', -10, 'Left keys in the locks unmonitored', 'approved');
|
||||
|
||||
// Seed Pending Mutation with its own Chat Messages!
|
||||
$pendingMutation = Mutation::create([
|
||||
'ledger_id' => $cleaningLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'addition',
|
||||
'amount' => 10,
|
||||
'description' => 'Weekly chore submission - dusting shelves',
|
||||
'status' => 'pending',
|
||||
]);
|
||||
|
||||
// Pending mutation chat messages (chat is auto-created on booted)
|
||||
$pendingMutation = $activityService->createMutation($cleaningLedger, $bob, 'addition', 10, 'Weekly chore submission - dusting shelves', 'pending');
|
||||
$pendingMutationChat = $pendingMutation->chat;
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $pendingMutationChat->id,
|
||||
'user_id' => $bob->id,
|
||||
'content' => 'I have finished the shelves. Please approve when convenient.',
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $pendingMutationChat->id,
|
||||
'user_id' => $alice->id,
|
||||
'content' => "I checked them; there is still some dust on the top shelf. I'll leave this pending until it's perfect.",
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $pendingMutationChat->id,
|
||||
'user_id' => $bob->id,
|
||||
'content' => 'Apologies, Ma\'am. I will re-wipe the top section immediately!',
|
||||
]);
|
||||
$activityService->createMessage($pendingMutationChat, $bob, 'I have finished the shelves. Please approve when convenient.');
|
||||
$activityService->createMessage($pendingMutationChat, $alice, "I checked them; there is still some dust on the top shelf. I'll leave this pending until it's perfect.");
|
||||
$activityService->createMessage($pendingMutationChat, $bob, 'Apologies, Ma\'am. I will re-wipe the top section immediately!');
|
||||
|
||||
// Seed Etiquette Mutations
|
||||
Mutation::create([
|
||||
'ledger_id' => $etiquetteLedger->id,
|
||||
'user_id' => $alice->id,
|
||||
'type' => 'penalty',
|
||||
'amount' => 5,
|
||||
'description' => 'Interrupted Domina Alice during daily instructions',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $etiquetteLedger->id,
|
||||
'user_id' => $alice->id,
|
||||
'type' => 'penalty',
|
||||
'amount' => 10,
|
||||
'description' => 'Forgot correct posture during morning roll call',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $etiquetteLedger->id,
|
||||
'user_id' => $alice->id,
|
||||
'type' => 'penalty',
|
||||
'amount' => 5,
|
||||
'description' => 'Spoke out of turn in general chat',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $etiquetteLedger->id,
|
||||
'user_id' => $bob->id,
|
||||
'type' => 'reward',
|
||||
'amount' => -5,
|
||||
'description' => 'Excellent reciting of the house codes',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
$activityService->createMutation($etiquetteLedger, $alice, 'penalty', 5, 'Interrupted Domina Alice during daily instructions', 'approved');
|
||||
$activityService->createMutation($etiquetteLedger, $alice, 'penalty', 10, 'Forgot correct posture during morning roll call', 'approved');
|
||||
$activityService->createMutation($etiquetteLedger, $alice, 'penalty', 5, 'Spoke out of turn in general chat', 'approved');
|
||||
$activityService->createMutation($etiquetteLedger, $bob, 'reward', -5, 'Excellent reciting of the house codes', 'approved');
|
||||
|
||||
// ----------------------------------------------------
|
||||
// 3. Seed Dynamic 2: Obsidian Household Agreement
|
||||
// ----------------------------------------------------
|
||||
$obsidianHousehold = Dynamic::create([
|
||||
'name' => 'Obsidian Household Agreement',
|
||||
'rules' => "1. All residents must do their fair share of maintenance.\n2. Coffee machine must be refilled immediately when empty.",
|
||||
'rules' => "1. All residents must do their fair share of maintenance.
|
||||
2. Coffee machine must be refilled immediately when empty.",
|
||||
]);
|
||||
|
||||
$obsidianHousehold->participants()->attach($alice->id, ['role' => 'owner']);
|
||||
@@ -261,29 +137,10 @@ class DatabaseSeeder extends Seeder
|
||||
|
||||
$obsidianChat = $obsidianHousehold->chat;
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $obsidianChat->id,
|
||||
'user_id' => $alice->id,
|
||||
'content' => "Who finished the coffee beans and didn't put them on the shopping list?",
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $obsidianChat->id,
|
||||
'user_id' => $charles->id,
|
||||
'content' => "Wasn't me, I only drink tea.",
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $obsidianChat->id,
|
||||
'user_id' => $testUser->id,
|
||||
'content' => 'My apologies! I did refill the hopper, but forgot to list the replacement bag. I will buy a new pack tonight.',
|
||||
]);
|
||||
|
||||
Message::create([
|
||||
'chat_id' => $obsidianChat->id,
|
||||
'user_id' => $alice->id,
|
||||
'content' => 'Thank you, Test User. Appreciate the honesty.',
|
||||
]);
|
||||
$activityService->createMessage($obsidianChat, $alice, "Who finished the coffee beans and didn't put them on the shopping list?");
|
||||
$activityService->createMessage($obsidianChat, $charles, "Wasn't me, I only drink tea.");
|
||||
$activityService->createMessage($obsidianChat, $testUser, 'My apologies! I did refill the hopper, but forgot to list the replacement bag. I will buy a new pack tonight.');
|
||||
$activityService->createMessage($obsidianChat, $alice, 'Thank you, Test User. Appreciate the honesty.');
|
||||
|
||||
// Add Ledgers
|
||||
$kitchenLedger = Ledger::create([
|
||||
@@ -303,33 +160,11 @@ class DatabaseSeeder extends Seeder
|
||||
]);
|
||||
|
||||
// Seed Chores Mutations
|
||||
Mutation::create([
|
||||
'ledger_id' => $kitchenLedger->id,
|
||||
'user_id' => $testUser->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 25,
|
||||
'description' => 'Emptied and loaded the dishwasher',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
|
||||
Mutation::create([
|
||||
'ledger_id' => $kitchenLedger->id,
|
||||
'user_id' => $testUser->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 15,
|
||||
'description' => 'Took out recycling and trash bags',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
$activityService->createMutation($kitchenLedger, $testUser, 'reward', 25, 'Emptied and loaded the dishwasher', 'approved');
|
||||
$activityService->createMutation($kitchenLedger, $testUser, 'reward', 15, 'Took out recycling and trash bags', 'approved');
|
||||
|
||||
// Seed Coffee Mutations
|
||||
Mutation::create([
|
||||
'ledger_id' => $coffeeLedger->id,
|
||||
'user_id' => $testUser->id,
|
||||
'type' => 'reward',
|
||||
'amount' => 10,
|
||||
'description' => 'Descaled and refilled coffee beans',
|
||||
'status' => 'approved',
|
||||
]);
|
||||
$activityService->createMutation($coffeeLedger, $testUser, 'reward', 10, 'Descaled and refilled coffee beans', 'approved');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user