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,65 @@
<?php
namespace App\Providers;
use App\Repositories\Contracts\ReadRepositoryInterface;
use App\Repositories\Contracts\WriteRepositoryInterface;
use App\Repositories\Domain\Read\DomainReadRepository;
use App\Repositories\Domain\Write\DomainWriteRepository;
use App\Repositories\Username\Read\UsernameReadRepository;
use App\Repositories\Username\Write\UsernameWriteRepository;
use Illuminate\Support\ServiceProvider;
class RepositoryServiceProvider extends ServiceProvider
{
public function register(): void
{
// Domain Repositories
$this->app->bind(
ReadRepositoryInterface::class.'\\Domain',
DomainReadRepository::class
);
$this->app->bind(
WriteRepositoryInterface::class.'\\Domain',
DomainWriteRepository::class
);
$this->app->singleton(DomainReadRepository::class, function ($app) {
return new DomainReadRepository($app->make(\App\Models\Domain::class), $app->make('cache'));
});
$this->app->singleton(DomainWriteRepository::class, function ($app) {
return new DomainWriteRepository($app->make(\App\Models\Domain::class), $app->make('cache'));
});
// Username Repositories
$this->app->bind(
ReadRepositoryInterface::class.'\\Username',
UsernameReadRepository::class
);
$this->app->bind(
WriteRepositoryInterface::class.'\\Username',
UsernameWriteRepository::class
);
$this->app->singleton(UsernameReadRepository::class, function ($app) {
return new UsernameReadRepository($app->make(\App\Models\Username::class), $app->make('cache'));
});
$this->app->singleton(UsernameWriteRepository::class, function ($app) {
return new UsernameWriteRepository($app->make(\App\Models\Username::class), $app->make('cache'));
});
}
public function provides(): array
{
return [
DomainReadRepository::class,
DomainWriteRepository::class,
UsernameReadRepository::class,
UsernameWriteRepository::class,
];
}
}