Add dashboard URL patterns for role management to prepare for upcoming admin role CRUD UI.
507 lines
15 KiB
Python
507 lines
15 KiB
Python
from django.conf import settings
|
|
from django.conf.urls.static import static
|
|
from django.contrib import admin
|
|
from django.contrib.auth import views as auth_views
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.urls import include, path
|
|
from django.views.generic import RedirectView, TemplateView
|
|
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
|
|
|
|
from src.dashboard import board_views, list_views, page_views, views
|
|
|
|
api_patterns = [
|
|
path("auth/", include("src.accounts.urls")),
|
|
path("projects/", include("src.projects.urls")),
|
|
path("tickets/", include("src.tickets.urls")),
|
|
path("epics/", include("src.epics.urls")),
|
|
path("notes/", include("src.notes.urls")),
|
|
path("notifications/", include("src.notifications.urls")),
|
|
path("external/", include("src.external.urls")),
|
|
]
|
|
|
|
login_req = login_required
|
|
|
|
# --- Core/Dashboard App ---
|
|
core_dashboard_patterns = [
|
|
path("", login_req(views.dashboard), name="dashboard"),
|
|
path("stats-cards/", login_req(views.stats_cards), name="stats-cards"),
|
|
path(
|
|
"charts/tickets-per-project/",
|
|
login_req(views.tickets_per_project_chart),
|
|
name="chart-tickets-per-project",
|
|
),
|
|
path(
|
|
"charts/user-statistics/",
|
|
login_req(views.user_statistics_chart),
|
|
name="chart-user-statistics",
|
|
),
|
|
path(
|
|
"charts/user-statistics-data/",
|
|
login_req(views.user_statistics_data),
|
|
name="chart-user-statistics-data",
|
|
),
|
|
path(
|
|
"charts/monthly-trend/",
|
|
login_req(views.monthly_trend_chart),
|
|
name="chart-monthly-trend",
|
|
),
|
|
path(
|
|
"recent-activity/all/",
|
|
login_req(views.recent_activity_all),
|
|
name="recent-activity-all",
|
|
),
|
|
path("recent-activity/", login_req(views.recent_activity), name="recent-activity"),
|
|
path(
|
|
"project-timeline-widget/",
|
|
login_req(views.project_timeline_widget),
|
|
name="project-timeline-widget",
|
|
),
|
|
]
|
|
|
|
# --- Notifications App ---
|
|
notifications_dashboard_patterns = [
|
|
path(
|
|
"notifications/unread-count/",
|
|
login_req(list_views.notifications_unread_count),
|
|
name="notif-unread-count",
|
|
),
|
|
path(
|
|
"notifications/dropdown/",
|
|
login_req(page_views.notifications_dropdown),
|
|
name="notifications-dropdown",
|
|
),
|
|
path(
|
|
"notifications/",
|
|
login_req(page_views.notifications_list),
|
|
name="notifications-list",
|
|
),
|
|
path(
|
|
"notifications/mark-all-read/",
|
|
login_req(page_views.notification_mark_all_read),
|
|
name="notifications-mark-all-read",
|
|
),
|
|
path(
|
|
"notifications/bulk/mark-read/",
|
|
login_req(page_views.notification_mark_bulk_read),
|
|
name="notifications-mark-bulk-read",
|
|
),
|
|
path(
|
|
"notifications/<int:notification_id>/mark-read/",
|
|
login_req(page_views.notification_mark_read),
|
|
name="notification-mark-read",
|
|
),
|
|
]
|
|
|
|
# --- Projects App ---
|
|
projects_dashboard_patterns = [
|
|
path("projects/", login_req(list_views.projects_list), name="projects-list"),
|
|
path(
|
|
"projects/create/", login_req(page_views.project_create), name="project-create"
|
|
),
|
|
path(
|
|
"projects/<int:project_id>/",
|
|
login_req(page_views.project_detail),
|
|
name="project-detail",
|
|
),
|
|
path(
|
|
"projects/<int:project_id>/edit/",
|
|
login_req(page_views.project_edit),
|
|
name="project-edit",
|
|
),
|
|
path(
|
|
"projects/<int:project_id>/delete/",
|
|
login_req(page_views.project_delete),
|
|
name="project-delete",
|
|
),
|
|
path(
|
|
"projects/<int:project_id>/pin/",
|
|
login_req(page_views.project_toggle_pin),
|
|
name="project-toggle-pin",
|
|
),
|
|
path(
|
|
"project-timeline/",
|
|
login_req(page_views.project_timeline),
|
|
name="project-timeline",
|
|
),
|
|
path("project-board/", login_req(board_views.project_board), name="project-board"),
|
|
path(
|
|
"project-board/<int:project_id>/",
|
|
login_req(board_views.project_board),
|
|
name="project-board-project",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/data/",
|
|
login_req(board_views.board_data),
|
|
name="board-data",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/move/<int:ticket_id>/",
|
|
login_req(board_views.move_ticket),
|
|
name="board-move-ticket",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/create/",
|
|
login_req(board_views.board_create_ticket),
|
|
name="board-create-ticket",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/export/",
|
|
login_req(board_views.export_board_tickets),
|
|
name="board-export-tickets",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/permissions/",
|
|
login_req(page_views.board_permissions),
|
|
name="board-permissions",
|
|
),
|
|
path(
|
|
"board/<int:project_id>/permissions/<int:permission_id>/delete/",
|
|
login_req(page_views.board_permission_delete),
|
|
name="board-permission-delete",
|
|
),
|
|
# Project Notes
|
|
path(
|
|
"project-notes/create/",
|
|
login_req(page_views.project_note_create),
|
|
name="project-note-create",
|
|
),
|
|
path(
|
|
"project-notes/<int:note_id>/edit/",
|
|
login_req(page_views.project_note_edit),
|
|
name="project-note-edit",
|
|
),
|
|
]
|
|
|
|
# --- Tickets App ---
|
|
tickets_dashboard_patterns = [
|
|
path("tickets/", login_req(list_views.tickets_list), name="tickets-list"),
|
|
path("tickets/create/", login_req(page_views.ticket_create), name="ticket-create"),
|
|
path(
|
|
"tickets/<int:ticket_id>/",
|
|
login_req(page_views.ticket_detail),
|
|
name="ticket-detail",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/edit/",
|
|
login_req(page_views.ticket_edit),
|
|
name="ticket-edit",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/delete/",
|
|
login_req(page_views.ticket_delete),
|
|
name="ticket-delete",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/description/",
|
|
login_req(page_views.ticket_update_description),
|
|
name="ticket-update-description",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/field/",
|
|
login_req(page_views.ticket_update_field),
|
|
name="ticket-update-field",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/comments/add/",
|
|
login_req(page_views.ticket_comment_add),
|
|
name="ticket-comment-add",
|
|
),
|
|
path(
|
|
"tickets/<int:ticket_id>/comments/<int:comment_id>/delete/",
|
|
login_req(page_views.ticket_comment_delete),
|
|
name="ticket-comment-delete",
|
|
),
|
|
path(
|
|
"tickets/export/", login_req(page_views.tickets_export), name="tickets-export"
|
|
),
|
|
path(
|
|
"tickets/import/", login_req(page_views.tickets_import), name="tickets-import"
|
|
),
|
|
path(
|
|
"ticket-timeline/",
|
|
login_req(page_views.ticket_timeline),
|
|
name="ticket-timeline",
|
|
),
|
|
path(
|
|
"ticket-timeline/<int:project_id>/",
|
|
login_req(page_views.ticket_timeline),
|
|
name="ticket-timeline-project",
|
|
),
|
|
]
|
|
|
|
# --- Ticket Statuses (Part of Tickets/Projects) ---
|
|
ticket_statuses_dashboard_patterns = [
|
|
path(
|
|
"ticket-statuses/create/",
|
|
login_req(page_views.ticket_status_create),
|
|
name="ticket-status-create",
|
|
),
|
|
path(
|
|
"ticket-statuses/<int:status_id>/edit/",
|
|
login_req(page_views.ticket_status_edit),
|
|
name="ticket-status-edit",
|
|
),
|
|
path(
|
|
"ticket-statuses/<int:status_id>/delete/",
|
|
login_req(page_views.ticket_status_delete),
|
|
name="ticket-status-delete",
|
|
),
|
|
path(
|
|
"ticket-statuses/bulk/delete/",
|
|
login_req(page_views.ticket_statuses_bulk_delete),
|
|
name="ticket-statuses-bulk-delete",
|
|
),
|
|
]
|
|
|
|
# --- Project Members App/Component ---
|
|
project_members_dashboard_patterns = [
|
|
path(
|
|
"project-members/create/",
|
|
login_req(page_views.project_member_create),
|
|
name="project-member-create",
|
|
),
|
|
path(
|
|
"project-members/<int:member_id>/edit/",
|
|
login_req(page_views.project_member_edit),
|
|
name="project-member-edit",
|
|
),
|
|
path(
|
|
"project-members/<int:member_id>/delete/",
|
|
login_req(page_views.project_member_delete),
|
|
name="project-member-delete",
|
|
),
|
|
path(
|
|
"project-members/bulk/delete/",
|
|
login_req(page_views.user_project_members_bulk_delete),
|
|
name="project-member-bulk-delete",
|
|
),
|
|
path(
|
|
"user-projects/attach/",
|
|
login_req(page_views.user_project_attach),
|
|
name="user-project-attach",
|
|
),
|
|
]
|
|
|
|
# --- Epics App ---
|
|
epics_dashboard_patterns = [
|
|
path("epics/", login_req(page_views.epics_overview), name="epics-overview"),
|
|
path(
|
|
"epics/<int:project_id>/",
|
|
login_req(page_views.epics_overview),
|
|
name="epics-overview-project",
|
|
),
|
|
path("epics/create/", login_req(page_views.epic_create), name="epic-create"),
|
|
path(
|
|
"epics/create/<int:project_id>/",
|
|
login_req(page_views.epic_create),
|
|
name="epic-create-project",
|
|
),
|
|
path(
|
|
"epics/<int:epic_id>/edit/", login_req(page_views.epic_edit), name="epic-edit"
|
|
),
|
|
path(
|
|
"epics/<int:epic_id>/delete/",
|
|
login_req(page_views.epic_delete),
|
|
name="epic-delete",
|
|
),
|
|
]
|
|
|
|
# --- Analytics / Leaderboard ---
|
|
analytics_dashboard_patterns = [
|
|
path("leaderboard/", login_req(page_views.leaderboard), name="leaderboard"),
|
|
path(
|
|
"contributions/", login_req(page_views.user_contributions), name="contributions"
|
|
),
|
|
]
|
|
|
|
# --- Ticket Priorities App/Component ---
|
|
ticket_priorities_dashboard_patterns = [
|
|
path(
|
|
"ticket-priorities/",
|
|
login_req(page_views.ticket_priorities),
|
|
name="ticket-priorities",
|
|
),
|
|
path(
|
|
"ticket-priorities/add/",
|
|
login_req(page_views.ticket_priority_add),
|
|
name="ticket-priority-add",
|
|
),
|
|
path(
|
|
"ticket-priorities/<int:priority_id>/edit/",
|
|
login_req(page_views.ticket_priority_edit),
|
|
name="ticket-priority-edit",
|
|
),
|
|
path(
|
|
"ticket-priorities/<int:priority_id>/delete/",
|
|
login_req(page_views.ticket_priority_delete),
|
|
name="ticket-priority-delete",
|
|
),
|
|
]
|
|
|
|
# --- Users / Accounts Administration ---
|
|
users_dashboard_patterns = [
|
|
path("users/", login_req(page_views.users_list), name="users-list"),
|
|
path("users/create/", login_req(page_views.user_create), name="user-create"),
|
|
path("users/<int:user_id>/", login_req(page_views.user_detail), name="user-detail"),
|
|
path(
|
|
"users/<int:user_id>/edit/", login_req(page_views.user_edit), name="user-edit"
|
|
),
|
|
]
|
|
|
|
# --- Roles CRUD ---
|
|
roles_dashboard_patterns = [
|
|
path("roles/", login_req(page_views.roles_list), name="roles-list"),
|
|
path("roles/add/", login_req(page_views.role_add), name="role-add"),
|
|
path(
|
|
"roles/<int:role_id>/delete/",
|
|
login_req(page_views.role_delete),
|
|
name="role-delete",
|
|
),
|
|
]
|
|
|
|
# --- Settings App/Component ---
|
|
settings_dashboard_patterns = [
|
|
path("settings/ui/", login_req(page_views.ui_settings), name="ui-settings"),
|
|
]
|
|
|
|
# --- External Access App ---
|
|
external_access_dashboard_patterns = [
|
|
path(
|
|
"external/",
|
|
login_req(page_views.external_access_list),
|
|
name="external-access-list",
|
|
),
|
|
path(
|
|
"external/create/<int:project_id>/",
|
|
login_req(page_views.external_access_create),
|
|
name="external-access-create",
|
|
),
|
|
path(
|
|
"external/<int:access_id>/regenerate/",
|
|
login_req(page_views.external_access_regenerate),
|
|
name="external-access-regenerate",
|
|
),
|
|
path(
|
|
"external/<int:access_id>/toggle/",
|
|
login_req(page_views.external_access_toggle),
|
|
name="external-access-toggle",
|
|
),
|
|
path(
|
|
"external/project/<int:project_id>/regenerate/",
|
|
login_req(page_views.external_access_regenerate_project),
|
|
name="external-access-regenerate-project",
|
|
),
|
|
]
|
|
|
|
# --- Bulk Operations (Across Apps) ---
|
|
bulk_delete_dashboard_patterns = [
|
|
path(
|
|
"tickets/bulk/status/",
|
|
login_req(page_views.tickets_bulk_status),
|
|
name="tickets-bulk-status",
|
|
),
|
|
path(
|
|
"tickets/bulk/priority/",
|
|
login_req(page_views.tickets_bulk_priority),
|
|
name="tickets-bulk-priority",
|
|
),
|
|
path(
|
|
"tickets/bulk/assign/",
|
|
login_req(page_views.tickets_bulk_assign),
|
|
name="tickets-bulk-assign",
|
|
),
|
|
path(
|
|
"tickets/bulk/epic/",
|
|
login_req(page_views.tickets_bulk_epic),
|
|
name="tickets-bulk-epic",
|
|
),
|
|
path(
|
|
"tickets/bulk/delete/",
|
|
login_req(list_views.tickets_bulk_delete),
|
|
name="tickets-bulk-delete",
|
|
),
|
|
path(
|
|
"projects/bulk/delete/",
|
|
login_req(list_views.projects_bulk_delete),
|
|
name="projects-bulk-delete",
|
|
),
|
|
path(
|
|
"users/bulk/delete/",
|
|
login_req(list_views.users_bulk_delete),
|
|
name="users-bulk-delete",
|
|
),
|
|
path(
|
|
"epics/bulk/delete/",
|
|
login_req(list_views.epics_bulk_delete),
|
|
name="epics-bulk-delete",
|
|
),
|
|
path(
|
|
"notes/bulk/delete/",
|
|
login_req(list_views.notes_bulk_delete),
|
|
name="notes-bulk-delete",
|
|
),
|
|
]
|
|
|
|
# Combined Dashboard Patterns
|
|
dashboard_patterns = (
|
|
core_dashboard_patterns
|
|
+ notifications_dashboard_patterns
|
|
+ projects_dashboard_patterns
|
|
+ tickets_dashboard_patterns
|
|
+ ticket_statuses_dashboard_patterns
|
|
+ project_members_dashboard_patterns
|
|
+ epics_dashboard_patterns
|
|
+ analytics_dashboard_patterns
|
|
+ ticket_priorities_dashboard_patterns
|
|
+ roles_dashboard_patterns
|
|
+ users_dashboard_patterns
|
|
+ settings_dashboard_patterns
|
|
+ external_access_dashboard_patterns
|
|
+ bulk_delete_dashboard_patterns
|
|
)
|
|
|
|
urlpatterns = [
|
|
path("", RedirectView.as_view(url="/dashboard/", permanent=True)),
|
|
path("admin/", admin.site.urls),
|
|
path(
|
|
"sw.js",
|
|
TemplateView.as_view(
|
|
template_name="components/sw.js", content_type="application/javascript"
|
|
),
|
|
name="sw.js",
|
|
),
|
|
path("api/", include(api_patterns)),
|
|
path("dashboard/", include(dashboard_patterns)),
|
|
path(
|
|
"login/",
|
|
auth_views.LoginView.as_view(
|
|
template_name="auth/login.html",
|
|
redirect_authenticated_user=True,
|
|
),
|
|
name="login",
|
|
),
|
|
path("logout/", auth_views.LogoutView.as_view(next_page="login"), name="logout"),
|
|
path(
|
|
"external/<str:token>/",
|
|
page_views.external_access_view,
|
|
name="external-dashboard",
|
|
),
|
|
path(
|
|
"external/<str:token>/logout/",
|
|
page_views.external_access_logout,
|
|
name="external-logout",
|
|
),
|
|
]
|
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
|
|
|
if settings.DEBUG:
|
|
urlpatterns += [
|
|
path("__reload__/", include("django_browser_reload.urls")),
|
|
path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
|
|
path(
|
|
"api/docs/",
|
|
SpectacularSwaggerView.as_view(url_name="schema"),
|
|
name="swagger-ui",
|
|
),
|
|
]
|