1. Updated UpdateStripeSettingsRequest - Added publishable_key field
2. Updated update_stripe_settings endpoint - Now validates and stores:
- stripe_publishable_key (not encrypted - it's public)
- stripe_secret_key (encrypted)
- stripe_webhook_secret (encrypted)
- Also validates that publishable and secret keys are from the same environment (both test or both live)
3. Added new public endpoint GET /api/config/stripe - Returns the publishable key to the frontend (no auth required since it's meant to be public)
4. Updated get_stripe_status endpoint - Now includes publishable_key_prefix and publishable_key_set in the response
- Added get_directory_config() and save_directory_config() helper functions
- Created 4 new endpoints:
- GET /api/directory/config - Public endpoint for frontend
- GET /api/admin/directory/config - Admin view with metadata
- PUT /api/admin/directory/config - Update configuration
- POST /api/admin/directory/config/reset - Reset to defaults
- Fixed a bug: Changed SystemSettings.key → SystemSettings.setting_key (correct column name)
- Added JSON serialization/deserialization for storing config in Text column
- Public theme config endpoint for frontend initialization (with 5-min cache)/- Admin CRUD for theme settings (get, update, reset)/- Logo and favicon upload/delete via Cloudflare R2 storage