kin: BATON-008-backend_dev
This commit is contained in:
parent
e21bcb1eb4
commit
4c9fec17de
11 changed files with 651 additions and 4 deletions
|
|
@ -67,6 +67,23 @@ async def init_db() -> None:
|
|||
count INTEGER NOT NULL DEFAULT 0,
|
||||
window_start REAL NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS registrations (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
login TEXT UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
push_subscription TEXT DEFAULT NULL,
|
||||
created_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_registrations_status
|
||||
ON registrations(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_registrations_email
|
||||
ON registrations(email);
|
||||
CREATE INDEX IF NOT EXISTS idx_registrations_login
|
||||
ON registrations(login);
|
||||
""")
|
||||
# Migrations for existing databases (silently ignore if columns already exist)
|
||||
for stmt in [
|
||||
|
|
@ -284,6 +301,56 @@ async def rate_limit_increment(key: str, window: float) -> int:
|
|||
return row["count"] if row else 1
|
||||
|
||||
|
||||
async def create_registration(
|
||||
email: str,
|
||||
login: str,
|
||||
password_hash: str,
|
||||
push_subscription: Optional[str] = None,
|
||||
) -> int:
|
||||
"""Insert a new registration. Raises aiosqlite.IntegrityError on email/login conflict."""
|
||||
async with _get_conn() as conn:
|
||||
async with conn.execute(
|
||||
"""
|
||||
INSERT INTO registrations (email, login, password_hash, push_subscription)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""",
|
||||
(email, login, password_hash, push_subscription),
|
||||
) as cur:
|
||||
reg_id = cur.lastrowid
|
||||
await conn.commit()
|
||||
return reg_id # type: ignore[return-value]
|
||||
|
||||
|
||||
async def get_registration(reg_id: int) -> Optional[dict]:
|
||||
async with _get_conn() as conn:
|
||||
async with conn.execute(
|
||||
"SELECT id, email, login, status, push_subscription, created_at FROM registrations WHERE id = ?",
|
||||
(reg_id,),
|
||||
) as cur:
|
||||
row = await cur.fetchone()
|
||||
if row is None:
|
||||
return None
|
||||
return {
|
||||
"id": row["id"],
|
||||
"email": row["email"],
|
||||
"login": row["login"],
|
||||
"status": row["status"],
|
||||
"push_subscription": row["push_subscription"],
|
||||
"created_at": row["created_at"],
|
||||
}
|
||||
|
||||
|
||||
async def update_registration_status(reg_id: int, status: str) -> bool:
|
||||
async with _get_conn() as conn:
|
||||
async with conn.execute(
|
||||
"UPDATE registrations SET status = ? WHERE id = ?",
|
||||
(status, reg_id),
|
||||
) as cur:
|
||||
changed = cur.rowcount > 0
|
||||
await conn.commit()
|
||||
return changed
|
||||
|
||||
|
||||
async def save_telegram_batch(
|
||||
message_text: str,
|
||||
signals_count: int,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue