Installation:
composer require cometcult/credit-bundle:dev-master
Add to AppKernel.php:
new CometCult\CreditsBundle\CometCultCreditsBundle(),
First Use Case:
Inject the CreditsManager service and perform basic operations:
$creditsManager = $this->get('comet_cult_credits.manager');
$creditsManager->addCredit(100, 'user123'); // Add 100 credits to user 'user123'
$balance = $creditsManager->getCredit('user123'); // Fetch balance
Where to Look First:
src/CometCult/CreditsBundle/Manager/CreditsManager.php for core logic.Resources/config/services.yml for service configuration.Credit Management:
addCredit($amount, $ownerId) and subtractCredit($amount, $ownerId) for atomic operations.$credit = $creditsManager->createCredit(200, 'abc123', ['type' => 'premium']);
$creditsManager->updateCredit($credit);
Event-Driven Extensions:
CreditsManager to hook into credit operations (e.g., logging, notifications):
# config.yml
services:
app.credits_manager:
class: AppBundle\Service\CustomCreditsManager
parent: comet_cult_credits.manager
Batch Operations:
foreach ($users as $user) {
$creditsManager->addCredit(50, $user->getId());
}
Validation:
Credit entity to add validation (e.g., max/min limits):
$credit = $creditsManager->createCredit(-10, 'user123'); // May fail if negative credits are disallowed.
CreditsManager methods via API Platform or custom controllers.prePersist/preUpdate on Credit to enforce business rules.MongoDB Dependency:
spatie/laravel-activity-log (alternative).Idempotency:
addCredit()/subtractCredit() are not idempotent by default. Handle duplicate operations in your application logic.Concurrency:
Credit entity versioning) or external locks (e.g., Redis) for high-traffic systems.Error Handling:
if ($amount <= 0) {
throw new \InvalidArgumentException("Amount must be positive.");
}
use your_database;
db.credits.find(); // Verify records exist.
comet_cult_credits.manager is properly autowired in Symfony’s container.Custom Credit Types:
Extend the Credit entity to add fields (e.g., expiresAt, description):
// src/AppBundle/Entity/CustomCredit.php
class CustomCredit extends \CometCult\CreditsBundle\Entity\Credit
{
private $metadata;
}
Override Manager:
Subclass CreditsManager to add features (e.g., credit expiration):
// src/AppBundle/Service/CustomCreditsManager.php
class CustomCreditsManager extends \CometCult\CreditsBundle\Manager\CreditsManager
{
public function addCredit($amount, $ownerId, $metadata = [])
{
if ($this->isExpired($metadata)) {
throw new \RuntimeException("Credit expired.");
}
parent::addCredit($amount, $ownerId, $metadata);
}
}
Event Listeners:
Dispatch events (e.g., credit.added) using Symfony’s event dispatcher:
$dispatcher->dispatch(new CreditEvent($credit, 'added'));
config.yml if needed.config.yml:
doctrine_mongodb:
model_managers:
default:
mappings:
CometCultCreditsBundle: ~
How can I help you explore Laravel packages today?