HH/apps/surveys/urls.py
2026-01-24 15:27:30 +03:00

51 lines
2.6 KiB
Python

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import (
PublicSurveyViewSet,
SurveyInstanceViewSet,
SurveyQuestionViewSet,
SurveyResponseViewSet,
SurveyTemplateViewSet,
)
from .analytics_views import SurveyAnalyticsViewSet, SurveyTrackingViewSet
from . import public_views, ui_views
app_name = 'surveys'
router = DefaultRouter()
router.register(r'api/templates', SurveyTemplateViewSet, basename='survey-template-api')
router.register(r'api/questions', SurveyQuestionViewSet, basename='survey-question-api')
router.register(r'api/instances', SurveyInstanceViewSet, basename='survey-instance-api')
router.register(r'api/responses', SurveyResponseViewSet, basename='survey-response-api')
router.register(r'api/analytics', SurveyAnalyticsViewSet, basename='survey-analytics-api')
router.register(r'api/tracking', SurveyTrackingViewSet, basename='survey-tracking-api')
urlpatterns = [
# Public survey pages (no auth required)
path('invalid/', public_views.invalid_token, name='invalid_token'),
# UI Views (authenticated) - specific paths first
path('instances/', ui_views.survey_instance_list, name='instance_list'),
path('instances/<uuid:pk>/', ui_views.survey_instance_detail, name='instance_detail'),
path('instances/<uuid:pk>/log-contact/', ui_views.survey_log_patient_contact, name='log_patient_contact'),
path('instances/<uuid:pk>/send-satisfaction/', ui_views.survey_send_satisfaction_feedback, name='send_satisfaction_feedback'),
path('templates/', ui_views.survey_template_list, name='template_list'),
path('templates/create/', ui_views.survey_template_create, name='template_create'),
path('templates/<uuid:pk>/', ui_views.survey_template_detail, name='template_detail'),
path('templates/<uuid:pk>/edit/', ui_views.survey_template_edit, name='template_edit'),
path('templates/<uuid:pk>/delete/', ui_views.survey_template_delete, name='template_delete'),
# Public API endpoints (no auth required)
path('public/<str:token>/', PublicSurveyViewSet.as_view({'get': 'retrieve'}), name='public-survey'),
path('public/<str:token>/submit/', PublicSurveyViewSet.as_view({'post': 'submit'}), name='public-survey-submit'),
# Authenticated API endpoints
path('', include(router.urls)),
# Public survey token access (requires /s/ prefix)
path('s/<str:token>/', public_views.survey_form, name='survey_form'),
path('s/<str:token>/thank-you/', public_views.thank_you, name='thank_you'),
path('s/<str:token>/track-start/', public_views.track_survey_start, name='track_survey_start'),
]