| from fastapi import FastAPI |
| import sqlite3 |
| import os |
| import shutil |
| from huggingface_hub import hf_hub_download |
|
|
| app = FastAPI() |
| DATASET_REPO = "sheeturt/boat-master-data" |
| DB_NAME = "boat_master.db" |
|
|
| def join_db(): |
| |
| if os.path.exists(DB_NAME) and os.path.getsize(DB_NAME) > 2000000000: |
| return |
| |
| print("🛠 Downloading and Joining DB parts...") |
| try: |
| with open(DB_NAME, 'wb') as master: |
| for i in range(1, 5): |
| part_path = hf_hub_download(repo_id=DATASET_REPO, filename=f"boat_master.db.part{i}", repo_type="dataset") |
| with open(part_path, 'rb') as part: |
| shutil.copyfileobj(part, master) |
| print("✅ Join Complete!") |
| except Exception as e: |
| print(f"❌ Join Error: {e}") |
|
|
| @app.on_event("startup") |
| async def startup_event(): |
| join_db() |
|
|
| @app.get("/search") |
| def search(num: str = None, email: str = None): |
| try: |
| if not os.path.exists(DB_NAME): |
| return {"error": "Database files are being downloaded. Try in 5 minutes."} |
| |
| conn = sqlite3.connect(DB_NAME) |
| conn.row_factory = sqlite3.Row |
| cursor = conn.cursor() |
| |
| if num: |
| |
| cursor.execute("SELECT phone, email, raw_info FROM boat_data WHERE phone LIKE ? LIMIT 50", (f"%{num}%",)) |
| elif email: |
| cursor.execute("SELECT phone, email, raw_info FROM boat_data WHERE email = ? LIMIT 50", (email,)) |
| else: |
| return {"error": "Please provide 'num' or 'email' parameter."} |
| |
| res = [dict(row) for row in cursor.fetchall()] |
| conn.close() |
| return {"count": len(res), "results": res} |
| except Exception as e: |
| return {"error": str(e)} |
|
|
| @app.get("/") |
| def home(): |
| return {"status": "Running", "message": "Use /search?num=123 or /search?email=abc"} |
|
|