---
name: valec3/backend-architecture-repository-pattern
source: https://app.decimal.ai/s/valec3-backend-architecture-repository-pattern@1/SKILL.md
source_sha256: 9c70ef0b42ad
---

# Backend Architecture Repository Pattern

## When to use this skill
- Abstracting data access
- Multiple data sources
- Testability
- Complex queries

## Workflow
- [ ] Create repository interface
- [ ] Implement repository
- [ ] Inject into services
- [ ] Abstract query logic
- [ ] Keep repositories focused

## Instructions

### Interface
```php
<?php

namespace App\Repositories;

interface UserRepositoryInterface
{
    public function find(int $id): ?User;
    public function findByEmail(string $email): ?User;
    public function save(User $user): User;
}
```

### Implementation
```php
<?php

namespace App\Repositories;

class UserRepository implements UserRepositoryInterface
{
    public function __construct(
        private UserModel $model
    ) {}

    public function find(int $id): ?User
    {
        return $this->model->find($id);
    }

    public function findByEmail(string $email): ?User
    {
        return $this->model->where('email', $email)->first();
    }
}
```

## Resources
- Abstract data access
- Easy to mock for testing
- Switch data sources easily