Tabletop-Mirror / Issues-and-Tasks

0 stars 0 forks source link

Role Gate - Cannot Leave Game #143

Closed VarunS1997 closed 1 month ago

VarunS1997 commented 1 month ago

Role Gate Bug -

Please fill the missing information in before sending the report ---------

Name of the game: tales around the tavern fire

Bug description: cannot leave the game, option doesn't do anything when pressed.

Steps to reproduce:
Try to leave a game

Any additional relevant info:

Attach screenshots to the email if you have any relevant captures.

Discord username:
RoleGate username: Velonica
Platform: android
App version: 1.175
Please fill the missing information in before sending the report ---------

Name of the game: tales around the tavern fire

Bug description: cannot leave the game, option doesn't do anything when pressed.

Steps to reproduce:
Try to leave a game

Any additional relevant info:

Attach screenshots to the email if you have any relevant captures.

Discord username:
RoleGate username: Velonica
Platform: android
App version: 1.175

Two attachments left out.

darrow97 commented 1 month ago

There are multiple references to a function named removeGameFromStore and is part of UI that a user can use to remove a game. The import for said function references a file (src/store/slices/gameSlices) that does not exist in the current version of the project. In fact, the directory store does not exist

VarunS1997 commented 1 month ago

This might be related to the sync issue we discussed over Discord. Let's continue pulling this thread and see what we can do.

darrow97 commented 1 month ago

Confirmed. This missing files problem was a sync issue and has been resolved with a re-sync

SirClutch6 commented 1 month ago

Looks like users may be able to leave games from both src/components/games/GameScreen.js and src/components/games/settings/GameSettingsScreen.js. The two locations have slightly different approaches to the API call to leave the game. We can investigate if both are not working, or only one.

If both are not working, the API call is most likely set up incorrectly. If only one is not working, we can fix it to match the one that is working. Will pick this back up with local development.

darrow97 commented 1 month ago

(RESOLVED by installing redis)

Trying to join a game (not-a-real-game) in the attempt to then leave it, is failing. Here is the error response:

ConnectionRefusedError at /api/v2/games/42721/characters
[Errno 111] Connect call failed ('127.0.0.1', 6379)

Request Method: POST
Request URL: http://localhost:8000/api/v2/games/42721/characters
Django Version: 3.1
Python Executable: /media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/bin/python
Python Version: 3.6.4
Python Path: ['/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend', '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages']
Server time: Thu, 25 Jul 2024 16:42:09 +0000
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'rest_framework.authtoken',
 'django_mysql',
 'channels',
 'haystack',
 'rolegate',
 'playerdata',
 'silk']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'rolegate.middleware.dev_cors_middleware']

Traceback (most recent call last):
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/api/views/character_views.py", line 115, in create
    character.save()
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/playerdata/api/characters.py", line 71, in save
    send_to_channel(f"game_{self.game_id}", "characters_changed")
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/playerdata/utils.py", line 95, in send_to_channel
    message
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/asgiref/sync.py", line 139, in __call__
    return call_result.result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/asgiref/sync.py", line 204, in main_wrap
    result = await self.awaitable(*args, **kwargs)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/channels_redis/core.py", line 614, in group_send
    async with self.connection(self.consistent_hash(group)) as connection:
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/channels_redis/core.py", line 835, in __aenter__
    self.conn = await self.pool.pop()
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/channels_redis/core.py", line 73, in pop
    conns.append(await aioredis.create_redis(**self.host, loop=loop))
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/aioredis/commands/__init__.py", line 175, in create_redis
    loop=loop)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/aioredis/connection.py", line 113, in create_connection
    timeout)
  File "/usr/local/lib/python3.6/asyncio/tasks.py", line 339, in wait_for
    return (yield from fut)
  File "/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/venv/lib/python3.6/site-packages/aioredis/stream.py", line 24, in open_connection
    lambda: protocol, host, port, **kwds)
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 777, in create_connection
    raise exceptions[0]
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 764, in create_connection
    yield from self.sock_connect(sock, address)
  File "/usr/local/lib/python3.6/asyncio/selector_events.py", line 450, in sock_connect
    return (yield from fut)
  File "/usr/local/lib/python3.6/asyncio/selector_events.py", line 480, in _sock_connect_cb
    raise OSError(err, 'Connect call failed %s' % (address,))

Exception Type: ConnectionRefusedError at /api/v2/games/42721/characters
Exception Value: [Errno 111] Connect call failed ('127.0.0.1', 6379)
Request information:
USER: verge729

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES: No cookie data

META:
CONTENT_LENGTH = '156'
CONTENT_TYPE = 'application/json'
HTTP_ACCEPT = 'application/json'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br, zstd'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9'
HTTP_AUTHORIZATION = 'Token 898309ca01d61b35f1eb03b106ac53f603f1059a'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'localhost:8000'
HTTP_ORIGIN = 'http://localhost:19006'
HTTP_REFERER = 'http://localhost:19006/'
HTTP_SEC_CH_UA = '"Not/A)Brand";v="8", "Chromium";v="126", "Brave";v="126"'
HTTP_SEC_CH_UA_MOBILE = '?0'
HTTP_SEC_CH_UA_PLATFORM = '"Linux"'
HTTP_SEC_FETCH_DEST = 'empty'
HTTP_SEC_FETCH_MODE = 'cors'
HTTP_SEC_FETCH_SITE = 'same-site'
HTTP_SEC_GPC = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
PATH_INFO = '/api/v2/games/42721/characters'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REMOTE_HOST = '127.0.0.1'
REMOTE_PORT = 49002
REQUEST_METHOD = 'POST'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
wsgi.multiprocess = True
wsgi.multithread = True

Settings:
Using settings module rolegate.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = [('Varun', 'varun@tabletopmirror.com')]
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
ASGI_APPLICATION = 'rolegate.routing.application'
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend'
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/', 'TIMEOUT': 300, 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CHANNEL_LAYERS = {'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': {'hosts': [('127.0.0.1', 6379)], 'capacity': 1500, 'expiry': 10}}}
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'rolegate_main', 'USER': 'rolegate', 'PASSWORD': '********************', 'HOST': 'ls-9d296ff81773fd6cb1cdd1cae824fe0aa4555a9d.cio169y6tr8j.us-east-1.rds.amazonaws.com', 'PORT': '3306', 'CONN_MAX_AGE': 120, 'OPTIONS': {'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = True
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'webmaster@localhost'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DEVELOPMENT = True
DISALLOWED_USER_AGENTS = []
DJANGO_LOG_LEVEL = 'DEBUG'
DJANGO_MYSQL_REWRITE_QUERIES = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
EXPO_PUSH_URL = 'https://exp.host/--/api/v2/push/send'
EXPO_RECEIPT_URL = 'https://exp.host/--/api/v2/push/getReceipts'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/whoosh_index'}}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'django_mysql', 'channels', 'haystack', 'rolegate', 'playerdata', 'silk']
INTERNAL_IPS = ['127.0.0.1']
LANGUAGES = "(('en', 'English'), ('fr', 'French'), ('pl', 'Polish'), ('it', 'Italian'), ('es', 'Spanish'), ('el', 'Greek'), ('hr', 'Croatian'), ('bg', 'Bulgarian'), ('pt-br', 'Portuguese'), ('de', 'German'), ('nl', 'Dutch'), ('ro', 'Romanian'), ('ru', 'Russian'))"
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = ['/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/locale']
LOGGING = {'version': 1, 'disable_existing_loggers': True, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}, 'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue'}}, 'formatters': {'console': {'format': '[%(levelname)-8s] %(name)-12s[%(process)d] - %(message)s'}, 'file': {'format': '%(asctime)s [%(levelname)-8s] %(name)-12s[%(process)d] - %(message)s', 'datefmt': '%m/%d/%Y %I:%M:%S %p'}}, 'handlers': {'console': {'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'console'}, 'file': {'class': 'logging.handlers.TimedRotatingFileHandler', 'formatter': 'file', 'filename': '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/log/rolegate.log', 'interval': 1, 'backupCount': 5, 'encoding': 'utf8', 'when': 'midnight', 'utc': True}, 'mail_admins': {'level': 'ERROR', 'class': 'rolegate.admin_email_handler.ThrottledAdminEmailHandler'}}, 'loggers': {'django.request': {'level': 'DEBUG', 'handlers': ['console'], 'propagate': True}, 'django.template': {'level': 'DEBUG', 'handlers': ['console'], 'propagate': True}, 'django.db.backends': {'level': 'DEBUG', 'handlers': ['console'], 'propagate': False}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = '/'
MANAGERS = []
MEDIA_ROOT = '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend'
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'rolegate.middleware.dev_cors_middleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
PREPEND_WWW = False
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication',), 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer',), 'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser',), 'EXCEPTION_HANDLER': 'api.exceptions.exception_handler.rolegate_api_exception_handler', 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.SearchFilter', 'rest_framework.filters.OrderingFilter'), 'DEFAULT_PAGINATION_CLASS': 'api.paginations.DefaultPagination', 'PAGE_SIZE': 10, 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticatedOrReadOnly',)}
ROOT_URLCONF = 'rolegate.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root@localhost'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'rolegate.settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SILKY_INTERCEPT_PERCENT = 100
STATICFILES_DIRS = ['/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/static']
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/static/collect'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/templates', '/media/verge729/XetiCodeLLC/development/projects_external/rolegate/Role-Gate-Backend/web-build'], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'rolegate.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'

You're seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
display a standard page generated by the handler for this status code.
darrow97 commented 1 month ago

Game Settings leave game button works. Leave Game button on Game Screen (accessible via the three vertical dots in the top right corner) does not work (src/components/games/GameScreen.js).

darrow97 commented 1 month ago

This issue appears to be along the lines of a cache or query problem. When the leave game button is clicked, the user is indeed removed from the game. HOWEVER, upon navigation to the MyGames page, the page loads 3 separate times and one of those times queries game data from somewhere. Refreshing the page will clear this game data

darrow97 commented 1 month ago

Confirmed that there seems to be a race condition of some sort. Navigating to the My Games page after leaving the game will trigger a query that will return the left game. Refreshing the page seems to trigger the same query after the game data is cleared from the DB.

At this time, I am not sure what is required to prevent this query from returning the data. A work around may be sufficient at this time via providing some kind of flag in the navigation from the leave game to my games

darrow97 commented 1 month ago

I changed the navigation upon leaving the game from My Games as the destination to Game Settings as the destination.

Upon navigation to the page, the settings page is as if the player is still a part of the game. After a second or two, the page refreshes and displays the page as if the player is not part of the game