Page MenuHomePhorge

D5154.1775517248.diff
No OneTemporary

Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None

D5154.1775517248.diff

diff --git a/src/app/Console/Commands/OwnerSwapCommand.php b/src/app/Console/Commands/OwnerSwapCommand.php
--- a/src/app/Console/Commands/OwnerSwapCommand.php
+++ b/src/app/Console/Commands/OwnerSwapCommand.php
@@ -3,6 +3,8 @@
namespace App\Console\Commands;
use App\Console\Command;
+use App\User;
+use App\Wallet;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Queue;
use Mollie\Laravel\Facades\Mollie;
@@ -61,40 +63,61 @@
DB::beginTransaction();
- // Switch wallet for existing entitlements
- $wallet->entitlements()->withTrashed()->update(['wallet_id' => $target_wallet->id]);
+ $this->migrateWallet($wallet, $target_wallet);
+ $this->migrateUser($user, $target);
+
+ DB::commit();
+
+ // Update mollie/stripe customer email (which point to the old wallet id)
+ $this->updatePaymentCustomer($target_wallet);
+ }
+ /**
+ * Move settings from one user to another
+ */
+ private function migrateUser(User $source, User $target): void
+ {
// Update target user's created_at timestamp to the source user's created_at.
// This is needed because we use this date when charging entitlements,
// i.e. the first month is free.
$dt = \now()->subMonthsWithoutOverflow(1);
- if ($target->created_at > $dt && $target->created_at > $user->created_at) {
- $target->created_at = $user->created_at;
+ if ($target->created_at > $dt && $target->created_at > $source->created_at) {
+ $target->created_at = $source->created_at;
$target->save();
}
+ // Move plan_id setting
+ if ($plan_id = $source->getSetting('plan_id')) {
+ $target->setSetting('plan_id', $plan_id);
+ $source->removeSetting('plan_id');
+ }
+ }
+
+ /**
+ * Move entitlements, settings and state from one wallet to another
+ */
+ private function migrateWallet(Wallet $source, Wallet $target): void
+ {
+ // Switch wallet for existing entitlements
+ $source->entitlements()->withTrashed()->update(['wallet_id' => $target->id]);
+
// Migrate wallet properties
- $target_wallet->balance = $wallet->balance;
- $target_wallet->currency = $wallet->currency;
- $target_wallet->save();
+ $target->balance = $source->balance;
+ $target->currency = $source->currency;
+ $target->save();
- $wallet->balance = 0;
- $wallet->save();
+ $source->balance = 0;
+ $source->save();
// Migrate wallet settings
- $settings = $wallet->settings()->get();
+ $settings = $source->settings()->get();
- \App\WalletSetting::where('wallet_id', $wallet->id)->delete();
- \App\WalletSetting::where('wallet_id', $target_wallet->id)->delete();
+ $source->settings()->delete();
+ $target->settings()->delete();
foreach ($settings as $setting) {
- $target_wallet->setSetting($setting->key, $setting->value);
+ $target->setSetting($setting->key, $setting->value);
}
-
- DB::commit();
-
- // Update mollie/stripe customer email (which point to the old wallet id)
- $this->updatePaymentCustomer($target_wallet);
}
/**
diff --git a/src/tests/Feature/Console/OwnerSwapTest.php b/src/tests/Feature/Console/OwnerSwapTest.php
--- a/src/tests/Feature/Console/OwnerSwapTest.php
+++ b/src/tests/Feature/Console/OwnerSwapTest.php
@@ -61,6 +61,7 @@
$target_wallet = $user->wallets()->first();
$owner->created_at = \now()->subMonths(1);
$owner->save();
+ $owner->setSetting('plan_id', 'test');
$entitlements = $wallet->entitlements()->orderBy('id')->pluck('id')->all();
$this->assertCount(15, $entitlements);
@@ -96,6 +97,7 @@
$this->assertSame($wallet->currency, $target_wallet->currency);
$this->assertTrue($user->created_at->toDateTimeString() === $owner->created_at->toDateTimeString());
$this->assertSame('test', $target_wallet->getSetting('test'));
+ $this->assertSame('test', $user->getSetting('plan_id'));
$wallet->refresh();
$this->assertSame(null, $wallet->getSetting('test'));

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 6, 11:14 PM (5 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18839998
Default Alt Text
D5154.1775517248.diff (4 KB)

Event Timeline