feat(packages): implement package-based business model

This commit is contained in:
Codex Agent
2025-09-26 22:13:56 +02:00
parent 6fc36ebaf4
commit 0a643c3e4d
54 changed files with 3301 additions and 282 deletions

View File

@@ -7,7 +7,8 @@ use App\Http\Controllers\Api\Tenant\TaskController;
use App\Http\Controllers\Api\Tenant\PhotoController;
use App\Http\Controllers\OAuthController;
use App\Http\Controllers\RevenueCatWebhookController;
use App\Http\Controllers\Tenant\CreditController;
use App\Http\Controllers\Api\PackageController;
use App\Http\Controllers\Api\TenantPackageController;
use Illuminate\Support\Facades\Route;
Route::prefix('v1')->name('api.v1.')->group(function () {
@@ -86,12 +87,22 @@ Route::prefix('v1')->name('api.v1.')->group(function () {
->name('tenant.settings.validate-domain');
});
Route::prefix('credits')->group(function () {
Route::get('balance', [CreditController::class, 'balance'])->name('tenant.credits.balance');
Route::get('ledger', [CreditController::class, 'ledger'])->name('tenant.credits.ledger');
Route::get('history', [CreditController::class, 'history'])->name('tenant.credits.history');
Route::post('purchase', [CreditController::class, 'purchase'])->name('tenant.credits.purchase');
Route::post('sync', [CreditController::class, 'sync'])->name('tenant.credits.sync');
Route::prefix('packages')->group(function () {
Route::get('/', [PackageController::class, 'index'])->name('packages.index');
Route::post('/purchase', [PackageController::class, 'purchase'])->name('packages.purchase');
});
Route::prefix('stripe')->group(function () {
Route::post('/payment-intent', [StripeController::class, 'createPaymentIntent'])->name('stripe.payment-intent');
Route::post('/subscription', [StripeController::class, 'createSubscription'])->name('stripe.subscription');
});
Route::prefix('tenant/packages')->group(function () {
Route::get('/', [TenantPackageController::class, 'index'])->name('tenant.packages.index');
});
});
// Stripe Webhook (no auth)
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook'])
->name('stripe.webhook');
});