2026-03-13 00:31:17 -04:00
|
|
|
from django.urls import path
|
|
|
|
|
from . import views
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app_name = 'epic'
|
|
|
|
|
|
|
|
|
|
urlpatterns = [
|
|
|
|
|
path('rooms/create_room', views.create_room, name='create_room'),
|
2026-03-30 18:31:05 -04:00
|
|
|
path('room/<uuid:room_id>/', views.room_view, name='room'),
|
2026-03-13 00:31:17 -04:00
|
|
|
path('room/<uuid:room_id>/gate/', views.gatekeeper, name='gatekeeper'),
|
2026-03-14 02:03:44 -04:00
|
|
|
path('room/<uuid:room_id>/gate/drop_token', views.drop_token, name='drop_token'),
|
|
|
|
|
path('room/<uuid:room_id>/gate/confirm_token', views.confirm_token, name='confirm_token'),
|
2026-03-15 16:08:34 -04:00
|
|
|
path('room/<uuid:room_id>/gate/return_token', views.return_token, name='return_token'),
|
2026-03-16 00:07:52 -04:00
|
|
|
path('room/<uuid:room_id>/gate/release_slot', views.release_slot, name='release_slot'),
|
Django Channels role-select sprint: turn_changed, roles_revealed, role_select_start consumer handlers; WS URL changed from room_slug to room_id UUID; TableSeat model - room, gamer, slot_number, role, role_revealed, seat_position fields; Room.table_status field with ROLE_SELECT, SIG_SELECT, IN_GAME choices; migration 0006_table_status_and_table_seat; pick_roles and select_role views; _role_select_context helper; _notify_turn_changed, _notify_roles_revealed, _notify_role_select_start notifiers; all gate-mutation views now call _notify_gate_update; ChannelsFunctionalTest base class with serve_static, screenshot, dump helpers; SQLite TEST NAME set to file path for ChannelsLiveServerTestCase; InMemoryChannelLayer added to test CHANNEL_LAYERS settings; FT 5 and FT 6 now passing - active seat arc and turn advance via WS, no page refresh; room.js, gatekeeper.js, role-select.js added to apps/epic/static; applets.js, game-kit.js, dashboard.js, wallet.js relocated to app-scoped static dirs; room.html: hex table, table-seat arcs, card-stack, inventory panel, role-card hand, WS scripts; _room.scss: room-shell flex layout, .table-hex polygon clip-path, .table-seat and .seat-card-arc, .card-stack eligible/ineligible states, .card flip animation, .inv-role-card stacked hand, .role-select-backdrop; gear btn and room menu always position: fixed; 375 tests, 0 skipped
2026-03-17 00:24:23 -04:00
|
|
|
path('room/<uuid:room_id>/pick-roles', views.pick_roles, name='pick_roles'),
|
2026-04-04 14:33:35 -04:00
|
|
|
path('room/<uuid:room_id>/pick-sigs', views.pick_sigs, name='pick_sigs'),
|
Django Channels role-select sprint: turn_changed, roles_revealed, role_select_start consumer handlers; WS URL changed from room_slug to room_id UUID; TableSeat model - room, gamer, slot_number, role, role_revealed, seat_position fields; Room.table_status field with ROLE_SELECT, SIG_SELECT, IN_GAME choices; migration 0006_table_status_and_table_seat; pick_roles and select_role views; _role_select_context helper; _notify_turn_changed, _notify_roles_revealed, _notify_role_select_start notifiers; all gate-mutation views now call _notify_gate_update; ChannelsFunctionalTest base class with serve_static, screenshot, dump helpers; SQLite TEST NAME set to file path for ChannelsLiveServerTestCase; InMemoryChannelLayer added to test CHANNEL_LAYERS settings; FT 5 and FT 6 now passing - active seat arc and turn advance via WS, no page refresh; room.js, gatekeeper.js, role-select.js added to apps/epic/static; applets.js, game-kit.js, dashboard.js, wallet.js relocated to app-scoped static dirs; room.html: hex table, table-seat arcs, card-stack, inventory panel, role-card hand, WS scripts; _room.scss: room-shell flex layout, .table-hex polygon clip-path, .table-seat and .seat-card-arc, .card-stack eligible/ineligible states, .card flip animation, .inv-role-card stacked hand, .role-select-backdrop; gear btn and room menu always position: fixed; 375 tests, 0 skipped
2026-03-17 00:24:23 -04:00
|
|
|
path('room/<uuid:room_id>/select-role', views.select_role, name='select_role'),
|
2026-03-25 01:50:06 -04:00
|
|
|
path('room/<uuid:room_id>/select-sig', views.select_sig, name='select_sig'),
|
2026-04-05 22:01:23 -04:00
|
|
|
path('room/<uuid:room_id>/sig-reserve', views.sig_reserve, name='sig_reserve'),
|
2026-04-09 01:17:24 -04:00
|
|
|
path('room/<uuid:room_id>/sig-ready', views.sig_ready, name='sig_ready'),
|
|
|
|
|
path('room/<uuid:room_id>/sig-confirm', views.sig_confirm, name='sig_confirm'),
|
2026-03-13 18:37:19 -04:00
|
|
|
path('room/<uuid:room_id>/gate/invite', views.invite_gamer, name='invite_gamer'),
|
2026-03-13 22:51:42 -04:00
|
|
|
path('room/<uuid:room_id>/gate/status', views.gate_status, name='gate_status'),
|
2026-03-14 00:10:40 -04:00
|
|
|
path('room/<uuid:room_id>/delete', views.delete_room, name='delete_room'),
|
|
|
|
|
path('room/<uuid:room_id>/abandon', views.abandon_room, name='abandon_room'),
|
2026-03-24 21:07:01 -04:00
|
|
|
path('room/<uuid:room_id>/tarot/', views.tarot_deck, name='tarot_deck'),
|
|
|
|
|
path('room/<uuid:room_id>/tarot/deal', views.tarot_deal, name='tarot_deal'),
|
PICK SKY overlay: D3 natal wheel, Character model, PySwiss aspects+tz
PySwiss:
- calculate_aspects() in calc.py (conjunction/sextile/square/trine/opposition with orbs)
- /api/tz/ endpoint (timezonefinder lat/lon → IANA timezone)
- aspects included in /api/chart/ response
- timezonefinder==8.2.2 added to requirements
- 14 new unit tests (test_calc.py) + 12 new integration tests (TimezoneApiTest, aspect fields)
Main app:
- Sign, Planet, AspectType, HouseLabel reference models + seeded migrations (0032–0033)
- Character model with birth_dt/lat/lon/place, house_system, chart_data, celtic_cross,
confirmed_at/retired_at lifecycle (migration 0034)
- natus_preview proxy view: calls PySwiss /api/chart/ + optional /api/tz/ auto-resolution,
computes planet-in-house distinctions, returns enriched JSON
- natus_save view: find-or-create draft Character, confirmed_at on action='confirm'
- natus-wheel.js: D3 v7 SVG natal wheel (elements pie, signs, houses, planets, aspects,
ASC/MC axes); NatusWheel.draw() / redraw() / clear()
- _natus_overlay.html: Nominatim place autocomplete (debounced 400ms), geolocation button
with reverse-geocode city name, live chart preview (debounced 300ms), tz auto-fill,
NVM / SAVE SKY footer; html.natus-open class toggle pattern
- _natus.scss: Gaussian backdrop+modal, two-column form|wheel layout, suggestion dropdown,
portrait collapse at 600px, landscape sidebar z-index sink
- room.html: include overlay when table_status == SKY_SELECT
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 02:09:26 -04:00
|
|
|
path('room/<uuid:room_id>/natus/preview', views.natus_preview, name='natus_preview'),
|
|
|
|
|
path('room/<uuid:room_id>/natus/save', views.natus_save, name='natus_save'),
|
2026-03-13 00:31:17 -04:00
|
|
|
]
|