removed all references to credits. now credits are completely replaced by addons.
This commit is contained in:
@@ -180,12 +180,10 @@ class EventController extends Controller
|
||||
'gallery_expires_at' => $package->gallery_days ? now()->addDays($package->gallery_days) : null,
|
||||
]);
|
||||
|
||||
if ($package->isReseller()) {
|
||||
$note = sprintf('Event #%d created (%s)', $event->id, $event->name);
|
||||
$note = sprintf('Event #%d created (%s)', $event->id, $event->name);
|
||||
|
||||
if (! $tenant->consumeEventAllowance(1, 'event.create', $note)) {
|
||||
throw new HttpException(402, 'Insufficient credits or package allowance.');
|
||||
}
|
||||
if (! $tenant->consumeEventAllowance(1, 'event.create', $note)) {
|
||||
throw new HttpException(402, 'Insufficient package allowance.');
|
||||
}
|
||||
|
||||
return $event;
|
||||
@@ -220,7 +218,7 @@ class EventController extends Controller
|
||||
'eventType',
|
||||
'photos' => fn ($query) => $query->with('likes')->latest(),
|
||||
'tasks',
|
||||
'tenant' => fn ($query) => $query->select('id', 'name', 'event_credits_balance'),
|
||||
'tenant' => fn ($query) => $query->select('id', 'name'),
|
||||
'eventPackages' => fn ($query) => $query
|
||||
->with(['package', 'addons'])
|
||||
->orderByDesc('purchased_at')
|
||||
|
||||
@@ -49,10 +49,6 @@ class SettingsController extends Controller
|
||||
'defaults' => $defaults,
|
||||
'preferences' => $resolved,
|
||||
'overrides' => $tenant->notification_preferences ?? null,
|
||||
'meta' => [
|
||||
'credit_warning_sent_at' => $tenant->credit_warning_sent_at?->toIso8601String(),
|
||||
'credit_warning_threshold' => $tenant->credit_warning_threshold,
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
@@ -80,10 +76,6 @@ class SettingsController extends Controller
|
||||
'data' => [
|
||||
'preferences' => $resolved,
|
||||
'overrides' => $tenant->notification_preferences,
|
||||
'meta' => [
|
||||
'credit_warning_sent_at' => $tenant->credit_warning_sent_at?->toIso8601String(),
|
||||
'credit_warning_threshold' => $tenant->credit_warning_threshold,
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -89,7 +89,6 @@ class TenantAdminTokenController extends Controller
|
||||
'tenant_id' => $tenant->id,
|
||||
'name' => $tenant->name,
|
||||
'slug' => $tenant->slug,
|
||||
'event_credits_balance' => $tenant->event_credits_balance,
|
||||
'features' => $tenant->features,
|
||||
];
|
||||
}
|
||||
@@ -141,7 +140,6 @@ class TenantAdminTokenController extends Controller
|
||||
'slug' => $tenant->slug,
|
||||
'email' => $tenant->contact_email,
|
||||
'fullName' => $fullName,
|
||||
'event_credits_balance' => $tenant->event_credits_balance,
|
||||
'active_reseller_package_id' => $activePackage?->id,
|
||||
'remaining_events' => $activePackage?->remaining_events ?? 0,
|
||||
'package_expires_at' => $activePackage?->expires_at,
|
||||
|
||||
@@ -77,7 +77,6 @@ class RegisteredUserController extends Controller
|
||||
'email' => $request->email,
|
||||
'is_active' => true,
|
||||
'is_suspended' => false,
|
||||
'event_credits_balance' => 0,
|
||||
'subscription_tier' => 'free',
|
||||
'subscription_expires_at' => null,
|
||||
'settings' => json_encode([
|
||||
|
||||
@@ -100,7 +100,6 @@ class CheckoutController extends Controller
|
||||
'email' => $validated['email'],
|
||||
'is_active' => true,
|
||||
'is_suspended' => false,
|
||||
'event_credits_balance' => 0,
|
||||
'subscription_tier' => 'free',
|
||||
'subscription_expires_at' => null,
|
||||
'settings' => json_encode([
|
||||
|
||||
@@ -137,7 +137,6 @@ class CheckoutGoogleController extends Controller
|
||||
'contact_email' => $email,
|
||||
'is_active' => true,
|
||||
'is_suspended' => false,
|
||||
'event_credits_balance' => 0,
|
||||
'subscription_tier' => 'free',
|
||||
'subscription_status' => 'free',
|
||||
'subscription_expires_at' => null,
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Tenant;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Tenant\CreditLedgerResource;
|
||||
use App\Http\Resources\Tenant\EventPurchaseResource;
|
||||
use App\Models\EventCreditsLedger;
|
||||
use App\Models\EventPurchase;
|
||||
use App\Models\Tenant;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
|
||||
class CreditController extends Controller
|
||||
{
|
||||
public function balance(Request $request): JsonResponse
|
||||
{
|
||||
$tenant = $this->resolveTenant($request);
|
||||
|
||||
return response()->json([
|
||||
'balance' => $tenant->event_credits_balance,
|
||||
'free_event_granted_at' => $tenant->free_event_granted_at,
|
||||
]);
|
||||
}
|
||||
|
||||
public function ledger(Request $request)
|
||||
{
|
||||
$tenant = $this->resolveTenant($request);
|
||||
|
||||
$ledgers = EventCreditsLedger::where('tenant_id', $tenant->id)
|
||||
->orderByDesc('created_at')
|
||||
->paginate(20);
|
||||
|
||||
return CreditLedgerResource::collection($ledgers);
|
||||
}
|
||||
|
||||
public function history(Request $request)
|
||||
{
|
||||
$tenant = $this->resolveTenant($request);
|
||||
|
||||
$purchases = EventPurchase::where('tenant_id', $tenant->id)
|
||||
->orderByDesc('purchased_at')
|
||||
->paginate(20);
|
||||
|
||||
return EventPurchaseResource::collection($purchases);
|
||||
}
|
||||
|
||||
public function purchase(Request $request): JsonResponse
|
||||
{
|
||||
$tenant = $this->resolveTenant($request);
|
||||
|
||||
$data = $request->validate([
|
||||
'package_id' => ['required', 'string', 'max:255'],
|
||||
'credits_added' => ['required', 'integer', 'min:1'],
|
||||
'platform' => ['nullable', 'string', 'max:32'],
|
||||
'transaction_id' => ['nullable', 'string', 'max:255'],
|
||||
'subscription_active' => ['sometimes', 'boolean'],
|
||||
]);
|
||||
|
||||
$purchase = EventPurchase::create([
|
||||
'tenant_id' => $tenant->id,
|
||||
'events_purchased' => $data['credits_added'],
|
||||
'amount' => 0,
|
||||
'currency' => 'EUR',
|
||||
'provider' => $data['platform'] ?? 'tenant-app',
|
||||
'external_receipt_id' => $data['transaction_id'] ?? null,
|
||||
'status' => 'completed',
|
||||
'purchased_at' => now(),
|
||||
]);
|
||||
|
||||
$note = 'Package: '.$data['package_id'];
|
||||
$incremented = $tenant->incrementCredits($data['credits_added'], 'purchase', $note, $purchase->id);
|
||||
|
||||
if (! $incremented) {
|
||||
throw new HttpException(500, 'Unable to record credit purchase');
|
||||
}
|
||||
|
||||
if (array_key_exists('subscription_active', $data)) {
|
||||
$tenant->update([
|
||||
'subscription_tier' => $data['subscription_active'] ? 'pro' : $tenant->subscription_tier,
|
||||
]);
|
||||
}
|
||||
|
||||
$tenant->refresh();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Purchase recorded',
|
||||
'balance' => $tenant->event_credits_balance,
|
||||
'subscription_active' => (bool) ($data['subscription_active'] ?? false),
|
||||
], 201);
|
||||
}
|
||||
|
||||
public function sync(Request $request): JsonResponse
|
||||
{
|
||||
$tenant = $this->resolveTenant($request);
|
||||
|
||||
$data = $request->validate([
|
||||
'balance' => ['nullable', 'integer', 'min:0'],
|
||||
'subscription_active' => ['sometimes', 'boolean'],
|
||||
'last_sync' => ['nullable', 'date'],
|
||||
]);
|
||||
|
||||
if (array_key_exists('subscription_active', $data)) {
|
||||
$tenant->update([
|
||||
'subscription_tier' => $data['subscription_active'] ? 'pro' : ($tenant->subscription_tier ?? 'free'),
|
||||
]);
|
||||
}
|
||||
|
||||
// Server remains source of truth for balance; echo current state back to client
|
||||
return response()->json([
|
||||
'balance' => $tenant->event_credits_balance,
|
||||
'subscription_active' => (bool) ($tenant->active_subscription ?? false),
|
||||
'server_time' => now()->toIso8601String(),
|
||||
]);
|
||||
}
|
||||
|
||||
private function resolveTenant(Request $request): Tenant
|
||||
{
|
||||
$user = $request->user();
|
||||
if ($user && isset($user->tenant) && $user->tenant instanceof Tenant) {
|
||||
return $user->tenant;
|
||||
}
|
||||
|
||||
$tenantId = $request->attributes->get('tenant_id');
|
||||
if (! $tenantId && $user && isset($user->tenant_id)) {
|
||||
$tenantId = $user->tenant_id;
|
||||
}
|
||||
|
||||
if (! $tenantId) {
|
||||
throw new HttpException(401, 'Unauthenticated');
|
||||
}
|
||||
|
||||
return Tenant::findOrFail($tenantId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user