From acc
Generates PHP 8.4 read/write database connection proxy with query routing to replicas, transaction-aware routing, write protection, replica health checks, and unit tests.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acc:create-read-write-proxyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates database connection proxy infrastructure for read/write splitting and replica routing.
Creates database connection proxy infrastructure for read/write splitting and replica routing.
| Scenario | Example |
|---|---|
| High read load | Route SELECT queries to replicas |
| Database scaling | Distribute reads across multiple replicas |
| Write protection | Ensure writes go to primary only |
| Transaction safety | Route all queries in transaction to primary |
Path: src/Infrastructure/Database/
ReadWriteConnectionInterface.php — Connection contractConnectionConfig.php — Configuration value objectConnectionRole.php — Enum (Primary, Replica)Path: src/Infrastructure/Database/
ReadWriteConnectionProxy.php — Query routing proxyPath: src/Infrastructure/Database/
ReplicaHealthChecker.php — Replica availability monitorConnectionConfigTest.php — Configuration validation testsReadWriteConnectionProxyTest.php — Routing behavior tests| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Database/ |
| Unit Tests | tests/Unit/Infrastructure/Database/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | ReadWriteConnectionInterface | ReadWriteConnectionInterface |
| Proxy | ReadWriteConnectionProxy | ReadWriteConnectionProxy |
| Config VO | ConnectionConfig | ConnectionConfig |
| Role Enum | ConnectionRole | ConnectionRole::Primary |
| Health Checker | ReplicaHealthChecker | ReplicaHealthChecker |
| Test | {ClassName}Test | ReadWriteConnectionProxyTest |
interface ReadWriteConnectionInterface
{
/** @return list<array<string, mixed>> */
public function query(string $sql, array $params = []): array;
public function execute(string $sql, array $params = []): int;
public function beginTransaction(): void;
public function commit(): void;
public function rollback(): void;
public function inTransaction(): bool;
}
final readonly class ConnectionConfig
{
/** @param list<string> $replicaDsns */
public function __construct(
public string $primaryDsn,
public array $replicaDsns = [],
public bool $stickyAfterWrite = true
) {}
}
final class ReadWriteConnectionProxy implements ReadWriteConnectionInterface
{
public function query(string $sql, array $params = []): array;
public function execute(string $sql, array $params = []): int;
public function beginTransaction(): void;
public function commit(): void;
public function rollback(): void;
}
$config = new ConnectionConfig(
primaryDsn: 'mysql:host=primary.db;dbname=app',
replicaDsns: [
'mysql:host=replica1.db;dbname=app',
'mysql:host=replica2.db;dbname=app',
],
stickyAfterWrite: true
);
$connection = new ReadWriteConnectionProxy($config, $pdoFactory, $healthChecker);
// Routed to replica
$users = $connection->query('SELECT * FROM users WHERE active = ?', [1]);
// Routed to primary
$connection->execute('UPDATE users SET name = ? WHERE id = ?', ['John', 1]);
// After write, reads also go to primary (sticky)
$user = $connection->query('SELECT * FROM users WHERE id = ?', [1]);
query(SQL) ──→ Is SELECT?
│ │
YES NO
│ │
In transaction? ──→ Primary
│
Sticky after write? ──→ Primary
│
Pick healthy replica ──→ Replica
│
No healthy replicas? ──→ Primary (fallback)
| Anti-pattern | Problem | Solution |
|---|---|---|
| Read-after-write to replica | Stale data returned | Use sticky connection |
| No health checks | Route to dead replica | Periodic health monitoring |
| Replica in transaction | Inconsistent reads | All transaction queries to primary |
| Single replica | No load distribution | Support multiple replicas |
| No fallback | Failure when all replicas down | Fall back to primary |
| SELECT FOR UPDATE to replica | Locking on read-only connection | Detect locking queries |
For complete PHP templates and examples, see:
references/templates.md — ConnectionInterface, Proxy, Config, HealthChecker templatesreferences/examples.md — Repository integration examples and testsnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accGenerates PHP 8.4 Proxy pattern implementations for lazy loading, caching, access control, and logging. Includes subject interfaces, proxies, and unit tests in domain-driven project paths.
Builds PHP 8.3+ applications with Laravel/Symfony, strict typing, PHPStan level 9, and PSR standards. Creates typed DTOs, controllers, migrations, tests, and REST/GraphQL APIs.
Builds PHP 8.3+ applications with Laravel or Symfony, enforcing strict typing, PHPStan level 9, PSR standards, and async patterns. Scaffolds controllers, migrations, DTOs, tests, and REST/GraphQL APIs.