Files
smoothschedule/smoothschedule/platform_admin/urls.py
poduck ae74b4c2ed feat: Multi-email ticketing system with platform email addresses
- Add PlatformEmailAddress model for managing platform-level email addresses
- Add TicketEmailAddress model for tenant-level email addresses
- Create MailServerService for IMAP integration with mail.talova.net
- Implement PlatformEmailReceiver for processing incoming platform emails
- Add email autoconfiguration for Mozilla, Microsoft, and Apple clients
- Add configurable email polling interval in platform settings
- Add "Check Emails" button on support page for manual refresh
- Add ticket counts to status tabs on support page
- Add platform email addresses management page
- Add Privacy Policy and Terms of Service pages
- Add robots.txt for SEO
- Restrict email addresses to smoothschedule.com domain only

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 17:49:09 -05:00

58 lines
2.2 KiB
Python

"""
Platform URL Configuration
"""
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
TenantViewSet,
PlatformUserViewSet,
TenantInvitationViewSet,
SubscriptionPlanViewSet,
PlatformSettingsView,
GeneralSettingsView,
StripeKeysView,
StripeValidateView,
StripeWebhooksView,
StripeWebhookDetailView,
StripeWebhookRotateSecretView,
OAuthSettingsView,
PlatformEmailAddressViewSet,
)
app_name = 'platform'
router = DefaultRouter()
router.register(r'businesses', TenantViewSet, basename='business')
router.register(r'users', PlatformUserViewSet, basename='user')
router.register(r'tenant-invitations', TenantInvitationViewSet, basename='tenant-invitation')
router.register(r'subscription-plans', SubscriptionPlanViewSet, basename='subscription-plan')
router.register(r'email-addresses', PlatformEmailAddressViewSet, basename='email-address')
urlpatterns = [
path('', include(router.urls)),
# Platform settings endpoints
path('settings/', PlatformSettingsView.as_view(), name='settings'),
path('settings/general/', GeneralSettingsView.as_view(), name='general-settings'),
path('settings/stripe/keys/', StripeKeysView.as_view(), name='stripe-keys'),
path('settings/stripe/validate/', StripeValidateView.as_view(), name='stripe-validate'),
path('settings/oauth/', OAuthSettingsView.as_view(), name='oauth-settings'),
# Stripe webhook management
path('settings/stripe/webhooks/', StripeWebhooksView.as_view(), name='stripe-webhooks'),
path('settings/stripe/webhooks/<str:webhook_id>/', StripeWebhookDetailView.as_view(), name='stripe-webhook-detail'),
path('settings/stripe/webhooks/<str:webhook_id>/rotate-secret/', StripeWebhookRotateSecretView.as_view(), name='stripe-webhook-rotate-secret'),
# Public endpoints for tenant invitations
path(
'tenant-invitations/token/<str:token>/',
TenantInvitationViewSet.as_view({'get': 'retrieve_by_token'}),
name='tenant-invitation-retrieve-by-token'
),
path(
'tenant-invitations/token/<str:token>/accept/',
TenantInvitationViewSet.as_view({'post': 'accept'}),
name='tenant-invitation-accept'
),
]