Feat: User Relationships and Session Members.
This commit is contained in:
@@ -14,7 +14,7 @@ MTG Game Page Controller.
|
||||
# internal
|
||||
from business_objects.api import API
|
||||
from business_objects.tcg.mtg_deck import MTG_Deck
|
||||
from business_objects.tcg.mtg_game import MTG_Game
|
||||
from business_objects.tcg.mtg_game import MTG_Game, Parameters_MTG_Game
|
||||
from business_objects.tcg.mtg_game_player import MTG_Game_Player, Parameters_MTG_Game_Player
|
||||
from business_objects.tcg.mtg_game_round import MTG_Game_Round, Parameters_MTG_Game_Round
|
||||
from business_objects.tcg.mtg_game_round_player_damage import MTG_Game_Round_Player_Damage, Parameters_MTG_Game_Round_Player_Damage
|
||||
@@ -50,14 +50,14 @@ routes_mtg_game = Blueprint('routes_mtg_game', __name__)
|
||||
|
||||
@routes_mtg_game.route(Model_View_MTG_Base.HASH_PAGE_MTG_GAMES, methods=['GET'])
|
||||
def games():
|
||||
Helper_App.console_log('mtg games')
|
||||
Helper_App.console_log(f'request_args: {request.args}')
|
||||
# Helper_App.console_log('mtg games')
|
||||
# Helper_App.console_log(f'request_args: {request.args}')
|
||||
try:
|
||||
form_filters = Filters_MTG_Game.from_json(request.args)
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'Error: {e}')
|
||||
# Helper_App.console_log(f'Error: {e}')
|
||||
form_filters = Filters_MTG_Game()
|
||||
Helper_App.console_log(f'form_filters={form_filters}')
|
||||
# Helper_App.console_log(f'form_filters={form_filters}')
|
||||
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -68,13 +68,13 @@ def games():
|
||||
|
||||
model = Model_View_MTG_Games(parameters_game = parameters_game)
|
||||
model.form_filters = form_filters
|
||||
Helper_App.console_log(f'form_filters={form_filters}')
|
||||
# Helper_App.console_log(f'form_filters={form_filters}')
|
||||
return render_template('pages/tcg/mtg/_games.html', model=model)
|
||||
|
||||
|
||||
@routes_mtg_game.route(f'{Model_View_MTG_Base.HASH_PAGE_MTG_GAME}/<int:game_id>', methods=['GET'])
|
||||
def game_detail(game_id):
|
||||
Helper_App.console_log(f'mtg game detail: {game_id}')
|
||||
# Helper_App.console_log(f'mtg game detail: {game_id}')
|
||||
model = Model_View_MTG_Game(game_id=game_id)
|
||||
if not model.is_user_logged_in:
|
||||
return redirect(url_for('routes_mtg_game.home'))
|
||||
@@ -88,7 +88,7 @@ def game_detail(game_id):
|
||||
def save_game():
|
||||
_m = 'routes_mtg_game.save_game'
|
||||
data = Helper_App.get_request_data(request)
|
||||
Helper_App.console_log(f'{_m}\n{data}')
|
||||
# Helper_App.console_log(f'{_m}\n{data}')
|
||||
try:
|
||||
"""
|
||||
form_filters = Filters_MTG_Game.from_json(data.get(Model_View_MTG_Base.FLAG_FORM_FILTERS, {}))
|
||||
@@ -111,10 +111,10 @@ def save_game():
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: 'No games to save.'
|
||||
})
|
||||
Helper_App.console_log(f"Games to save: {games}")
|
||||
# Helper_App.console_log(f"Games to save: {games}")
|
||||
|
||||
obj_game = MTG_Game.from_json(games[0])
|
||||
Helper_App.console_log(f'obj_game={obj_game}')
|
||||
# Helper_App.console_log(f'obj_game={obj_game}')
|
||||
|
||||
game_id, errors = DataStore_MTG.save_mtg_game(obj_game)
|
||||
|
||||
@@ -148,11 +148,69 @@ def trial_game():
|
||||
return send_from_directory('templates/pages/tcg/mtg', 'trial_game.html')
|
||||
|
||||
|
||||
@routes_mtg_game.route('/mtg/api/game/<int:game_id>/is-outdated', methods=['POST'])
|
||||
def get_is_game_data_outdated(game_id):
|
||||
"""Check if saved game has been updated since page load."""
|
||||
_m = 'routes_mtg_game.get_is_game_data_outdated'
|
||||
# Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
data = Helper_App.get_request_data(request)
|
||||
# Helper_App.console_log(f'{_m}\n{data}')
|
||||
try:
|
||||
loaded_game = data.get(Model_View_MTG_Base.FLAG_GAME, None)
|
||||
if loaded_game is None:
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: 'Loaded game not sent for comparison.'
|
||||
})
|
||||
# Helper_App.console_log(f"Loaded game: {loaded_game}")
|
||||
|
||||
obj_loaded_game = MTG_Game.from_json(loaded_game)
|
||||
# Helper_App.console_log(f'obj_loaded_game={obj_loaded_game}')
|
||||
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
|
||||
if not user_session.get_is_logged_in():
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in'
|
||||
}), 401
|
||||
|
||||
# Get saved game
|
||||
parameters_game = Parameters_MTG_Game.get_default(user_session.user_id)
|
||||
parameters_game.game_ids = str(game_id)
|
||||
parameters_game.get_all_game = False
|
||||
saved_games, errors = datastore.get_many_mtg_game(parameters_game)
|
||||
|
||||
if (len(errors) > 0 or len(saved_games) == 0):
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching saved game: {errors}'
|
||||
}), 500
|
||||
|
||||
saved_game = saved_games[0]
|
||||
saved_game.updated_last_on = saved_game.updated_last_on.replace(microsecond = 0)
|
||||
is_game_data_outdated = saved_game.updated_last_on > obj_loaded_game.updated_last_on
|
||||
|
||||
# Helper_App.console_log(f"loaded game updated last on: {obj_loaded_game.updated_last_on}")
|
||||
# Helper_App.console_log(f"saved game updated last on: {saved_game.updated_last_on}")
|
||||
# Helper_App.console_log(f"game oudated?: {is_game_data_outdated}")
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS
|
||||
, Model_View_MTG_Base.FLAG_DATA: is_game_data_outdated
|
||||
})
|
||||
except Exception as e:
|
||||
# Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@routes_mtg_game.route('/mtg/api/game/<int:game_id>/players', methods=['GET'])
|
||||
def get_game_players(game_id):
|
||||
"""Get players for a game with enriched user and deck information."""
|
||||
_m = 'routes_mtg_game.get_game_players'
|
||||
Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
# Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
try:
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -182,7 +240,7 @@ def get_game_players(game_id):
|
||||
, Model_View_MTG_Base.FLAG_DATA: players_json
|
||||
})
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
# Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}'
|
||||
@@ -193,7 +251,7 @@ def get_game_players(game_id):
|
||||
def get_many_game_round(game_id):
|
||||
"""Get rounds for a game."""
|
||||
_m = 'routes_mtg_game.get_many_game_round'
|
||||
Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
# Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
try:
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -223,7 +281,7 @@ def get_many_game_round(game_id):
|
||||
, Model_View_MTG_Base.FLAG_DATA: rounds_json
|
||||
})
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
# Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}'
|
||||
@@ -234,7 +292,7 @@ def get_many_game_round(game_id):
|
||||
def get_many_game_player_damage(game_id):
|
||||
"""Get damage records for a game."""
|
||||
_m = 'routes_mtg_game.get_many_game_player_damage'
|
||||
Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
# Helper_App.console_log(f'{_m}: game_id={game_id}')
|
||||
try:
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -263,7 +321,7 @@ def get_many_game_player_damage(game_id):
|
||||
, Model_View_MTG_Base.FLAG_DATA: damage_records
|
||||
})
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
# Helper_App.console_log(f'{_m} Error: {str(e)}')
|
||||
return jsonify({
|
||||
Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE
|
||||
, Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}'
|
||||
@@ -274,7 +332,7 @@ def get_many_game_player_damage(game_id):
|
||||
def save_game_player():
|
||||
_m = 'routes_mtg_game.save_game_player'
|
||||
data = Helper_App.get_request_data(request)
|
||||
Helper_App.console_log(f'{_m}\n{data}')
|
||||
# Helper_App.console_log(f'{_m}\n{data}')
|
||||
try:
|
||||
"""
|
||||
form_filters = Filters_MTG_Game.from_json(data.get(Model_View_MTG_Base.FLAG_FORM_FILTERS, {}))
|
||||
@@ -301,7 +359,7 @@ def save_game_player():
|
||||
objs_player = []
|
||||
for player in players:
|
||||
obj_player = MTG_Game_Player.from_json(player)
|
||||
Helper_App.console_log(f'obj_player = {obj_player}')
|
||||
# Helper_App.console_log(f'obj_player = {obj_player}')
|
||||
objs_player.append(obj_player)
|
||||
success, errors = DataStore_MTG.save_mtg_game_player(objs_player)
|
||||
|
||||
@@ -325,7 +383,7 @@ def save_game_player():
|
||||
def save_game_round_player_damage():
|
||||
_m = 'routes_mtg_game.save_game_round_player_damage'
|
||||
data = Helper_App.get_request_data(request)
|
||||
Helper_App.console_log(f'{_m}\n{data}')
|
||||
# Helper_App.console_log(f'{_m}\n{data}')
|
||||
try:
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -342,7 +400,7 @@ def save_game_round_player_damage():
|
||||
objs_round = []
|
||||
for round in rounds:
|
||||
obj_round = MTG_Game_Round.from_json(round)
|
||||
Helper_App.console_log(f'obj_round = {obj_round}')
|
||||
# Helper_App.console_log(f'obj_round = {obj_round}')
|
||||
objs_round.append(obj_round)
|
||||
|
||||
damages = data.get(Model_View_MTG_Base.FLAG_DAMAGE, [])
|
||||
@@ -355,7 +413,7 @@ def save_game_round_player_damage():
|
||||
objs_damage = []
|
||||
for damage in damages:
|
||||
obj_damage = MTG_Game_Round_Player_Damage.from_json(damage)
|
||||
Helper_App.console_log(f'obj_damage = {obj_damage}')
|
||||
# Helper_App.console_log(f'obj_damage = {obj_damage}')
|
||||
objs_damage.append(obj_damage)
|
||||
|
||||
success, errors = DataStore_MTG.save_mtg_game_round_player_damage(objs_round, objs_damage)
|
||||
@@ -379,14 +437,14 @@ def save_game_round_player_damage():
|
||||
|
||||
@routes_mtg_game.route(Model_View_MTG_Base.HASH_PAGE_MTG_DECKS, methods=['GET'])
|
||||
def decks():
|
||||
Helper_App.console_log('mtg decks')
|
||||
Helper_App.console_log(f'request_args: {request.args}')
|
||||
# Helper_App.console_log('mtg decks')
|
||||
# Helper_App.console_log(f'request_args: {request.args}')
|
||||
try:
|
||||
form_filters = Filters_MTG_Deck.from_json(request.args)
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'Error: {e}')
|
||||
# Helper_App.console_log(f'Error: {e}')
|
||||
form_filters = Filters_MTG_Deck()
|
||||
Helper_App.console_log(f'form_filters={form_filters}')
|
||||
# Helper_App.console_log(f'form_filters={form_filters}')
|
||||
|
||||
datastore = DataStore_MTG()
|
||||
user_session = datastore.get_user_session()
|
||||
@@ -397,6 +455,6 @@ def decks():
|
||||
|
||||
model = Model_View_MTG_Decks(parameters_deck = parameters_deck)
|
||||
model.form_filters = form_filters
|
||||
Helper_App.console_log(f'form_filters={form_filters}')
|
||||
# Helper_App.console_log(f'form_filters={form_filters}')
|
||||
return render_template('pages/tcg/mtg/_decks.html', model=model)
|
||||
|
||||
|
||||
@@ -82,20 +82,22 @@ def login():
|
||||
, state = quote(hash_callback)
|
||||
)
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f"Error: {str(e)}")
|
||||
Helper_App.console_log(f"Login error: {str(e)}")
|
||||
# Helper_App.console_log(f'redirect: {red}')
|
||||
headers = red.headers['Location']
|
||||
# Helper_App.console_log(f'headers: {headers}')
|
||||
parsed_url = urlparse(headers)
|
||||
query_params = parse_qs(parsed_url.query)
|
||||
Helper_App.console_log(f"""
|
||||
"""
|
||||
Helper_App.console_log(f"" "
|
||||
OAuth Authorize Redirect URL:
|
||||
|
||||
Base URL: {parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}
|
||||
{parsed_url}
|
||||
|
||||
Query Parameters: {query_params}
|
||||
""")
|
||||
"" ")
|
||||
"""
|
||||
return jsonify({'Success': True, Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS, f'{Model_View_Base.FLAG_CALLBACK}': headers})
|
||||
|
||||
except Exception as e:
|
||||
@@ -113,17 +115,17 @@ def login_callback():
|
||||
try:
|
||||
token = oauth.auth0.authorize_access_token()
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f"Error: {str(e)}")
|
||||
Helper_App.console_log(f"Login callback token error: {str(e)}")
|
||||
session[current_app.config['ID_TOKEN_USER']] = token
|
||||
|
||||
try:
|
||||
hash_callback = token.get('hash_callback')
|
||||
if hash_callback is None:
|
||||
Helper_App.console_log('hash is none')
|
||||
# Helper_App.console_log('hash is none')
|
||||
state = request.args.get('state')
|
||||
Helper_App.console_log(f'state: {state}')
|
||||
# Helper_App.console_log(f'state: {state}')
|
||||
hash_callback = state
|
||||
Helper_App.console_log(f'hash_callback: {hash_callback}')
|
||||
# Helper_App.console_log(f'hash_callback: {hash_callback}')
|
||||
except:
|
||||
Helper_App.console_log("get hash callback failed")
|
||||
|
||||
@@ -136,7 +138,7 @@ def login_callback():
|
||||
return redirect(f"{current_app.config['URL_HOST']}{hash_callback}") # login()
|
||||
|
||||
user = User.from_json_auth0(token)
|
||||
Helper_App.console_log(f'user: {user}')
|
||||
# Helper_App.console_log(f'User from Auth0 json: {user}')
|
||||
"""
|
||||
session[Model_View_Base.FLAG_USER] = user.to_json()
|
||||
Helper_App.console_log(f'user stored on session')
|
||||
@@ -146,18 +148,19 @@ def login_callback():
|
||||
try:
|
||||
saved_user, errors = datastore_user.login_user(user)
|
||||
if (len(errors) > 0): raise ValueError(f'Database errors: {errors}')
|
||||
Helper_App.console_log('User logged in')
|
||||
Helper_App.console_log(f'user ({str(type(saved_user))}): {saved_user}')
|
||||
Helper_App.console_log(f'user key: {Model_View_Base.FLAG_USER}')
|
||||
if (saved_user is None): raise ValueError(f'Not found.')
|
||||
# Helper_App.console_log('User logged in')
|
||||
# Helper_App.console_log(f'user ({str(type(saved_user))}): {saved_user}')
|
||||
# Helper_App.console_log(f'user key: {Model_View_Base.FLAG_USER}')
|
||||
saved_user_json = saved_user.to_json()
|
||||
Helper_App.console_log(f'User JSON: {saved_user_json}')
|
||||
# Helper_App.console_log(f'Saved user JSON: {saved_user_json}')
|
||||
session[Model_View_Base.FLAG_USER] = saved_user_json
|
||||
Helper_App.console_log(f'user stored on session')
|
||||
# Helper_App.console_log(f'user stored on session')
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'User not found: {saved_user}\nDatabase query error: {errors}')
|
||||
|
||||
|
||||
Helper_App.console_log(f'user session: {session.get(Model_View_Base.FLAG_USER, "(Key not found)")}')
|
||||
# Helper_App.console_log(f'user session: {session.get(Model_View_Base.FLAG_USER, "(Key not found)")}')
|
||||
return redirect(f"{current_app.config['URL_HOST']}{hash_callback}")
|
||||
except Exception as e:
|
||||
return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Controller error.\n{e}'})
|
||||
@@ -171,7 +174,7 @@ def logout():
|
||||
"client_id": current_app.config['ID_AUTH0_CLIENT'],
|
||||
}
|
||||
)
|
||||
Helper_App.console_log(f"Redirecting to {url_logout}")
|
||||
# Helper_App.console_log(f"Redirecting to {url_logout}")
|
||||
return redirect(url_logout)
|
||||
|
||||
@routes_user.route("/logout_callback")
|
||||
@@ -197,14 +200,14 @@ def user():
|
||||
@routes_user.route(Model_View_User.HASH_PAGE_USER_ACCOUNTS)
|
||||
def users():
|
||||
try:
|
||||
Helper_App.console_log(f'request_args: {request.args}')
|
||||
# Helper_App.console_log(f'request_args: {request.args}')
|
||||
user_session = Model_View_User.get_user_session()
|
||||
if (not user_session.get_is_logged_in()) or (not user_session.can_admin_user):
|
||||
return redirect(url_for('routes_mtg_game.home'))
|
||||
try:
|
||||
form_filters = Filters_User.from_json(request.args)
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'Error: {e}')
|
||||
# Helper_App.console_log(f'Error: {e}')
|
||||
form_filters = Filters_User.get_default()
|
||||
model = Model_View_User(form_filters, hash_page_current = Model_View_User.HASH_PAGE_USER_ACCOUNTS)
|
||||
html_body = render_template('pages/user/_users.html', model = model)
|
||||
@@ -236,7 +239,7 @@ def save_user():
|
||||
objs_user = []
|
||||
for user in users:
|
||||
objs_user.append(User.from_json(user))
|
||||
Helper_App.console_log(f'objs_user={objs_user}')
|
||||
# Helper_App.console_log(f'objs_user={objs_user}')
|
||||
errors = DataStore_User.save_users(data.get('comment', 'No comment'), objs_user)
|
||||
|
||||
if (len(errors) > 0):
|
||||
|
||||
Reference in New Issue
Block a user