performance: Caching, deferred Tracking & externe Timeouts (H7, M12, M13)
- Navigations-Chrome (CategoryNavigation), Suche- und Newsroom-Seitendaten 300s gecacht; gemeinsamer WebPageCache-Helper (eine TTL/Key-Konvention). - Cache-Poisoning über ?page= geschlossen (Key an Paginator ausgerichtet, kein withQueryString im Cache); Newsrooms cachet nur den ungefilterten Fall und die ersten Seiten (kein unbegrenzter Key-Raum). - Detailseiten schreiben Hits/View-Events deferred nach der Response (M12); OpenAI-/Markt-/USt-ID-Aufrufe mit Connect-Timeouts und begrenzten Retries; Admin-Memo-Caches konsistent invalidiert. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
5a492926dd
commit
23cbd0bfe2
18 changed files with 419 additions and 39 deletions
|
|
@ -49,6 +49,25 @@ test('once the free quota is empty the overflow draws one credit per check', fun
|
|||
expect($this->wallet->balance($user))->toBe(4);
|
||||
});
|
||||
|
||||
test('stale user instances cannot consume the same final free review check', function () {
|
||||
$user = User::factory()->create();
|
||||
$this->wallet->credit($user, 5);
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$this->service->recordCheck($user);
|
||||
}
|
||||
|
||||
$firstRequestUser = $user->fresh();
|
||||
$secondRequestUser = $user->fresh();
|
||||
|
||||
$lastFreeCheck = $this->service->recordCheck($firstRequestUser);
|
||||
$overflowCheck = $this->service->recordCheck($secondRequestUser);
|
||||
|
||||
expect($lastFreeCheck->source)->toBe(ReviewCheckSource::Free)
|
||||
->and($overflowCheck->source)->toBe(ReviewCheckSource::Credit)
|
||||
->and($this->wallet->balance($user))->toBe(4);
|
||||
});
|
||||
|
||||
test('overflow without enough credits throws and records nothing', function () {
|
||||
$user = User::factory()->create();
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue