Install
$ agentstack add skill-jeffsenso-prestashop-skills-create-doctrine-repository ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
create-doctrine-repository
See [CQRS/CONTEXT.md](../../CONTEXT.md#repository) for conventions (stateless, no Context dependency, multistore tier model, typed exceptions).
1. Choose the base class
Create src/Adapter/{Domain}/{Domain}Repository.php. Choose the base class based on the multistore tier table in CONTEXT.md.
2. Core methods
Implement these methods (adapt naming to your domain):
get{Domain}({Domain}Id $id): {LegacyObjectModel}— loads the ObjectModel, throws{Domain}NotFoundExceptionif not foundcreate(...): {Domain}Id— calls ObjectModelsave()oradd(), wraps in try/catch, returns new IDupdate(...)— calls ObjectModelsave()orupdate()delete({Domain}Id $id)— deletes the entity, respects multistore if applicable
Reference: src/Adapter/Tax/CommandHandler/ uses a simple repository pattern, src/Adapter/Carrier/CommandHandler/ uses AbstractMultiShopObjectModelRepository
3. Multistore pattern (when using AbstractMultiShopObjectModelRepository)
- Receive
ShopConstraintas a method parameter — never read it from Context - Call
$shopIds = $this->getShopIdsByConstraint($shopConstraint)at the start of every write - Iterate
$shopIdsand apply the write for each shop context - Modes:
ShopConstraint::allShops(),ShopConstraint::shop($shopId),ShopConstraint::shopGroup($groupId) - Single-shop installs still go through this path (returns array with one ID)
4. Sub-resource methods (if applicable)
For entities with has-many sub-resources, two strategies:
Atomic replace (simpler)
set{SubResource}s({Domain}Id, array $items)— delete all existing rows, insert new set- Wrap in transaction — partial replace corrupts data
Incremental update (cleaner)
- Compare existing rows with new collection, apply only changes
- Preferred when sub-resources have their own identity
Rules
Conventions (stateless, no Context, typed exceptions) are in [CQRS/CONTEXT.md](../../CONTEXT.md#repository). Skill-specific reminders:
- Never use
Db::getInstance()— use Doctrine DBAL or ObjectModel methods - Never hard-code
Context::getContext()->shop->id— receive shop as parameter
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: jeffsenso
- Source: jeffsenso/prestashop-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.