Major refactor of Draft admin and participant Websocket state sync Use consistent state dict serialization in DraftStateManager (to_dict, dict-like access, etc.) Always include up-to-date participants and draft status in sync payloads Draft phase/order summary now sent as objects instead of calling .get_summary() UI/UX updates: Updated DraftAdmin.jsx: Connects DraftParticipant panel for real-time participant state Centralizes phase advance, bidding, and sync controls Moves phase selector into a dedicated panel Refine markup/extends in room_admin.dj.html (use block body, fix root data attribute) Minor fixes to DraftCountdownClock.jsx to robustly handle NaN time CSS/layout: Refactor .draft-participant styling to .wrapper within #draft-participant-root and #draft-admin-root for better responsive layout and code clarity Server code: Simplify draft consumer/manager state interaction, drop unused cache keys, update order determination and phase management, and ensure DRY status object responses Small code style and consistency cleanups Misc: Add debugpy launch task in code-workspace and clean workspace JSON (style/consistency) Minor formatting and error handling improvements
187 lines
4.9 KiB
Plaintext
187 lines
4.9 KiB
Plaintext
{
|
|
"folders": [
|
|
{
|
|
"path": "."
|
|
}
|
|
],
|
|
"launch": {
|
|
"version": "0.2.0",
|
|
"configurations": [
|
|
{
|
|
"name": "Debug current file with debugpy",
|
|
"type": "debugpy",
|
|
"request": "launch",
|
|
"program": "${file}",
|
|
"console": "integratedTerminal",
|
|
"justMyCode": false,
|
|
"args": [],
|
|
"env": {
|
|
"PYTHONPATH": "${workspaceFolder}"
|
|
}
|
|
},
|
|
{
|
|
"name": "Run Django Server",
|
|
"type": "debugpy",
|
|
"request": "launch",
|
|
"program": "${workspaceFolder}/manage.py",
|
|
"args": ["runserver"],
|
|
"django": true,
|
|
"console": "integratedTerminal",
|
|
"envFile": "${workspaceFolder}/.env"
|
|
},
|
|
{
|
|
"name": "Run Uvicorn Django Server",
|
|
"type": "debugpy",
|
|
"request": "launch",
|
|
"module": "uvicorn",
|
|
"args": ["boxofficefantasy_project.asgi:application", "--reload"],
|
|
"django": true,
|
|
"console": "integratedTerminal",
|
|
"envFile": "${workspaceFolder}/.env"
|
|
},
|
|
{
|
|
"name": "Start Webpack Dev Server",
|
|
"type": "node",
|
|
"request": "launch",
|
|
"runtimeExecutable": "npm",
|
|
"args": ["run", "dev"],
|
|
"cwd": "${workspaceFolder}/frontend",
|
|
"console": "integratedTerminal",
|
|
"internalConsoleOptions": "neverOpen"
|
|
},
|
|
{
|
|
"name": "Launch Chrome",
|
|
"type": "chrome",
|
|
"request": "launch",
|
|
"url": "http://localhost:3000", // adjust based on your local server
|
|
"webRoot": "${workspaceFolder}",
|
|
"sourceMaps": true,
|
|
"trace": true
|
|
},
|
|
{
|
|
"name": "Debug: Import 2014-2019.csv",
|
|
"type": "debugpy",
|
|
"request": "launch",
|
|
"program": "${workspaceFolder}/manage.py",
|
|
"args": ["import_legacy", "./data/2014-2019.csv"],
|
|
"django": true,
|
|
"console": "integratedTerminal"
|
|
}
|
|
],
|
|
"compounds": [
|
|
{
|
|
"name": "Django + Chrome + Webpack",
|
|
"configurations": [
|
|
"Run Django Server",
|
|
"Launch Chrome",
|
|
"Start Webpack Dev Server"
|
|
],
|
|
"type": "compound"
|
|
}
|
|
]
|
|
},
|
|
"tasks": {
|
|
"version": "2.0.0",
|
|
"tasks": [
|
|
{
|
|
"label": "Start Redis",
|
|
"type": "process",
|
|
"command": "docker",
|
|
"args": [
|
|
"run",
|
|
"--rm",
|
|
"--name",
|
|
"redis-boxofficefantasy-dev",
|
|
"-p",
|
|
"6379:6379",
|
|
"redis"
|
|
],
|
|
"isBackground": true,
|
|
"problemMatcher": [],
|
|
"group": {
|
|
"kind": "build",
|
|
"isDefault": false
|
|
}
|
|
},
|
|
{
|
|
"label": "🗑️ Delete all Movies",
|
|
"type": "shell",
|
|
"command": "${config:python.defaultInterpreterPath}",
|
|
"args": [
|
|
"manage.py",
|
|
"shell",
|
|
"-c",
|
|
"from boxofficefantasy.models import Movie; Movie.objects.all().delete()"
|
|
],
|
|
"group": "build",
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "Import 2014-2019.csv",
|
|
"type": "shell",
|
|
"command": "${config:python.defaultInterpreterPath}",
|
|
"args": ["manage.py", "import_legacy", "./data/2014-2019.csv"],
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "📦 Make Migrations",
|
|
"type": "shell",
|
|
"command": "${config:python.defaultInterpreterPath}",
|
|
"args": ["manage.py", "makemigrations"],
|
|
"group": "build",
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "🔄 Apply Migrations",
|
|
"type": "shell",
|
|
"command": "${config:python.defaultInterpreterPath}",
|
|
"args": ["manage.py", "migrate"],
|
|
"group": "build",
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "Import ",
|
|
"type": "shell",
|
|
"command": "${config:python.defaultInterpreterPath}",
|
|
"args": ["manage.py", "migrate"],
|
|
"group": "build",
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "📦 🔄 Make & Apply Migratations",
|
|
"dependsOn": ["📦 Make Migrations", "🔄 Apply Migrations"],
|
|
"dependsOrder": "sequence",
|
|
"problemMatcher": [],
|
|
"group": {
|
|
"kind": "build",
|
|
"isDefault": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"settings": {
|
|
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
|
|
"[python]": {
|
|
"editor.defaultFormatter": "ms-python.black-formatter"
|
|
},
|
|
"[django-html]": {
|
|
"editor.defaultFormatter": "monosans.djlint"
|
|
},
|
|
"emmet.includeLanguages": {
|
|
"django-html": "html"
|
|
},
|
|
"files.associations": {
|
|
"*.dj.html": "django-html"
|
|
},
|
|
"files.exclude": {
|
|
"**/__pycache__": true,
|
|
".venv": false
|
|
},
|
|
"auto-close-tag.activationOnLanguage": ["django-html"],
|
|
"terminal.integrated.env.osx": {
|
|
"VSCODE_HISTFILE": "${workspaceFolder}/.venv/.term_history"
|
|
}
|
|
// "html.autoClosingTags": true,
|
|
}
|
|
}
|