implement server mvp: fastapi app, org formatter, sqlite store, tests, dockerfile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
38
server/app/store.py
Normal file
38
server/app/store.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import sqlite3
|
||||
import threading
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
_lock = threading.Lock()
|
||||
|
||||
|
||||
def _connect(db_path: str) -> sqlite3.Connection:
|
||||
conn = sqlite3.connect(db_path, check_same_thread=False)
|
||||
conn.execute(
|
||||
"CREATE TABLE IF NOT EXISTS seen_ids (id TEXT PRIMARY KEY, created_at TEXT NOT NULL)"
|
||||
)
|
||||
conn.commit()
|
||||
return conn
|
||||
|
||||
|
||||
class IdempotencyStore:
|
||||
def __init__(self, db_path: str) -> None:
|
||||
Path(db_path).parent.mkdir(parents=True, exist_ok=True)
|
||||
self._conn = _connect(db_path)
|
||||
|
||||
def already_seen(self, capture_id: str) -> bool:
|
||||
row = self._conn.execute(
|
||||
"SELECT 1 FROM seen_ids WHERE id = ?", (capture_id,)
|
||||
).fetchone()
|
||||
return row is not None
|
||||
|
||||
def mark_seen(self, capture_id: str, created_at: str) -> None:
|
||||
self._conn.execute(
|
||||
"INSERT OR IGNORE INTO seen_ids (id, created_at) VALUES (?, ?)",
|
||||
(capture_id, created_at),
|
||||
)
|
||||
self._conn.commit()
|
||||
|
||||
|
||||
def get_file_lock() -> threading.Lock:
|
||||
return _lock
|
||||
Reference in New Issue
Block a user