Files
boc/landvex-paket/bounties/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

101 lines
2.5 KiB
Python

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from datetime import datetime
from typing import Optional
import sqlite3
import os
app = FastAPI(title="LandveX Bounties")
DB_PATH = os.path.join(os.path.dirname(__file__), "..", "landvex.db")
def get_db():
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
def init_db():
conn = get_db()
conn.execute(
"""
CREATE TABLE IF NOT EXISTS bounties (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
reward REAL,
status TEXT DEFAULT 'open',
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
submitted_at TEXT
)
"""
)
conn.commit()
conn.close()
class BountyCreate(BaseModel):
title: str
description: str = ""
reward: float = 0.0
class BountyOut(BaseModel):
id: int
title: str
description: str
reward: float
status: str
created_at: str
submitted_at: Optional[str]
class Config:
from_attributes = True
@app.on_event("startup")
def startup():
init_db()
@app.post("/v0/bounties", response_model=BountyOut)
def create_bounty(bounty: BountyCreate):
conn = get_db()
cursor = conn.execute(
"INSERT INTO bounties (title, description, reward) VALUES (?, ?, ?)",
(bounty.title, bounty.description, bounty.reward),
)
bounty_id = cursor.lastrowid
conn.commit()
row = conn.execute("SELECT * FROM bounties WHERE id = ?", (bounty_id,)).fetchone()
conn.close()
return dict(row)
@app.get("/v0/bounties/{bounty_id}", response_model=BountyOut)
def get_bounty(bounty_id: int):
conn = get_db()
row = conn.execute("SELECT * FROM bounties WHERE id = ?", (bounty_id,)).fetchone()
conn.close()
if not row:
raise HTTPException(status_code=404, detail="Bounty not found")
return dict(row)
@app.post("/v0/bounties/{bounty_id}/submit", response_model=BountyOut)
def submit_bounty(bounty_id: int):
conn = get_db()
row = conn.execute("SELECT * FROM bounties WHERE id = ?", (bounty_id,)).fetchone()
if not row:
conn.close()
raise HTTPException(status_code=404, detail="Bounty not found")
conn.execute(
"UPDATE bounties SET status = 'submitted', submitted_at = ? WHERE id = ?",
(datetime.utcnow().isoformat(), bounty_id),
)
conn.commit()
row = conn.execute("SELECT * FROM bounties WHERE id = ?", (bounty_id,)).fetchone()
conn.close()
return dict(row)