Venus / src /db /seed.py
Amir
Venus Hotel Front Desk – initial HF deploy
9d9d2a1
import sqlite3
from typing import Dict, List, Tuple
from passlib.context import CryptContext
from src.utils.time_utils import utc_now_iso
from src.utils.sqlite_retry import run_tx
PWD_CTX = CryptContext(schemes=["bcrypt"], deprecated="auto")
ROOMS: Dict[str, List[int]] = {
"Suite": [101, 102, 103, 104],
"Standard King": [
201, 202, 203, 206, 208, 209, 210,
301, 302, 303, 306, 308, 309, 310,
401, 402, 403, 406, 408, 409, 410,
501, 502, 503, 508, 509, 510,
601, 602, 603, 606, 608, 609,
701, 706, 708, 709, 710
],
"Standard Twin": [207, 307, 407, 507, 610, 707],
"Deluxe King (Road Side)": [205, 212, 305, 312, 405, 412, 505, 512, 605, 612, 705, 712],
"Deluxe Twin (Road Side)": [204, 211, 304, 311, 404, 411, 504, 511, 604, 611, 704, 711],
"Unknown": [506, 607, 702, 703] + list(range(801, 811)),
}
DR_ROOMS = {102, 104}
STAFF_CLOSED = {506, 607, 702, 703}
DEFAULT_OOS = set(range(401, 413)) | {502, 503, 508, 509, 602, 608} | set(range(801, 811))
KNOWN_PROBLEMS: List[Tuple[int, str, str]] = [
(202, "bed", "bed"),
(205, "heater", "heater"),
(207, "heater", "heater"),
(208, "heater", "heater"),
(209, "heater", "heater"),
(301, "heater", "heater"),
(302, "heater", "heater"),
(303, "heater", "heater"),
(306, "heater", "heater"),
(308, "heater", "heater"),
(309, "heater", "heater"),
(504, "heater", "heater"),
(505, "heater", "heater"),
(507, "heater", "heater"),
(510, "heater", "heater"),
(605, "heater", "heater"),
(609, "heater", "heater"),
(610, "heater", "heater"),
(612, "heater", "heater"),
(705, "heater", "heater"),
(708, "heater", "heater"),
(712, "heater", "heater"),
(212, "ac", "ac"),
(311, "ac", "ac"),
(312, "ac", "ac"),
(611, "bed", "bed"),
]
SEED_USERS = [
("Amir", "staff", "Amir-2468"),
("Shahin", "staff", "Shahin-739"),
("Kazem", "staff", "Kazem-513"),
("Brian", "staff", "Brian-842"),
("Mahfuz", "staff", "Mahfuz-617"),
("Dr", "admin", "Dr-9051"),
]
def seed_if_empty(conn: sqlite3.Connection) -> None:
def _seed(c: sqlite3.Connection):
now = utc_now_iso()
rooms_count = c.execute("SELECT COUNT(*) AS c FROM rooms").fetchone()["c"]
if rooms_count == 0:
room_type_map = {}
for rtype, nums in ROOMS.items():
for n in nums:
room_type_map[n] = rtype
for room_no in sorted(room_type_map.keys()):
sellable = 1
if room_no in DR_ROOMS or room_no in STAFF_CLOSED:
sellable = 0
status = "free"
if room_no in DEFAULT_OOS:
status = "out_of_service"
c.execute(
"""
INSERT INTO rooms(room_no, room_type, sellable, status, created_at_utc, updated_at_utc)
VALUES(?,?,?,?,?,?)
""",
(room_no, room_type_map[room_no], sellable, status, now, now),
)
c.execute(
"""
INSERT INTO room_status_history(room_no, from_status, to_status, note, changed_by, changed_at_utc)
VALUES(?,?,?,?,?,?)
""",
(room_no, None, status, "Initial seed", "system", now),
)
c.execute(
"INSERT INTO audit_log(entity, entity_id, action, note, changed_by, changed_at_utc) VALUES(?,?,?,?,?,?)",
("room", str(room_no), "seed", "Initial seed", "system", now),
)
prob_count = c.execute("SELECT COUNT(*) AS c FROM room_problems").fetchone()["c"]
if prob_count == 0:
for room_no, ptype, desc in KNOWN_PROBLEMS:
c.execute(
"""
INSERT INTO room_problems(room_no, problem_type, description, is_active, created_at_utc, updated_at_utc)
VALUES(?,?,?,?,?,?)
""",
(room_no, ptype, desc, 1, now, now),
)
c.execute(
"""
INSERT INTO room_problem_history(room_no, problem_type, action, description, note, changed_by, changed_at_utc)
VALUES(?,?,?,?,?,?,?)
""",
(room_no, ptype, "add", desc, "Initial seed", "system", now),
)
c.execute(
"INSERT INTO audit_log(entity, entity_id, action, note, changed_by, changed_at_utc) VALUES(?,?,?,?,?,?)",
("problem", f"{room_no}:{ptype}", "seed", "Initial seed", "system", now),
)
user_count = c.execute("SELECT COUNT(*) AS c FROM users").fetchone()["c"]
if user_count == 0:
for username, role, plain in SEED_USERS:
c.execute(
"""
INSERT INTO users(username, role, password_hash, is_active, created_at_utc)
VALUES(?,?,?,?,?)
""",
(username, role, PWD_CTX.hash(plain), 1, now),
)
c.execute(
"INSERT INTO audit_log(entity, entity_id, action, note, changed_by, changed_at_utc) VALUES(?,?,?,?,?,?)",
("user", "*", "seed", "Initial users created", "system", now),
)
run_tx(conn, _seed)