greenter/data
Conjunto de datos de ejemplo para Greenter: entidades y documentos de facturación usados en pruebas (tests). Incluye modelos de comprobantes y recursos relacionados, útil para desarrollar y validar integraciones con el ecosistema Greenter.
Installation Add the package via Composer:
composer require greenter/data
Publish the config (if needed):
php artisan vendor:publish --provider="Greenter\Data\DataServiceProvider"
First Use Case: Storing a Document
Import the Greenter\Data\Document class and create a new document:
use Greenter\Data\Document;
$document = new Document();
$document->setData([
'invoice_number' => 'INV-12345',
'amount' => 100.00,
'customer' => 'John Doe'
]);
$document->save(); // Assumes a default storage adapter (e.g., filesystem/database)
Where to Look First
config/greenter-data.php (if published) for storage adapters and settings.vendor/greenter/data/src/Document.php for core functionality.vendor/greenter/data/src/DataServiceProvider.php for binding interfaces.Document Creation and Storage
Use the Document class to encapsulate data with metadata (e.g., created_at, updated_at):
$document = new Document();
$document->setMetadata(['user_id' => auth()->id()]);
$document->setData($invoiceArray);
$document->save(); // Uses the configured storage adapter
Retrieving Documents Fetch documents by ID or query:
// By ID
$document = Document::find($id);
// Query builder (if adapter supports it)
$documents = Document::where('invoice_number', 'LIKE', 'INV-%')->get();
Custom Storage Adapters
Implement Greenter\Data\Contracts\StorageAdapter for custom backends (e.g., S3, database):
class S3Adapter implements StorageAdapter {
public function save(Document $document) { /* ... */ }
public function find($id) { /* ... */ }
}
Bind the adapter in the service provider:
$this->app->bind(
StorageAdapter::class,
function () { return new S3Adapter(); }
);
Event Handling
Listen for document events (e.g., document.saved):
Document::saved(function ($document) {
// Send notification, log, etc.
});
Document as a lightweight alternative to Eloquent models for non-relational data.return response()->json($document->toArray());
$validator = Validator::make($document->getData(), [
'invoice_number' => 'required|string',
'amount' => 'required|numeric'
]);
Deprecated Package
Storage Adapter Assumptions
config/greenter-data.php:
'default' => env('DATA_DRIVER', 'file'),
'drivers' => [
'file' => Greenter\Data\Adapters\FileAdapter::class,
],
No Built-in Querying
FileAdapter may not support querying. Use a database adapter (e.g., DatabaseAdapter) for complex queries.Metadata Overrides
created_at/updated_at manually; use setMetadata() for custom fields.StorageAdapter. Use:
$this->app->bind(StorageAdapter::class, function () {
return new CustomAdapter(); // Ensure this class exists
});
setData() accepts arrays or JSON-serializable objects.Custom Document Types
Extend Document for domain-specific logic:
class InvoiceDocument extends Document {
public function calculateTax() { /* ... */ }
}
Add Fields to Metadata
Override getMetadata() to include additional fields:
public function getMetadata() {
return array_merge(parent::getMetadata(), ['tax_rate' => $this->taxRate]);
}
Hooks for Pre/Post Save Use events or traits to inject logic:
Document::creating(function ($document) {
$document->setMetadata(['ip' => request()->ip()]);
});
Document::insert($documentsArray);
$document = Cache::remember("document_{$id}", now()->addHours(1), function () use ($id) {
return Document::find($id);
});
```markdown
### Config Quirks
- **Environment Variables**: The package may rely on `.env` for adapter settings (e.g., `DATA_DRIVER`). Define these explicitly:
```env
DATA_DRIVER=database
DB_DOCUMENTS_CONNECTION=mysql
php artisan vendor:publish --tag=greenter-data-config
How can I help you explore Laravel packages today?