121 lines
4.6 KiB
Python
121 lines
4.6 KiB
Python
from web.database import query_db, execute_db
|
|
import json
|
|
from datetime import datetime
|
|
|
|
class WebService:
|
|
# --- Comments ---
|
|
@staticmethod
|
|
def get_comments(target_type, target_id):
|
|
sql = "SELECT * FROM comments WHERE target_type = ? AND target_id = ? AND is_hidden = 0 ORDER BY created_at DESC"
|
|
return query_db('web', sql, [target_type, target_id])
|
|
|
|
@staticmethod
|
|
def add_comment(user_id, username, target_type, target_id, content):
|
|
sql = """
|
|
INSERT INTO comments (user_id, username, target_type, target_id, content)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
"""
|
|
return execute_db('web', sql, [user_id, username, target_type, target_id, content])
|
|
|
|
@staticmethod
|
|
def like_comment(comment_id):
|
|
sql = "UPDATE comments SET likes = likes + 1 WHERE id = ?"
|
|
return execute_db('web', sql, [comment_id])
|
|
|
|
# --- Wiki ---
|
|
@staticmethod
|
|
def get_wiki_page(path):
|
|
sql = "SELECT * FROM wiki_pages WHERE path = ?"
|
|
return query_db('web', sql, [path], one=True)
|
|
|
|
@staticmethod
|
|
def get_all_wiki_pages():
|
|
sql = "SELECT path, title FROM wiki_pages ORDER BY path"
|
|
return query_db('web', sql)
|
|
|
|
@staticmethod
|
|
def save_wiki_page(path, title, content, updated_by):
|
|
# Upsert logic
|
|
check = query_db('web', "SELECT id FROM wiki_pages WHERE path = ?", [path], one=True)
|
|
if check:
|
|
sql = "UPDATE wiki_pages SET title=?, content=?, updated_by=?, updated_at=CURRENT_TIMESTAMP WHERE path=?"
|
|
execute_db('web', sql, [title, content, updated_by, path])
|
|
else:
|
|
sql = "INSERT INTO wiki_pages (path, title, content, updated_by) VALUES (?, ?, ?, ?)"
|
|
execute_db('web', sql, [path, title, content, updated_by])
|
|
|
|
# --- Team Lineups ---
|
|
@staticmethod
|
|
def save_lineup(name, description, player_ids, lineup_id=None):
|
|
# player_ids is a list
|
|
ids_json = json.dumps(player_ids)
|
|
if lineup_id:
|
|
sql = "UPDATE team_lineups SET name=?, description=?, player_ids_json=? WHERE id=?"
|
|
return execute_db('web', sql, [name, description, ids_json, lineup_id])
|
|
else:
|
|
sql = "INSERT INTO team_lineups (name, description, player_ids_json) VALUES (?, ?, ?)"
|
|
return execute_db('web', sql, [name, description, ids_json])
|
|
|
|
@staticmethod
|
|
def get_lineups():
|
|
return query_db('web', "SELECT * FROM team_lineups ORDER BY created_at DESC")
|
|
|
|
@staticmethod
|
|
def get_lineup(lineup_id):
|
|
return query_db('web', "SELECT * FROM team_lineups WHERE id = ?", [lineup_id], one=True)
|
|
|
|
|
|
# --- Users / Auth ---
|
|
@staticmethod
|
|
def get_user_by_token(token):
|
|
sql = "SELECT * FROM users WHERE token = ?"
|
|
return query_db('web', sql, [token], one=True)
|
|
|
|
# --- Player Metadata ---
|
|
@staticmethod
|
|
def get_player_metadata(steam_id):
|
|
sql = "SELECT * FROM player_metadata WHERE steam_id_64 = ?"
|
|
row = query_db('web', sql, [steam_id], one=True)
|
|
if row:
|
|
res = dict(row)
|
|
try:
|
|
res['tags'] = json.loads(res['tags']) if res['tags'] else []
|
|
except:
|
|
res['tags'] = []
|
|
return res
|
|
return {'steam_id_64': steam_id, 'notes': '', 'tags': []}
|
|
|
|
@staticmethod
|
|
def update_player_metadata(steam_id, notes=None, tags=None):
|
|
# Upsert
|
|
check = query_db('web', "SELECT steam_id_64 FROM player_metadata WHERE steam_id_64 = ?", [steam_id], one=True)
|
|
|
|
tags_json = json.dumps(tags) if tags is not None else None
|
|
|
|
if check:
|
|
# Update
|
|
clauses = []
|
|
args = []
|
|
if notes is not None:
|
|
clauses.append("notes = ?")
|
|
args.append(notes)
|
|
if tags is not None:
|
|
clauses.append("tags = ?")
|
|
args.append(tags_json)
|
|
|
|
if clauses:
|
|
clauses.append("updated_at = CURRENT_TIMESTAMP")
|
|
sql = f"UPDATE player_metadata SET {', '.join(clauses)} WHERE steam_id_64 = ?"
|
|
args.append(steam_id)
|
|
execute_db('web', sql, args)
|
|
else:
|
|
# Insert
|
|
sql = "INSERT INTO player_metadata (steam_id_64, notes, tags) VALUES (?, ?, ?)"
|
|
execute_db('web', sql, [steam_id, notes or '', tags_json or '[]'])
|
|
|
|
# --- Strategy Board ---
|
|
@staticmethod
|
|
def save_strategy_board(title, map_name, data_json, created_by):
|
|
sql = "INSERT INTO strategy_boards (title, map_name, data_json, created_by) VALUES (?, ?, ?, ?)"
|
|
return execute_db('web', sql, [title, map_name, data_json, created_by])
|