6de2455917
- Added GLOBAL_MARKETS_TITLE to all translation files - Updated footer with 12 markets (4 active + 8 upcoming) - Translated market section to: zh-cn, zh-tw, ja, ko, th, vi, id, ms, hi - Built and deployed to production - CloudFront invalidation: I3RTMXVFDJXWLG3SYX208OP1CC
126 lines
3.3 KiB
Python
126 lines
3.3 KiB
Python
from __future__ import annotations
|
|
from fastapi import FastAPI, HTTPException
|
|
from pydantic import BaseModel
|
|
from contextlib import asynccontextmanager
|
|
import sqlite3
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
DB_PATH = "landvex.db"
|
|
|
|
|
|
def init_db():
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.execute("""
|
|
CREATE TABLE IF NOT EXISTS claims (
|
|
id TEXT PRIMARY KEY,
|
|
model_id TEXT NOT NULL,
|
|
manufacturer_name TEXT NOT NULL,
|
|
contact_email TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'pending',
|
|
created_at TEXT NOT NULL,
|
|
approved_at TEXT
|
|
)
|
|
""")
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
init_db()
|
|
yield
|
|
|
|
|
|
app = FastAPI(title="LandveX Claims API", lifespan=lifespan)
|
|
|
|
|
|
class ClaimCreate(BaseModel):
|
|
model_id: str
|
|
manufacturer_name: str
|
|
contact_email: str
|
|
|
|
|
|
class Claim(BaseModel):
|
|
id: str
|
|
model_id: str
|
|
manufacturer_name: str
|
|
contact_email: str
|
|
status: str
|
|
created_at: str
|
|
approved_at: str | None
|
|
|
|
|
|
def get_db():
|
|
return sqlite3.connect(DB_PATH)
|
|
|
|
|
|
@app.post("/v0/claims", response_model=Claim)
|
|
def create_claim(payload: ClaimCreate):
|
|
claim_id = str(uuid.uuid4())
|
|
now = datetime.utcnow().isoformat()
|
|
conn = get_db()
|
|
conn.execute(
|
|
"INSERT INTO claims (id, model_id, manufacturer_name, contact_email, status, created_at) VALUES (?, ?, ?, ?, ?, ?)",
|
|
(claim_id, payload.model_id, payload.manufacturer_name, payload.contact_email, "pending", now),
|
|
)
|
|
conn.commit()
|
|
row = conn.execute("SELECT * FROM claims WHERE id = ?", (claim_id,)).fetchone()
|
|
conn.close()
|
|
return Claim(
|
|
id=row[0],
|
|
model_id=row[1],
|
|
manufacturer_name=row[2],
|
|
contact_email=row[3],
|
|
status=row[4],
|
|
created_at=row[5],
|
|
approved_at=row[6],
|
|
)
|
|
|
|
|
|
@app.get("/v0/claims/{claim_id}", response_model=Claim)
|
|
def get_claim(claim_id: str):
|
|
conn = get_db()
|
|
row = conn.execute("SELECT * FROM claims WHERE id = ?", (claim_id,)).fetchone()
|
|
conn.close()
|
|
if not row:
|
|
raise HTTPException(status_code=404, detail="Claim not found")
|
|
return Claim(
|
|
id=row[0],
|
|
model_id=row[1],
|
|
manufacturer_name=row[2],
|
|
contact_email=row[3],
|
|
status=row[4],
|
|
created_at=row[5],
|
|
approved_at=row[6],
|
|
)
|
|
|
|
|
|
@app.post("/v0/claims/{claim_id}/approve", response_model=Claim)
|
|
def approve_claim(claim_id: str):
|
|
conn = get_db()
|
|
row = conn.execute("SELECT * FROM claims WHERE id = ?", (claim_id,)).fetchone()
|
|
if not row:
|
|
conn.close()
|
|
raise HTTPException(status_code=404, detail="Claim not found")
|
|
if row[4] == "approved":
|
|
conn.close()
|
|
raise HTTPException(status_code=400, detail="Claim already approved")
|
|
now = datetime.utcnow().isoformat()
|
|
conn.execute(
|
|
"UPDATE claims SET status = ?, approved_at = ? WHERE id = ?",
|
|
("approved", now, claim_id),
|
|
)
|
|
conn.commit()
|
|
row = conn.execute("SELECT * FROM claims WHERE id = ?", (claim_id,)).fetchone()
|
|
conn.close()
|
|
return Claim(
|
|
id=row[0],
|
|
model_id=row[1],
|
|
manufacturer_name=row[2],
|
|
contact_email=row[3],
|
|
status=row[4],
|
|
created_at=row[5],
|
|
approved_at=row[6],
|
|
)
|