feat: vendor tooltips, logos, descriptions, product URLs from mont.ru
This commit is contained in:
+41
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user