feat: vendor tooltips, logos, descriptions, product URLs from mont.ru

This commit is contained in:
2026-05-12 15:50:40 +03:00
parent 1747c31ba3
commit 800965598c
193 changed files with 9714 additions and 3 deletions
+41 -3
View File
@@ -9,7 +9,7 @@ try:
except ImportError:
load_workbook = None
from .config import DB_PATH, ENABLE_BOOTSTRAP, INFRA_JSON_FILES, XLSX_PATH
from .config import ADMIN_LOGIN, ADMIN_PASSWORD, DB_PATH, ENABLE_BOOTSTRAP, INFRA_JSON_FILES, SUPER_ADMIN_LOGIN, SUPER_ADMIN_PASSWORD, XLSX_PATH
def get_db() -> sqlite3.Connection:
conn = sqlite3.connect(DB_PATH)
@@ -273,6 +273,27 @@ def init_db() -> None:
FOREIGN KEY(category_id) REFERENCES ib_categories(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS pending_changes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
scope TEXT NOT NULL,
action TEXT NOT NULL,
payload TEXT NOT NULL,
created_by TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
status TEXT NOT NULL DEFAULT 'pending',
reviewed_by TEXT,
reviewed_at TEXT
);
CREATE TABLE IF NOT EXISTS admin_users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'admin',
access_scopes TEXT NOT NULL DEFAULT 'infra,ib',
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
"""
)
try:
@@ -283,6 +304,19 @@ def init_db() -> None:
conn.execute("ALTER TABLE ib_products ADD COLUMN url TEXT")
except sqlite3.OperationalError:
pass
try:
conn.execute("ALTER TABLE admin_users ADD COLUMN access_scopes TEXT NOT NULL DEFAULT 'infra,ib'")
except sqlite3.OperationalError:
pass
conn.execute(
"INSERT OR IGNORE INTO admin_users(username, password, role, access_scopes) VALUES (?, ?, 'admin', 'infra,ib')",
(ADMIN_LOGIN, ADMIN_PASSWORD),
)
conn.execute(
"INSERT OR IGNORE INTO admin_users(username, password, role, access_scopes) VALUES (?, ?, 'super', 'infra,ib')",
(SUPER_ADMIN_LOGIN, SUPER_ADMIN_PASSWORD),
)
has_data = conn.execute("SELECT EXISTS(SELECT 1 FROM vendors)").fetchone()[0]
if not has_data and ENABLE_BOOTSTRAP:
@@ -375,14 +409,18 @@ def fetch_ib_matrix() -> dict:
def fetch_scope_data(scope: str) -> dict:
tables = scope_tables(scope)
conn = get_db()
vendors = [dict(r) for r in conn.execute(f"SELECT id, name FROM {tables['vendors']} ORDER BY lower(name)")]
vendors = [dict(r) for r in conn.execute(
f"SELECT id, name, COALESCE(logo,'') as logo, COALESCE(description,'') as description, "
f"COALESCE(website,'') as website, COALESCE(mont_page,'') as mont_page "
f"FROM {tables['vendors']} ORDER BY lower(name)"
)]
categories = [dict(r) for r in conn.execute(f"SELECT id, name FROM {tables['categories']} ORDER BY lower(name)")]
products = [
dict(r)
for r in conn.execute(
f"""
SELECT p.id, p.name, p.vendor_id, v.name AS vendor_name
, p.url
, COALESCE(p.url, '') as url
FROM {tables['products']} p
JOIN {tables['vendors']} v ON v.id = p.vendor_id
ORDER BY lower(v.name), lower(p.name)