feat: implement repository architecture with smart caching

- Add base repository interfaces and abstract classes
  - Implement separated read/write repositories for Domain and Username models
  - Add intelligent query caching with automatic invalidation
  - Include cache management service and CLI commands
  - Add comprehensive configuration for cache TTL and monitoring
  - Enhance performance through optimized data access patterns
This commit is contained in:
idevakk
2025-11-15 22:11:19 -08:00
parent ea0bc91251
commit 4615d384be
15 changed files with 1928 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
<?php
namespace App\Repositories\Domain\Write;
use App\Models\Domain;
use App\Repositories\WriteRepository;
class DomainWriteRepository extends WriteRepository
{
protected function getCacheTag(): string
{
return 'domains';
}
protected function getReadRepositoryClass(): string
{
return \App\Repositories\Domain\Read\DomainReadRepository::class;
}
public function activateDomain(Domain $domain): bool
{
$domain->is_active = true;
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function deactivateDomain(Domain $domain): bool
{
$domain->is_active = false;
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function updateUsage(Domain $domain): bool
{
$domain->last_used_at = now();
$domain->checked_at = now();
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function updateCheckedAt(Domain $domain): bool
{
$domain->checked_at = now();
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function setExpiration(Domain $domain, ?\DateTime $endsAt = null): bool
{
$domain->ends_at = $endsAt;
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function bulkActivate(array $domainIds): int
{
$updated = Domain::whereIn('id', $domainIds)->update(['is_active' => true]);
$this->clearCache();
return $updated;
}
public function bulkDeactivate(array $domainIds): int
{
$updated = Domain::whereIn('id', $domainIds)->update(['is_active' => false]);
$this->clearCache();
return $updated;
}
public function updateDailyMailboxLimit(Domain $domain, int $limit): bool
{
$domain->daily_mailbox_limit = $limit;
$result = $domain->save();
$this->clearRelatedCache($domain);
return $result;
}
public function createWithDefaults(array $data): Domain
{
$defaults = [
'is_active' => true,
'daily_mailbox_limit' => 100,
'checked_at' => now(),
];
$domainData = array_merge($defaults, $data);
return $this->create($domainData);
}
}