new market
This commit is contained in:
@@ -101,6 +101,8 @@ def get_pending_command():
|
||||
farm_cmd = _fetch_pending_of_type(c, 'farm_loot', player_id)
|
||||
farm_upgrade_cmd = _fetch_pending_of_type(c, 'farm_upgrade', player_id)
|
||||
research_cmd = _fetch_pending_of_type(c, 'research', player_id)
|
||||
scan_market_cmd = _fetch_pending_of_type(c, 'scan_market', player_id)
|
||||
accept_market_offer_cmd = _fetch_pending_of_type(c, 'accept_market_offer', player_id)
|
||||
sync_req = _check_and_reset_sync(c, player_id)
|
||||
|
||||
# Also return current farm settings so TM knows loot_option
|
||||
@@ -119,6 +121,8 @@ def get_pending_command():
|
||||
'build': build_cmd,
|
||||
'recruit': recruit_cmd,
|
||||
'market': market_cmd,
|
||||
'scan_market': scan_market_cmd,
|
||||
'accept_market_offer': accept_market_offer_cmd,
|
||||
'research': research_cmd,
|
||||
'farm': farm_cmd,
|
||||
'farm_upgrade': farm_upgrade_cmd,
|
||||
@@ -202,3 +206,28 @@ def captcha_alert():
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return jsonify({'ok': True})
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# POST /api/market_data
|
||||
# Tampermonkey uploads the market scan data.
|
||||
# ------------------------------------------------------------------
|
||||
@api.route('/api/market_data', methods=['POST'])
|
||||
def upload_market_data():
|
||||
player_id = request.args.get('player_id')
|
||||
if not player_id:
|
||||
return jsonify({'error': 'no player_id provided'}), 400
|
||||
|
||||
data = request.get_json(silent=True) or {}
|
||||
kv_key = f'market_data_{player_id}'
|
||||
|
||||
conn = get_db()
|
||||
conn.execute('''
|
||||
INSERT INTO kv_store (key, value, updated_at)
|
||||
VALUES (?, ?, ?)
|
||||
ON CONFLICT(key) DO UPDATE SET
|
||||
value = excluded.value,
|
||||
updated_at = excluded.updated_at
|
||||
''', (kv_key, json.dumps(data), datetime.utcnow().isoformat()))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return jsonify({'ok': True})
|
||||
|
||||
@@ -129,6 +129,24 @@ def get_farm_data():
|
||||
return jsonify(farms_summary)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# GET /dashboard/market-data
|
||||
# Returns the latest market scan data for a player.
|
||||
# ------------------------------------------------------------------
|
||||
@dashboard.route('/dashboard/market-data', methods=['GET'])
|
||||
def get_market_data():
|
||||
player_id = request.args.get('player_id')
|
||||
conn = get_db()
|
||||
row = conn.execute(
|
||||
"SELECT value, updated_at FROM kv_store WHERE key = ?", (f'market_data_{player_id}', )
|
||||
).fetchone()
|
||||
conn.close()
|
||||
|
||||
if row:
|
||||
return jsonify({'data': json.loads(row['value']), 'updated_at': row['updated_at']})
|
||||
return jsonify({'data': None, 'updated_at': None})
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# GET /dashboard/towns
|
||||
# Returns all known towns with their latest state snapshot.
|
||||
@@ -266,8 +284,8 @@ def create_command():
|
||||
return jsonify({'error': f'missing field: {field}'}), 400
|
||||
|
||||
cmd_type = data['type']
|
||||
if cmd_type not in ('build', 'recruit', 'market_offer', 'farm_loot', 'farm_upgrade', 'research'):
|
||||
return jsonify({'error': 'type must be build, recruit, market_offer, farm_loot, farm_upgrade, or research'}), 400
|
||||
if cmd_type not in ('build', 'recruit', 'market_offer', 'farm_loot', 'farm_upgrade', 'research', 'scan_market', 'accept_market_offer'):
|
||||
return jsonify({'error': 'type must be build, recruit, market_offer, farm_loot, farm_upgrade, research, scan_market, or accept_market_offer'}), 400
|
||||
|
||||
# Reject if the Tampermonkey client is offline (no state push in last 150 s)
|
||||
conn = get_db()
|
||||
|
||||
Reference in New Issue
Block a user