HH/apps/surveys/urls.py
2026-03-28 14:03:56 +03:00

83 lines
4.5 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, his_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("send/", ui_views.manual_survey_send, name="manual_send"),
path("send/phone/", ui_views.manual_survey_send_phone, name="manual_send_phone"),
path("send/csv/", ui_views.manual_survey_send_csv, name="manual_send_csv"),
# HIS Patient Import
path("his-import/", his_views.his_patient_import, name="his_patient_import"),
path("his-import/review/", his_views.his_patient_review, name="his_patient_review"),
path("his-import/send/", his_views.his_patient_survey_send, name="his_patient_survey_send"),
# Bulk Survey Jobs
path("bulk-jobs/", his_views.bulk_job_list, name="bulk_job_list"),
path("bulk-jobs/<uuid:job_id>/", his_views.bulk_job_status, name="bulk_job_status"),
path("reports/", ui_views.survey_analytics_reports, name="analytics_reports"),
path(
"reports/<str:filename>/view/",
ui_views.survey_analytics_report_view_inline,
name="analytics_report_view_inline",
),
path(
"reports/<str:filename>/download/", ui_views.survey_analytics_report_download, name="analytics_report_download"
),
path("reports/<str:filename>/delete/", ui_views.survey_analytics_report_delete, name="analytics_report_delete"),
path("reports/<str:filename>/", ui_views.survey_analytics_report_view, name="analytics_report_view"),
# Enhanced Reports (separate report per survey type)
path("enhanced-reports/", ui_views.enhanced_survey_reports_list, name="enhanced_reports_list"),
path("enhanced-reports/generate/", ui_views.generate_enhanced_report_ui, name="generate_enhanced_report"),
path("enhanced-reports/<str:dir_name>/", ui_views.enhanced_survey_report_view, name="enhanced_report_view"),
path(
"enhanced-reports/<str:dir_name>/<str:filename>",
ui_views.enhanced_survey_report_file,
name="enhanced_report_file",
),
path("comments/", ui_views.survey_comments_list, name="survey_comments_list"),
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",
),
# Survey Templates (manual/ad-hoc surveys)
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"),
]