From 69c33c3a75db18bb6eec27185a6df6e15c0e76c6 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Wed, 9 Oct 2019 15:42:38 -0700 Subject: [PATCH] create room --- api/decorators.py | 4 +++- api/rooms/api_rooms.py | 10 +++++--- migrations/versions/bafcadd8390e_.py | 30 ++++++++++++++++++++++++ migrations/versions/e5b4175be075_.py | 35 ++++++++++++++++++++++++++++ models/GameRoom.py | 17 ++++++++++---- models/User.py | 2 +- 6 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 migrations/versions/bafcadd8390e_.py create mode 100644 migrations/versions/e5b4175be075_.py diff --git a/api/decorators.py b/api/decorators.py index e971bec..18a4cd2 100644 --- a/api/decorators.py +++ b/api/decorators.py @@ -1,13 +1,15 @@ -from flask import Blueprint, request, jsonify, session +from flask import Blueprint, request, jsonify, session, abort import os import jwt def jwt_required(): def decorator(func): def authorized(*args, **kwargs): + print(request.headers) auth_header = request.headers.get('Authorization') or None if auth_header: auth_token = auth_header.split(" ")[1] + print(auth_token) if jwt.decode(auth_token, os.environ.get('SECRET_KEY')): return func(*args, **kwargs) else: diff --git a/api/rooms/api_rooms.py b/api/rooms/api_rooms.py index 37ac0ff..14039b4 100644 --- a/api/rooms/api_rooms.py +++ b/api/rooms/api_rooms.py @@ -1,6 +1,7 @@ +from flask import Blueprint, request, jsonify, session from models.User import User, user_schema, users_schema from models.GameRoom import GameRoom -from flask import Blueprint, request, jsonify, session +from database import db from ..decorators import jwt_required api_rooms = Blueprint('api_rooms', __name__, url_prefix='/api/rooms') @@ -18,13 +19,16 @@ def get_rooms(): @api_rooms.route('/', methods=['POST']) @jwt_required() def post_room(): + print('Hey it\'s a POST request') data = request.get_json() + print(data) try: room = GameRoom( name = data['name'], description = data['description'], - private = data['private'], - language = data['language'] + # TODO add support for private rooms and multiple languages + # private = data['private'], + # language = data['language'] ) db.session.add(room) db.session.commit() diff --git a/migrations/versions/bafcadd8390e_.py b/migrations/versions/bafcadd8390e_.py new file mode 100644 index 0000000..e25f01f --- /dev/null +++ b/migrations/versions/bafcadd8390e_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: bafcadd8390e +Revises: e5b4175be075 +Create Date: 2019-10-09 15:34:31.194998 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'bafcadd8390e' +down_revision = 'e5b4175be075' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('game_rooms', sa.Column('language', sa.Integer(), nullable=False)) + op.create_foreign_key(None, 'game_rooms', 'room_languages', ['language'], ['id']) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(None, 'game_rooms', type_='foreignkey') + op.drop_column('game_rooms', 'language') + # ### end Alembic commands ### diff --git a/migrations/versions/e5b4175be075_.py b/migrations/versions/e5b4175be075_.py new file mode 100644 index 0000000..025736a --- /dev/null +++ b/migrations/versions/e5b4175be075_.py @@ -0,0 +1,35 @@ +"""empty message + +Revision ID: e5b4175be075 +Revises: 02be4c8fbd69 +Create Date: 2019-10-09 15:34:06.312258 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = 'e5b4175be075' +down_revision = '02be4c8fbd69' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('room_languages', + sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), + sa.Column('name', sa.String(length=40), nullable=False), + sa.Column('iso', sa.String(length=2), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.drop_column('game_rooms', 'language') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('game_rooms', sa.Column('language', postgresql.ENUM(name='languages'), autoincrement=False, nullable=False)) + op.drop_table('room_languages') + # ### end Alembic commands ### diff --git a/models/GameRoom.py b/models/GameRoom.py index 0a83fb3..ce6d477 100644 --- a/models/GameRoom.py +++ b/models/GameRoom.py @@ -1,14 +1,19 @@ from app import db, ma # TODO User >---< GameRoom -import enum +# ! Game Room >-< Users join table game_rooms_users = db.Table('game_rooms_users', db.Column('user_id', db.Integer, db.ForeignKey('users.id'), primary_key=True), db.Column('game_rooms_id', db.Integer, db.ForeignKey('game_rooms.id'), primary_key=True) ) -class Languages(enum.Enum): - EN = "English" +class RoomLanguages(db.Model): + __tablename__ = "room_languages" + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + name = db.Column(db.String(40), nullable=False) + iso = db.Column(db.String(2), nullable=False) + class GameRoom(db.Model): __tablename__ = "game_rooms" @@ -18,7 +23,6 @@ class GameRoom(db.Model): name = db.Column(db.String(40), nullable=False) description = db.Column(db.String(200), nullable=False) private = db.Column(db.Boolean(), nullable=False, default=False) - language = db.Column(db.Enum(Languages), nullable=False) # ! Foreign Keys users = db.relationship( @@ -27,8 +31,11 @@ class GameRoom(db.Model): lazy='subquery', backref=db.backref('game_rooms', lazy=True) ) + + language = db.Column(db.Integer, db.ForeignKey("room_languages.id"), nullable=False) + - def __init__(self, name, description, private=False, language=Languages.EN): + def __init__(self, name, description, private=False, language=1): self.name = name self.description = description self.private = private diff --git a/models/User.py b/models/User.py index 73c6bea..9273f31 100644 --- a/models/User.py +++ b/models/User.py @@ -61,7 +61,7 @@ class User(db.Model): elo = db.Column(db.Integer) rank_certainty = db.Column(db.Boolean, nullable=False, default=False) - def __init__(self, username, email, password, rank=Ranks.UR, admin=False): + def __init__(self, username, email, password, rank=Ranks.K1, admin=False): self.username = username self.email = email self.password = bcrypt.generate_password_hash(