Skip to content
7 changes: 3 additions & 4 deletions app/Actions/WaitlistSignups/CountWaitlistSignupsAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@

final class CountWaitlistSignupsAction
{
public function __invoke(): int
public function handle(): int
{
/** @phpstan-ignore cast.int */
return (int) Cache::remember(
return Cache::remember(
'waitlistSignupsCount',
now()->addWeek(),
static fn () => WaitlistSignup::query()->count()
static fn (): int => WaitlistSignup::query()->count()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ final class PaginateWaitlistSignupsAction
/**
* @return LengthAwarePaginator<int, WaitlistSignup>
*/
public function __invoke(int $maxItemsPerPage = 10): LengthAwarePaginator
public function handle(int $maxItemsPerPage = 10): LengthAwarePaginator
{
return WaitlistSignup::query()
->latest('id')
Expand Down
2 changes: 1 addition & 1 deletion app/Actions/WaitlistSignups/StoreWaitlistSignupAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

final class StoreWaitlistSignupAction
{
public function __invoke(WaitlistSignupDTO $dto): WaitlistSignup
public function handle(WaitlistSignupDTO $dto): WaitlistSignup
{
$waitlistSignup = WaitlistSignup::create($dto->toArray());

Expand Down
3 changes: 1 addition & 2 deletions app/DTOs/WaitlistSignups/WaitlistSignupDTO.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
*/
final readonly class WaitlistSignupDTO implements Arrayable
{
public function __construct(
private function __construct(
public ?string $firstName,
public ?string $lastName,
public string $email
Expand All @@ -32,7 +32,6 @@ public static function fromArray(array $data): self

public static function fromModel(WaitlistSignup $waitlistSignup): self
{
/** @phpstan-ignore argument.type */
return self::fromArray($waitlistSignup->toArray());
}

Expand Down
2 changes: 0 additions & 2 deletions app/Http/Controllers/Settings/PasswordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ public function update(Request $request): RedirectResponse
'password' => ['required', Password::defaults(), 'confirmed'],
]);

/** @phpstan-ignore method.nonObject */
$request->user()->update([
/** @phpstan-ignore offsetAccess.nonOffsetAccessible */
'password' => $validated['password'],
]);

Expand Down
9 changes: 3 additions & 6 deletions app/Http/Controllers/Settings/ProfileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,14 @@ public function edit(Request $request): Response
*/
public function update(ProfileUpdateRequest $request): RedirectResponse
{
/** @phpstan-ignore method.nonObject */
$request->user()->fill($request->validated());

/** @phpstan-ignore method.nonObject */
if ($request->user()->isDirty('email')) {
/** @phpstan-ignore property.nonObject */
$request->user()->email_verified_at = null;
$request->user()->fill([
'email_verified_at' => null,
]);
}

/** @phpstan-ignore method.nonObject */
$request->user()->save();

return to_route('profile.edit');
Expand All @@ -60,7 +58,6 @@ public function destroy(Request $request): RedirectResponse

Auth::logout();

/** @phpstan-ignore method.nonObject */
$user->delete();

$request->session()->invalidate();
Expand Down
4 changes: 2 additions & 2 deletions app/Http/Controllers/WaitlistSignupController.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ final class WaitlistSignupController extends Controller

public function index(PaginateWaitlistSignupsAction $action): Response
{
$waitlistSignups = $action(self::MAX_ITEMS_PER_PAGE);
$waitlistSignups = $action->handle(self::MAX_ITEMS_PER_PAGE);

return Inertia::render('dashboard/admin/Signups', [
'waitlistSignups' => WaitlistSignupResource::collection($waitlistSignups),
Expand All @@ -34,7 +34,7 @@ public function store(
StoreWaitlistSignupRequest $request,
StoreWaitlistSignupAction $action
): RedirectResponse {
$action($request->toDto());
$action->handle($request->toDto());

return back();
}
Expand Down
3 changes: 1 addition & 2 deletions app/Http/Middleware/HandleInertiaRequests.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public function version(Request $request): ?string
*/
public function share(Request $request): array
{
/** @phpstan-ignore-next-line */
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');

return [
Expand All @@ -56,7 +55,7 @@ public function share(Request $request): array
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
'signupsCount' => fn () => Number::forHumans(
number: ($this->countWaitlistSignupsAction)(),
number: $this->countWaitlistSignupsAction->handle(),
abbreviate: true
),
];
Expand Down
1 change: 0 additions & 1 deletion app/Http/Requests/StoreWaitlistSignupRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public function toDto(): WaitlistSignupDTO
{
$data = $this->validated();

/** @phpstan-ignore argument.type */
return WaitlistSignupDTO::fromArray($data);
}
}
1 change: 1 addition & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ final class User extends Authenticatable
'name',
'email',
'password',
'email_verified_at',
];

/**
Expand Down
29 changes: 8 additions & 21 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"clsx": "^2.1.1",
"laravel-vite-plugin": "^2.0.0",
"lucide-vue-next": "^0.468.0",
"playwright": "^1.56.1",
"playwright": "^1.61.1",
"reka-ui": "^2.4.1",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.1",
Expand Down
2 changes: 1 addition & 1 deletion phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ parameters:
paths:
- app/

level: max
level: 7
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
it('returns zero when no signups exist', function () {
$action = new CountWaitlistSignupsAction();

$count = $action();
$count = $action->handle();

expect($count)->toBe(0);
});
Expand All @@ -24,7 +24,7 @@

$action = new CountWaitlistSignupsAction();

$count = $action();
$count = $action->handle();

expect($count)->toBe(5);
});
Expand All @@ -34,26 +34,26 @@

$action = new CountWaitlistSignupsAction();

$firstCount = $action();
$firstCount = $action->handle();
expect($firstCount)->toBe(3);

WaitlistSignupFactory::times(2)->create();

$secondCount = $action();
$secondCount = $action->handle();
expect($secondCount)->toBe(3);
});

it('returns fresh count after cache is cleared', function () {
WaitlistSignupFactory::times(3)->create();

$action = new CountWaitlistSignupsAction();
$firstCount = $action();
$firstCount = $action->handle();

WaitlistSignupFactory::times(2)->create();

Cache::forget('waitlistSignupsCount');

$secondCount = $action();
$secondCount = $action->handle();

expect($firstCount)->toBe(3);
expect($secondCount)->toBe(5);
Expand All @@ -64,7 +64,7 @@

$action = new CountWaitlistSignupsAction();

$count = $action();
$count = $action->handle();

expect($count)->toBe(1000);
});
Expand All @@ -74,7 +74,7 @@

$action = new CountWaitlistSignupsAction();

$count = $action();
$count = $action->handle();

expect($count)->toBeInt();
});
Expand All @@ -83,7 +83,7 @@
WaitlistSignupFactory::times(3)->create();

$action = new CountWaitlistSignupsAction();
$action();
$action->handle();

expect(Cache::has('waitlistSignupsCount'))->toBeTrue();
});
Expand All @@ -93,7 +93,7 @@
WaitlistSignupFactory::times(2)->create();

$action = new CountWaitlistSignupsAction();
$action();
$action->handle();

expect(Cache::has('waitlistSignupsCount'))->toBeTrue();

Expand Down
Loading
Loading