Files
boc/landvex-paket/claims/main.py
T
Bernt 6de2455917 v1.2.0: Add Global Markets footer, translated to 9 languages
- 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
2026-07-08 19:56:03 +00:00

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],
)