create-cqrs-querieslisted
Install: claude install-skill jeffsenso/prestashop-skills
# create-cqrs-queries
Read [CQRS/CONTEXT.md](../../CONTEXT.md) for conventions (scalar inputs/VO getters, QueryResult scalar-only rule).
## 1. Get-for-editing query
Create `src/Core/Domain/{Domain}/Query/Get{Domain}ForEditing.php`:
- Constructor takes `int $id` (scalar)
- Getter returns VO: `getId(): {Domain}Id`
- Queries are read-only data objects — no side effects
## 2. Result DTO
Create `src/Core/Domain/{Domain}/QueryResult/Editable{Domain}.php`:
- Constructor parameters: all fields the edit form needs to pre-fill (scalar types only — see CONTEXT.md)
- Public getter for every field
- Immutable: no setters, all values set at construction
**Reference:** `src/Core/Domain/Tax/QueryResult/EditableTax.php` (simple), `src/Core/Domain/Manufacturer/QueryResult/EditableManufacturer.php` (with associations)
## 3. List query (assess first)
Most PS grids use `SearchCriteria` + grid `QueryBuilder` directly — no explicit CQRS query class needed.
Check the domain convention before creating a list query:
- If the domain uses `SearchCriteria` + `QueryBuilder` in the grid: skip this step
- If the domain uses an explicit query: create `Get{Domain}sForListing.php` with `SearchCriteria` parameter
**Reference:** Most domains (Tax, Manufacturer, Category) use the grid QueryBuilder pattern without an explicit list query.
## 4. Query handler interfaces
Create in `src/Core/Domain/{Domain}/QueryHandler/`:
- `Get{Domain}ForEditingHandlerInterface` with `handle(Get{Domain}ForEditing $que