1.0.0 : Web Implemented.
This commit is contained in:
120
web/services/web_service.py
Normal file
120
web/services/web_service.py
Normal file
@@ -0,0 +1,120 @@
|
||||
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])
|
||||
Reference in New Issue
Block a user