Fix duplicatee shirts/pants

This commit is contained in:
2026-01-06 14:56:04 -05:00
parent b000f47047
commit e707591b02
2 changed files with 24 additions and 12 deletions
+21 -9
View File
@@ -11,10 +11,12 @@ def init_db():
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(""" cursor.execute("""
CREATE TABLE IF NOT EXISTS uploaded_assets ( CREATE TABLE IF NOT EXISTS uploaded_assets (
image_hash TEXT PRIMARY KEY, image_hash TEXT,
asset_type INTEGER,
original_asset_id INTEGER NOT NULL, original_asset_id INTEGER NOT NULL,
new_asset_id INTEGER NOT NULL, new_asset_id INTEGER NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (image_hash, asset_type)
) )
""") """)
cursor.execute(""" cursor.execute("""
@@ -30,29 +32,39 @@ def init_db():
next_retry DATETIME DEFAULT CURRENT_TIMESTAMP next_retry DATETIME DEFAULT CURRENT_TIMESTAMP
) )
""") """)
# Migration: Add asset_type to uploaded_assets if it doesn't exist
cursor.execute("PRAGMA table_info(uploaded_assets)")
columns = [column[1] for column in cursor.fetchall()]
if "asset_type" not in columns:
cursor.execute("ALTER TABLE uploaded_assets ADD COLUMN asset_type INTEGER")
print("Added asset_type column to uploaded_assets table.")
# Note: Existing items will have asset_type = null, which is fine for now
# as the query handles it.
conn.commit() conn.commit()
def get_uploaded_asset(image_hash: str) -> Optional[int]: def get_uploaded_asset(image_hash: str, asset_type: int) -> Optional[int]:
""" """
Checks if an image hash already exists in the database. Checks if an image hash and asset type already exists in the database.
Returns the new_asset_id if found, else None. Returns the new_asset_id if found, else None.
""" """
with sqlite3.connect(DB_PATH) as conn: with sqlite3.connect(DB_PATH) as conn:
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute( cursor.execute(
"SELECT new_asset_id FROM uploaded_assets WHERE image_hash = ?", "SELECT new_asset_id FROM uploaded_assets WHERE image_hash = ? AND asset_type = ?",
(image_hash,) (image_hash, asset_type)
) )
row = cursor.fetchone() row = cursor.fetchone()
return row[0] if row else None return row[0] if row else None
def save_uploaded_asset(image_hash: str, original_asset_id: int, new_asset_id: int): def save_uploaded_asset(image_hash: str, asset_type: int, original_asset_id: int, new_asset_id: int):
"""Saves a new upload record to the database.""" """Saves a new upload record to the database."""
with sqlite3.connect(DB_PATH) as conn: with sqlite3.connect(DB_PATH) as conn:
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute( cursor.execute(
"INSERT INTO uploaded_assets (image_hash, original_asset_id, new_asset_id) VALUES (?, ?, ?)", "INSERT INTO uploaded_assets (image_hash, asset_type, original_asset_id, new_asset_id) VALUES (?, ?, ?, ?)",
(image_hash, original_asset_id, new_asset_id) (image_hash, asset_type, original_asset_id, new_asset_id)
) )
conn.commit() conn.commit()
+3 -3
View File
@@ -117,10 +117,10 @@ async def reupload_asset(asset_id: int, _: str = Depends(verify_api_key)):
async with upload_locks[image_hash]: async with upload_locks[image_hash]:
# Double-check database inside the lock # Double-check database inside the lock
existing_new_id = database.get_uploaded_asset(image_hash) existing_new_id = database.get_uploaded_asset(image_hash, asset.asset_type)
if existing_new_id: if existing_new_id:
print(f"Asset already uploaded (hash match): {existing_new_id}") print(f"Asset already uploaded (hash and type match): {existing_new_id}")
return {"uploaded": {"asset_id": existing_new_id}} return {"uploaded": {"asset_id": existing_new_id}}
# Prepare description with original URL # Prepare description with original URL
@@ -137,7 +137,7 @@ async def reupload_asset(asset_id: int, _: str = Depends(verify_api_key)):
new_asset_id = uploaded.get("asset_id") new_asset_id = uploaded.get("asset_id")
if new_asset_id: if new_asset_id:
# Save to database # Save to database
database.save_uploaded_asset(image_hash, asset_id, new_asset_id) database.save_uploaded_asset(image_hash, asset.asset_type, asset_id, new_asset_id)
try: try:
onsale = await roblox_service.onsale_asset( onsale = await roblox_service.onsale_asset(