- Add TimeBlock approval status with manager approval workflow - Create core mixins for staff permission restrictions (DenyStaffWritePermission, etc.) - Add StaffDashboard page for staff-specific views - Refactor MyAvailability page for time block management - Update field mobile status machine and views - Add per-user permission overrides via JSONField - Document core mixins and permission system in CLAUDE.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
45 lines
2.4 KiB
Python
45 lines
2.4 KiB
Python
"""
|
|
Schedule App URLs
|
|
|
|
UNUSED_ENDPOINT tags mark endpoints not currently used by the frontend.
|
|
Search for "UNUSED_ENDPOINT" to find all unused endpoints in the codebase.
|
|
"""
|
|
from django.urls import path, include
|
|
from rest_framework.routers import DefaultRouter
|
|
from .views import (
|
|
ResourceViewSet, EventViewSet, ParticipantViewSet,
|
|
CustomerViewSet, ServiceViewSet, StaffViewSet, ResourceTypeViewSet,
|
|
ScheduledTaskViewSet, TaskExecutionLogViewSet, PluginViewSet,
|
|
PluginTemplateViewSet, PluginInstallationViewSet, EventPluginViewSet,
|
|
GlobalEventPluginViewSet, EmailTemplateViewSet,
|
|
HolidayViewSet, TimeBlockViewSet
|
|
)
|
|
from .export_views import ExportViewSet
|
|
|
|
# Create router and register viewsets
|
|
router = DefaultRouter()
|
|
router.register(r'resource-types', ResourceTypeViewSet, basename='resourcetype')
|
|
router.register(r'resources', ResourceViewSet, basename='resource')
|
|
router.register(r'appointments', EventViewSet, basename='appointment') # Alias for frontend
|
|
router.register(r'events', EventViewSet, basename='event')
|
|
router.register(r'participants', ParticipantViewSet, basename='participant') # UNUSED_ENDPOINT: Participants managed via Event serializer
|
|
router.register(r'customers', CustomerViewSet, basename='customer')
|
|
router.register(r'services', ServiceViewSet, basename='service')
|
|
router.register(r'staff', StaffViewSet, basename='staff')
|
|
router.register(r'scheduled-tasks', ScheduledTaskViewSet, basename='scheduledtask')
|
|
router.register(r'task-logs', TaskExecutionLogViewSet, basename='tasklog') # UNUSED_ENDPOINT: Logs accessed via scheduled-tasks/{id}/logs action
|
|
router.register(r'plugins', PluginViewSet, basename='plugin') # UNUSED_ENDPOINT: Frontend uses plugin-templates instead
|
|
router.register(r'plugin-templates', PluginTemplateViewSet, basename='plugintemplate')
|
|
router.register(r'plugin-installations', PluginInstallationViewSet, basename='plugininstallation')
|
|
router.register(r'event-plugins', EventPluginViewSet, basename='eventplugin')
|
|
router.register(r'global-event-plugins', GlobalEventPluginViewSet, basename='globaleventplugin')
|
|
router.register(r'email-templates', EmailTemplateViewSet, basename='emailtemplate')
|
|
router.register(r'export', ExportViewSet, basename='export')
|
|
router.register(r'holidays', HolidayViewSet, basename='holiday')
|
|
router.register(r'time-blocks', TimeBlockViewSet, basename='timeblock')
|
|
|
|
# URL patterns
|
|
urlpatterns = [
|
|
path('', include(router.urls)),
|
|
]
|