Skip to content

Commit f6b1331

Browse files
chore: Refactor code related to the subscriptions
1 parent 64d8ee8 commit f6b1331

File tree

12 files changed

+137
-147
lines changed

12 files changed

+137
-147
lines changed

src/cli/Users.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function index(Request $request): Response
4545
foreach ($users as $user) {
4646
$created_at = $user->created_at->format('Y-m-d');
4747
$validated_label = '';
48-
if (!$user->validated_at) {
48+
if (!$user->isValidated()) {
4949
$validated_label = ' (not validated)';
5050
}
5151
$output[] = "{$user->id} {$created_at} {$user->email}{$validated_label}";
@@ -146,7 +146,7 @@ public function validate(Request $request): Response
146146
return Response::text(404, "User {$user_id} doesn’t exist.");
147147
}
148148

149-
if ($user->validated_at) {
149+
if ($user->isValidated()) {
150150
return Response::text(400, "User {$user_id} has already been validated.");
151151
}
152152

@@ -162,14 +162,7 @@ public function validate(Request $request): Response
162162

163163
if (\App\Configuration::areSubscriptionsEnabled()) {
164164
$subscriptions_service = new services\Subscriptions();
165-
166-
$account = $subscriptions_service->account($user->email);
167-
if ($account) {
168-
$user->subscription_account_id = $account['id'];
169-
$user->subscription_expired_at = $account['expired_at'];
170-
} else {
171-
\Minz\Log::error("Can’t get a subscription account for user {$user->id}."); // @codeCoverageIgnore
172-
}
165+
$subscriptions_service->initAccount($user);
173166
}
174167

175168
$user->save();

src/controllers/my/Account.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,10 @@ public function show(): Response
3131
$user = auth\CurrentUser::require();
3232

3333
$sub_enabled = \App\Configuration::areSubscriptionsEnabled();
34-
if ($sub_enabled && $user->subscription_account_id && $user->isSubscriptionOverdue()) {
34+
if ($sub_enabled && $user->hasSubscriptionAccount() && $user->isSubscriptionOverdue()) {
3535
$service = new services\Subscriptions();
36-
37-
$expired_at = $service->expiredAt($user->subscription_account_id);
38-
39-
if ($expired_at) {
40-
$user->subscription_expired_at = $expired_at;
41-
$user->save();
42-
} else {
43-
\Minz\Log::error("Can’t get the expired_at for user {$user->id}.");
44-
}
36+
$service->refreshExpiredAt($user);
37+
$user->save();
4538
}
4639

4740
return Response::ok('my/account/show.phtml', [

src/controllers/my/Subscription.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function create(Request $request): Response
4444
return Response::redirect('account');
4545
}
4646

47-
if (!$user->validated_at) {
47+
if (!$user->isValidated()) {
4848
\Minz\Flash::set('error', _('You must verify your account first.'));
4949
return Response::redirect('account');
5050
}
@@ -58,19 +58,16 @@ public function create(Request $request): Response
5858
}
5959

6060
$subscription_service = new services\Subscriptions();
61+
$result = $subscription_service->initAccount($user);
6162

62-
$account = $subscription_service->account($user->email);
63-
if (!$account) {
64-
\Minz\Log::error("Can’t get a subscription account for user {$user->id}.");
63+
if (!$result) {
6564
\Minz\Flash::set(
6665
'error',
6766
_('An error occured when getting you a subscription account, please contact the support.')
6867
);
6968
return Response::redirect('account');
7069
}
7170

72-
$user->subscription_account_id = $account['id'];
73-
$user->subscription_expired_at = $account['expired_at'];
7471
$user->save();
7572

7673
return Response::redirect('account');

src/controllers/my/Validation.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,7 @@ public function create(Request $request): Response
8383

8484
if (\App\Configuration::areSubscriptionsEnabled()) {
8585
$subscriptions_service = new services\Subscriptions();
86-
$account = $subscriptions_service->account($user->email);
87-
if ($account) {
88-
$user->subscription_account_id = $account['id'];
89-
$user->subscription_expired_at = $account['expired_at'];
90-
} else {
91-
\Minz\Log::error("Can’t get a subscription account for user {$user->id}."); // @codeCoverageIgnore
92-
}
86+
$subscriptions_service->initAccount($user);
9387
}
9488

9589
$user->save();
@@ -115,7 +109,7 @@ public function resendEmail(Request $request): Response
115109
{
116110
$user = auth\CurrentUser::require();
117111

118-
if ($user->validated_at) {
112+
if ($user->isValidated()) {
119113
// nothing to do, the user is already validated
120114
return Response::redirect('home');
121115
}

src/jobs/scheduled/InactivityNotifier.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function perform(): void
4040
$mailer = new mailers\Users();
4141

4242
foreach ($inactive_users as $user) {
43-
if ($user->validated_at) {
43+
if ($user->isValidated()) {
4444
$success = $mailer->sendInactivityEmail($user->id);
4545
} else {
4646
$success = true;

src/jobs/scheduled/SubscriptionsSync.php

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,39 +43,16 @@ public function perform(): void
4343
// happen if a previous request failed.
4444
$users = models\User::listBy(['subscription_account_id' => null]);
4545
foreach ($users as $user) {
46-
if (!$user->validated_at) {
46+
if (!$user->isValidated()) {
4747
continue;
4848
}
4949

50-
$account = $subscriptions_service->account($user->email);
51-
if ($account) {
52-
$user->subscription_account_id = $account['id'];
53-
$user->subscription_expired_at = $account['expired_at'];
54-
$user->save();
55-
}
50+
$subscriptions_service->initAccount($user);
51+
$user->save();
5652
}
5753

5854
// Then, synchronize expiration dates.
5955
$users = models\User::listAll();
60-
$account_ids_to_users = array_column($users, null, 'subscription_account_id');
61-
$account_ids = array_keys($account_ids_to_users);
62-
63-
$result = $subscriptions_service->sync($account_ids);
64-
if ($result === null) {
65-
return;
66-
}
67-
68-
foreach ($result as $account_id => $expired_at) {
69-
if (!isset($account_ids_to_users[$account_id])) {
70-
\Minz\Log::error("Subscription account {$account_id} does not exist.");
71-
continue;
72-
}
73-
74-
$user = $account_ids_to_users[$account_id];
75-
if ($user->subscription_expired_at != $expired_at) {
76-
$user->subscription_expired_at = $expired_at;
77-
$user->save();
78-
}
79-
}
56+
$subscriptions_service->sync($users);
8057
}
8158
}

src/models/User.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,15 @@ public function verifyPassword(string $password): bool
693693
*/
694694
public function mustValidateEmail(): bool
695695
{
696-
return !$this->validated_at && $this->created_at < \Minz\Time::ago(1, 'day');
696+
return !$this->isValidated() && $this->created_at < \Minz\Time::ago(1, 'day');
697+
}
698+
699+
/**
700+
* Return whether the account is validated or not.
701+
*/
702+
public function isValidated(): bool
703+
{
704+
return $this->validated_at !== null;
697705
}
698706

699707
/**

0 commit comments

Comments
 (0)