Task
Make the cloud plugin the local mirror of Stripe subscription state, so the app can read subscription status without calling Stripe on the request path.
Actions
- Require
laravel/cashier in the cloud plugin composer (not the root app).
- Add a cloud-owned
BillingCustomer model (Cashier Billable, one-to-one with user_id); point cashier.model at it so the core User model stays free of any billing trait or columns.
- Ship the Cashier migrations inside the plugin; register the Cashier webhook route; add a checkout endpoint for the existing plans.
Acceptance
- A Stripe test checkout creates/updates local subscription rows via the webhook.
- Subscription state resolves from local tables with no Stripe call on the request path.
- The core
User model has no billing trait or columns.
Task
Make the cloud plugin the local mirror of Stripe subscription state, so the app can read subscription status without calling Stripe on the request path.
Actions
laravel/cashierin the cloud plugin composer (not the root app).BillingCustomermodel (CashierBillable, one-to-one withuser_id); pointcashier.modelat it so the coreUsermodel stays free of any billing trait or columns.Acceptance
Usermodel has no billing trait or columns.