Data Repository
Purpose
Generate a repository class that extends BaseRepository from @starter/foundation-repositories with multi-tenancy support, transaction patterns, and Testcontainers for integration testing.
When to Use
- •Creating data access layer for new entities
- •Adding complex query methods to repositories
- •Implementing tenant-scoped data access
- •Creating repositories with proper test coverage
What It Generates
Directory Structure
code
apps/api/src/modules/{feature}/repositories/
├── {entity}.repository.ts
└── index.ts
Patterns Enforced
BaseRepository Extension
Repositories must extend BaseRepository<T> from @starter/foundation-repositories:
- •Inherits CRUD methods (findById, findAll, create, update, delete)
- •All methods accept
tenantIdparameter - •Transaction support via
db.transaction()
Multi-Tenancy
- •All queries include
WHERE organization_id = tenantId - •All methods validate tenant access
- •Cross-tenant queries throw
ForbiddenException
Transaction Support
- •Multi-step writes use
db.transaction(async (tx) => {...}) - •All operations within transaction use
txinstead ofdb - •Transactions rollback on error
Testcontainers Testing
- •Integration tests use real PostgreSQL via Testcontainers
- •Unique test data per test
- •Cleanup after each test
- •Tenant isolation tests
Usage Example
bash
/skill data-repository --name=User --table=users --methods='findByEmail,searchByName,findByIdWithProfile'
Related Files
- •Feature CQRS - Complete CQRS feature with repository
- •Data Migration - Database schema for repository
- •Test Integration - Integration tests