From 0e63d460788404a9f5caa42ea26e1af98e9b67dd Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Wed, 23 Oct 2024 17:26:35 -0700 Subject: [PATCH] Use django instead --- backend/Dockerfile | 13 -- backend/alembic.ini | 118 ----------------- backend/availabili_tf/__init__.py | 0 backend/availabili_tf/asgi.py | 16 +++ backend/availabili_tf/settings.py | 123 ++++++++++++++++++ backend/availabili_tf/urls.py | 22 ++++ backend/availabili_tf/wsgi.py | 16 +++ backend/manage.py | 22 ++++ backend/migrations/README | 1 - backend/migrations/env.py | 84 ------------ backend/migrations/script.py.mako | 26 ---- ...92d35c_rename_playerrole_to_playerroles.py | 48 ------- .../versions/4c2197a648ef_add_player_table.py | 34 ----- ...32e89a_add_playerinfo_tables_and_others.py | 60 --------- ...8fccde69_rename_table_player_to_players.py | 40 ------ backend/requirements.txt | 9 +- backend/src/main.py | 7 - backend/src/models.py | 85 ------------ 18 files changed, 203 insertions(+), 521 deletions(-) delete mode 100644 backend/Dockerfile delete mode 100644 backend/alembic.ini create mode 100644 backend/availabili_tf/__init__.py create mode 100644 backend/availabili_tf/asgi.py create mode 100644 backend/availabili_tf/settings.py create mode 100644 backend/availabili_tf/urls.py create mode 100644 backend/availabili_tf/wsgi.py create mode 100755 backend/manage.py delete mode 100644 backend/migrations/README delete mode 100644 backend/migrations/env.py delete mode 100644 backend/migrations/script.py.mako delete mode 100644 backend/migrations/versions/204aa692d35c_rename_playerrole_to_playerroles.py delete mode 100644 backend/migrations/versions/4c2197a648ef_add_player_table.py delete mode 100644 backend/migrations/versions/c23b1c32e89a_add_playerinfo_tables_and_others.py delete mode 100644 backend/migrations/versions/dcdb8fccde69_rename_table_player_to_players.py delete mode 100644 backend/src/main.py delete mode 100644 backend/src/models.py diff --git a/backend/Dockerfile b/backend/Dockerfile deleted file mode 100644 index 1041602..0000000 --- a/backend/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM python:3.11-buster - -RUN mkdir app -WORKDIR /app - -ENV PATH="${PATH}:/root/.local/bin" -ENV PYTHONPATH=. - -COPY requirements.txt . -RUN pip install --upgrade pip -RUN pip install -r requirements.txt - -COPY src/ . diff --git a/backend/alembic.ini b/backend/alembic.ini deleted file mode 100644 index 0c8b408..0000000 --- a/backend/alembic.ini +++ /dev/null @@ -1,118 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts -# Use forward slashes (/) also on windows to provide an os agnostic path -script_location = migrations - -# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s -# Uncomment the line below if you want the files to be prepended with date and time -# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file -# for all available tokens -# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s - -# sys.path path, will be prepended to sys.path if present. -# defaults to the current working directory. -prepend_sys_path = . - -# timezone to use when rendering the date within the migration file -# as well as the filename. -# If specified, requires the python>=3.9 or backports.zoneinfo library. -# Any required deps can installed by adding `alembic[tz]` to the pip requirements -# string value is passed to ZoneInfo() -# leave blank for localtime -# timezone = - -# max length of characters to apply to the "slug" field -# truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -# version location specification; This defaults -# to migrations/versions. When using multiple version -# directories, initial revisions must be specified with --version-path. -# The path separator used here should be the separator specified by "version_path_separator" below. -# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions - -# version path separator; As mentioned above, this is the character used to split -# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. -# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. -# Valid values for version_path_separator are: -# -# version_path_separator = : -# version_path_separator = ; -# version_path_separator = space -# version_path_separator = newline -version_path_separator = os # Use os.pathsep. Default configuration used for new projects. - -# set to 'true' to search source files recursively -# in each "version_locations" directory -# new in Alembic version 1.10 -# recursive_version_locations = false - -# the output encoding used when revision files -# are written from script.py.mako -# output_encoding = utf-8 - -#sqlalchemy.url = driver://user:pass@localhost/dbname -sqlalchemy.url = sqlite:///../sqlite3/sqlite3.db - - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks = black -# black.type = console_scripts -# black.entrypoint = black -# black.options = -l 79 REVISION_SCRIPT_FILENAME - -# lint with attempts to fix using "ruff" - use the exec runner, execute a binary -# hooks = ruff -# ruff.type = exec -# ruff.executable = %(here)s/.venv/bin/ruff -# ruff.options = --fix REVISION_SCRIPT_FILENAME - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/backend/availabili_tf/__init__.py b/backend/availabili_tf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/availabili_tf/asgi.py b/backend/availabili_tf/asgi.py new file mode 100644 index 0000000..1bf6b4c --- /dev/null +++ b/backend/availabili_tf/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for availabili_tf project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'availabili_tf.settings') + +application = get_asgi_application() diff --git a/backend/availabili_tf/settings.py b/backend/availabili_tf/settings.py new file mode 100644 index 0000000..521cad8 --- /dev/null +++ b/backend/availabili_tf/settings.py @@ -0,0 +1,123 @@ +""" +Django settings for availabili_tf project. + +Generated by 'django-admin startproject' using Django 5.1.2. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.1/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-zxk500vvcl9@tru__++ze08$#=%yr_*y_*w9bup$thf@p6gn=v' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'availabili_tf.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + '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', + ], + }, + }, +] + +WSGI_APPLICATION = 'availabili_tf.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.1/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/backend/availabili_tf/urls.py b/backend/availabili_tf/urls.py new file mode 100644 index 0000000..3aa1e7a --- /dev/null +++ b/backend/availabili_tf/urls.py @@ -0,0 +1,22 @@ +""" +URL configuration for availabili_tf project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/backend/availabili_tf/wsgi.py b/backend/availabili_tf/wsgi.py new file mode 100644 index 0000000..4abccfe --- /dev/null +++ b/backend/availabili_tf/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for availabili_tf project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'availabili_tf.settings') + +application = get_wsgi_application() diff --git a/backend/manage.py b/backend/manage.py new file mode 100755 index 0000000..4d52be3 --- /dev/null +++ b/backend/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'availabili_tf.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/backend/migrations/README b/backend/migrations/README deleted file mode 100644 index 98e4f9c..0000000 --- a/backend/migrations/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration. \ No newline at end of file diff --git a/backend/migrations/env.py b/backend/migrations/env.py deleted file mode 100644 index f14ad09..0000000 --- a/backend/migrations/env.py +++ /dev/null @@ -1,84 +0,0 @@ -from logging.config import fileConfig - -from sqlalchemy import engine_from_config -from sqlalchemy import pool - -from alembic import context - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -if config.config_file_name is not None: - fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -from src.models import Base -target_metadata = Base.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - - -def run_migrations_offline() -> None: - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure( - url=url, - target_metadata=target_metadata, - literal_binds=True, - dialect_opts={"paramstyle": "named"}, - ) - - with context.begin_transaction(): - context.run_migrations() - - -def run_migrations_online() -> None: - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - connectable = engine_from_config( - config.get_section(config.config_ini_section, {}), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) - - with connectable.connect() as connection: - context.configure( - connection=connection, target_metadata=target_metadata - ) - - with context.begin_transaction(): - context.run_migrations() - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() - -import os -db_uri = os.getenv("DB_URI") -if db_uri is str: - config.set_main_option("sqlalchemy.url", db_uri) diff --git a/backend/migrations/script.py.mako b/backend/migrations/script.py.mako deleted file mode 100644 index fbc4b07..0000000 --- a/backend/migrations/script.py.mako +++ /dev/null @@ -1,26 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision: str = ${repr(up_revision)} -down_revision: Union[str, None] = ${repr(down_revision)} -branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} -depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} - - -def upgrade() -> None: - ${upgrades if upgrades else "pass"} - - -def downgrade() -> None: - ${downgrades if downgrades else "pass"} diff --git a/backend/migrations/versions/204aa692d35c_rename_playerrole_to_playerroles.py b/backend/migrations/versions/204aa692d35c_rename_playerrole_to_playerroles.py deleted file mode 100644 index 988301d..0000000 --- a/backend/migrations/versions/204aa692d35c_rename_playerrole_to_playerroles.py +++ /dev/null @@ -1,48 +0,0 @@ -"""Rename playerrole to playerroles - -Revision ID: 204aa692d35c -Revises: c23b1c32e89a -Create Date: 2024-10-23 15:57:01.483040 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '204aa692d35c' -down_revision: Union[str, None] = 'c23b1c32e89a' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('playerroles', - sa.Column('playerinfo_id', sa.BigInteger(), nullable=False), - sa.Column('team_id', sa.Integer(), nullable=False), - sa.Column('class_role', sa.Enum('P_SCOUT', 'F_SCOUT', 'SCOUT', 'P_SOLLY', 'ROAMER', 'SOLDIER', 'PYRO', 'DEMO', 'HEAVY', 'ENGIE', 'MEDIC', 'SNIPER', 'SPY', name='classrole'), nullable=False), - sa.Column('main', sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint(['playerinfo_id'], ['playerinfo_teams.playerinfo_id'], ), - sa.ForeignKeyConstraint(['team_id'], ['playerinfo_teams.team_id'], ), - sa.PrimaryKeyConstraint('playerinfo_id', 'team_id', 'class_role') - ) - op.drop_table('playerrole') - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('playerrole', - sa.Column('playerinfo_id', sa.BIGINT(), nullable=False), - sa.Column('team_id', sa.INTEGER(), nullable=False), - sa.Column('class_role', sa.VARCHAR(length=7), nullable=False), - sa.Column('main', sa.BOOLEAN(), nullable=True), - sa.ForeignKeyConstraint(['playerinfo_id'], ['playerinfo_teams.playerinfo_id'], ), - sa.ForeignKeyConstraint(['team_id'], ['playerinfo_teams.team_id'], ), - sa.PrimaryKeyConstraint('playerinfo_id', 'team_id', 'class_role') - ) - op.drop_table('playerroles') - # ### end Alembic commands ### diff --git a/backend/migrations/versions/4c2197a648ef_add_player_table.py b/backend/migrations/versions/4c2197a648ef_add_player_table.py deleted file mode 100644 index b634c16..0000000 --- a/backend/migrations/versions/4c2197a648ef_add_player_table.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Add player table - -Revision ID: 4c2197a648ef -Revises: -Create Date: 2024-10-23 15:20:43.046943 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '4c2197a648ef' -down_revision: Union[str, None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('player', - sa.Column('steam_id', sa.BigInteger(), nullable=False), - sa.Column('name', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('steam_id') - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('player') - # ### end Alembic commands ### diff --git a/backend/migrations/versions/c23b1c32e89a_add_playerinfo_tables_and_others.py b/backend/migrations/versions/c23b1c32e89a_add_playerinfo_tables_and_others.py deleted file mode 100644 index 13e09d9..0000000 --- a/backend/migrations/versions/c23b1c32e89a_add_playerinfo_tables_and_others.py +++ /dev/null @@ -1,60 +0,0 @@ -"""Add PlayerInfo tables and others - -Revision ID: c23b1c32e89a -Revises: dcdb8fccde69 -Create Date: 2024-10-23 15:54:26.432098 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'c23b1c32e89a' -down_revision: Union[str, None] = 'dcdb8fccde69' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('teams', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('team_name', sa.String(length=63), nullable=False), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('playerinfo', - sa.Column('player_id', sa.BigInteger(), nullable=False), - sa.ForeignKeyConstraint(['player_id'], ['players.steam_id'], ), - sa.PrimaryKeyConstraint('player_id') - ) - op.create_table('playerinfo_teams', - sa.Column('playerinfo_id', sa.BigInteger(), nullable=False), - sa.Column('team_id', sa.Integer(), nullable=False), - sa.Column('team_role', sa.Enum('PLAYER', 'COACH_MENTOR', 'TEAM_CAPTAIN', name='teamrole'), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['playerinfo_id'], ['playerinfo.player_id'], ), - sa.ForeignKeyConstraint(['team_id'], ['teams.id'], ), - sa.PrimaryKeyConstraint('playerinfo_id', 'team_id') - ) - op.create_table('playerrole', - sa.Column('playerinfo_id', sa.BigInteger(), nullable=False), - sa.Column('team_id', sa.Integer(), nullable=False), - sa.Column('class_role', sa.Enum('P_SCOUT', 'F_SCOUT', 'SCOUT', 'P_SOLLY', 'ROAMER', 'SOLDIER', 'PYRO', 'DEMO', 'HEAVY', 'ENGIE', 'MEDIC', 'SNIPER', 'SPY', name='classrole'), nullable=False), - sa.Column('main', sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint(['playerinfo_id'], ['playerinfo_teams.playerinfo_id'], ), - sa.ForeignKeyConstraint(['team_id'], ['playerinfo_teams.team_id'], ), - sa.PrimaryKeyConstraint('playerinfo_id', 'team_id', 'class_role') - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('playerrole') - op.drop_table('playerinfo_teams') - op.drop_table('playerinfo') - op.drop_table('teams') - # ### end Alembic commands ### diff --git a/backend/migrations/versions/dcdb8fccde69_rename_table_player_to_players.py b/backend/migrations/versions/dcdb8fccde69_rename_table_player_to_players.py deleted file mode 100644 index 209e93c..0000000 --- a/backend/migrations/versions/dcdb8fccde69_rename_table_player_to_players.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Rename table player to players - -Revision ID: dcdb8fccde69 -Revises: 4c2197a648ef -Create Date: 2024-10-23 15:33:02.447366 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'dcdb8fccde69' -down_revision: Union[str, None] = '4c2197a648ef' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('players', - sa.Column('steam_id', sa.BigInteger(), nullable=False), - sa.Column('name', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('steam_id') - ) - op.drop_table('player') - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('player', - sa.Column('steam_id', sa.BIGINT(), nullable=False), - sa.Column('name', sa.VARCHAR(), nullable=True), - sa.PrimaryKeyConstraint('steam_id') - ) - op.drop_table('players') - # ### end Alembic commands ### diff --git a/backend/requirements.txt b/backend/requirements.txt index 28a882c..8b3d711 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,5 +1,4 @@ -fastapi -uvicorn -sqlalchemy -psycopg -alembic +djangorestframework +markdown +pygments +django-filter diff --git a/backend/src/main.py b/backend/src/main.py deleted file mode 100644 index 82c8324..0000000 --- a/backend/src/main.py +++ /dev/null @@ -1,7 +0,0 @@ -from fastapi import FastAPI - -app = FastAPI() - -@app.get("/") -async def index(): - return "lol abc" diff --git a/backend/src/models.py b/backend/src/models.py deleted file mode 100644 index 4be4a08..0000000 --- a/backend/src/models.py +++ /dev/null @@ -1,85 +0,0 @@ -# pyright: basic -import enum -import os -from sys import stderr -from typing import override -from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, Integer, create_engine, Column, BigInteger, String, func -from sqlalchemy.orm import relationship, sessionmaker, declarative_base - -db_uri = os.getenv("DB_URI") - -if db_uri is not str: - db_uri = "sqlite:///./sqlite3/db.sqlite3" - -engine = create_engine(db_uri) -Session = sessionmaker(bind=engine) - -Base = declarative_base() -Base.metadata.create_all(engine) - -class Player(Base): - __tablename__ = "players" - - steam_id = Column(BigInteger, primary_key=True) - name = Column(String) - - @override - def __repr__(self): - return str(self.name) - -class Team(Base): - __tablename__ = "teams" - - id = Column(Integer, primary_key=True, autoincrement=True) - team_name = Column(String(63), nullable=False) - - @override - def __repr__(self) -> str: - return str(self.team_name) - -class PlayerInfo(Base): - __tablename__ = "playerinfo" - - player_id = Column(BigInteger, ForeignKey("players.steam_id"), primary_key=True) - player = relationship("Player", back_populates="playerinfo") - teams = relationship("Team", secondary="playerinfo_teams", back_populates="players") - -class TeamRole(enum.Enum): - PLAYER = "PL" - COACH_MENTOR = "CM" - TEAM_CAPTAIN = "TC" - -class PlayerInfo_Team(Base): - __tablename__ = "playerinfo_teams" - - playerinfo_id = Column(BigInteger, ForeignKey("playerinfo.player_id"), primary_key=True) - team_id = Column(Integer, ForeignKey("teams.id"), primary_key=True) - team_role = Column(Enum(TeamRole), default=TeamRole.PLAYER, nullable=False) - created_at = Column(DateTime, default=func.now(), nullable=False) - -class ClassRole(enum.Enum): - P_SCOUT = "P_SCOUT" - F_SCOUT = "F_SCOUT" - SCOUT = "SCOUT" - P_SOLLY = "P_SOLLY" - ROAMER = "ROAMER" - SOLDIER = "SOLDIER" - PYRO = "PYRO" - DEMO = "DEMO" - HEAVY = "HEAVY" - ENGIE = "ENGIE" - MEDIC = "MEDIC" - SNIPER = "SNIPER" - SPY = "SPY" - -class PlayerRole(Base): - __tablename__ = "playerroles" - - playerinfo_id = Column(BigInteger, ForeignKey("playerinfo_teams.playerinfo_id"), primary_key=True) - team_id = Column(Integer, ForeignKey("playerinfo_teams.team_id"), primary_key=True) - class_role = Column(Enum(ClassRole), nullable=False, primary_key=True) - main = Column(Boolean, default=True) - - @override - def __repr__(self): - return f""