mirror of
https://github.com/qwerfd2/Groove_Coaster_2_Server.git
synced 2026-02-22 17:32:44 +00:00
Fixes
This commit is contained in:
@@ -382,6 +382,7 @@ async def ttag(request: Request):
|
||||
gcoin_mp_4='selected' if gcoin_mp == 4 else '',
|
||||
gcoin_mp_5='selected' if gcoin_mp == 5 else '',
|
||||
savefile_id=savefile_id,
|
||||
debug_info=original_field,
|
||||
|
||||
)
|
||||
else:
|
||||
|
||||
@@ -150,12 +150,12 @@ async def web_admin_table_set(request: Request):
|
||||
raise ValueError("Row data must be a JSON object.")
|
||||
id_field = None
|
||||
# Find primary key field (id or objectId)
|
||||
for pk in ["id"]:
|
||||
for pk in ["id", "device_id"]:
|
||||
if pk in row_data:
|
||||
id_field = pk
|
||||
break
|
||||
if not id_field:
|
||||
raise ValueError("Row data must contain a primary key ('id' or 'objectId').")
|
||||
raise ValueError("Row data must contain a primary key ('id' or 'device_id').")
|
||||
for key, value in row_data.items():
|
||||
if key not in schema:
|
||||
raise ValueError(f"Field '{key}' does not exist in table schema.")
|
||||
@@ -236,6 +236,11 @@ async def web_admin_table_delete(request: Request):
|
||||
table_name = params.get("table")
|
||||
row_id = params.get("id")
|
||||
|
||||
if not row_id:
|
||||
row_id = params.get("device_id")
|
||||
if not row_id:
|
||||
return JSONResponse({"status": "failed", "message": "Row ID is required."}, status_code=402)
|
||||
|
||||
if table_name not in TABLE_MAP:
|
||||
return JSONResponse({"status": "failed", "message": "Invalid table name."}, status_code=401)
|
||||
|
||||
@@ -244,8 +249,8 @@ async def web_admin_table_delete(request: Request):
|
||||
|
||||
table, _ = TABLE_MAP[table_name]
|
||||
|
||||
if table_name in ["results"]:
|
||||
delete_query = table.delete().where(table.c.rid == row_id)
|
||||
if table_name in ["devices"]:
|
||||
delete_query = table.delete().where(table.c.device_id == row_id)
|
||||
else:
|
||||
delete_query = table.delete().where(table.c.id == row_id)
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ from sqlalchemy import select, update
|
||||
import base64
|
||||
import aiofiles
|
||||
import json
|
||||
import random
|
||||
|
||||
from config import START_COIN, SIMULTANEOUS_LOGINS
|
||||
from api.template import START_AVATARS, START_STAGES
|
||||
@@ -338,8 +339,19 @@ async def get_user_entitlement_from_devices(user_id):
|
||||
stage_set.update(my_stages)
|
||||
avatar_set.update(my_avatars)
|
||||
|
||||
stage_set = sorted(stage_set)
|
||||
|
||||
if len(stage_set) > 500:
|
||||
rand_toss = True if random.random() < 0.5 else False
|
||||
if rand_toss:
|
||||
stage_set = stage_set[:500]
|
||||
else:
|
||||
stage_set = stage_set[-500:]
|
||||
|
||||
return list(stage_set), list(avatar_set)
|
||||
|
||||
|
||||
|
||||
async def set_user_data_using_decrypted_fields(decrypted_fields, data_fields):
|
||||
data_fields['updated_at'] = datetime.utcnow()
|
||||
device_id = decrypted_fields[b'vid'][0].decode()
|
||||
|
||||
@@ -160,7 +160,8 @@ devices = Table(
|
||||
Column("avatar", Integer, default=1),
|
||||
Column("created_at", DateTime, default=datetime.utcnow),
|
||||
Column("updated_at", DateTime, default=datetime.utcnow, onupdate=datetime.utcnow),
|
||||
Column("last_login_at", DateTime, default=None)
|
||||
Column("last_login_at", DateTime, default=None),
|
||||
Column("bind_token", String(64), unique=True),
|
||||
)
|
||||
|
||||
results = Table(
|
||||
@@ -237,7 +238,6 @@ binds = Table(
|
||||
Column("bind_account", String(128), unique=True, nullable=False),
|
||||
Column("bind_code", String(6), nullable=False),
|
||||
Column("is_verified", Integer, default=0),
|
||||
Column("auth_token", String(64), unique=True),
|
||||
Column("bind_date", DateTime, default=datetime.utcnow)
|
||||
)
|
||||
|
||||
|
||||
@@ -192,10 +192,18 @@
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Message</label>
|
||||
<input type="text" class="form-control mb-1" id="ServerTipsEn" placeholder="English">
|
||||
<input type="text" class="form-control mb-1" id="ServerTipsJa" placeholder="Japanese">
|
||||
<input type="text" class="form-control mb-1" id="ServerTipsFr" placeholder="French">
|
||||
<input type="text" class="form-control mb-1" id="ServerTipsIt" placeholder="Italian">
|
||||
|
||||
<label class="form-label mt-2">English</label>
|
||||
<textarea id="ServerTipsEn" class="form-control mb-2" rows="4" placeholder="English"></textarea>
|
||||
|
||||
<label class="form-label mt-2">Japanese</label>
|
||||
<textarea id="ServerTipsJa" class="form-control mb-2" rows="4" placeholder="Japanese"></textarea>
|
||||
|
||||
<label class="form-label mt-2">French</label>
|
||||
<textarea id="ServerTipsFr" class="form-control mb-2" rows="4" placeholder="French"></textarea>
|
||||
|
||||
<label class="form-label mt-2">Italian</label>
|
||||
<textarea id="ServerTipsIt" class="form-control mb-2" rows="4" placeholder="Italian"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
@@ -82,6 +82,16 @@
|
||||
<input class="input" id="save_id" name="save_id"/>
|
||||
<input class="bt_bg01_narrow" type="submit" value="Migrate Save">
|
||||
</form>
|
||||
<div class="f60 a_center" style="margin-top: 20px;">
|
||||
<label for="debug_id">Debug Info:</label>
|
||||
<br>
|
||||
<button type="button" onclick="document.getElementById('debug_id_container').style.display='block'; this.style.display='none';" class="bt_bg01_narrow">
|
||||
Reveal
|
||||
</button>
|
||||
<div id="debug_id_container" style="display:none; margin-top:10px;">
|
||||
<input id="debug_id" type="text" value="{debug_info}" readonly style="text-align: center;" onclick="this.select();" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user