feat(modefied)

This commit is contained in:
Black_Raven committed 2026-03-17 12:08:19 +03:00
1 parent d705f2f9d3
commit e3110c3897
12 files changed
+237 -63

No files matched your search

+13 -16
View File
@@ -2,14 +2,14 @@ import re
import sqlite3
from loguru import logger as log
def add_category(conn, name, description=None, parent_id=None, image_path=None, page_number=1):
def add_category(conn, name, description=None, parent_id=None, image_path=None):
cursor = conn.cursor()
try:
cursor.execute('''
INSERT OR IGNORE INTO categories (name, description, parent_id, image_path, page_number)
VALUES (?, ?, ?, ?, ?)
''', (name, description, parent_id, image_path, page_number))
INSERT OR IGNORE INTO categories (name, description, parent_id, image_path)
VALUES (?, ?, ?, ?)
''', (name, description, parent_id, image_path))
cursor.execute('SELECT id FROM categories WHERE name = ?', (name,))
result = cursor.fetchone()
@@ -59,8 +59,8 @@ def parse_product_data(product_text):
'stiffness_class': stiffness_class
}
def add_product(conn, product_text, category_id, image_path=None, page_number=1):
"""Добавление товара с парсингом параметров, изображением и номером страницы"""
def add_product(conn, product_text, category_id, image_path=None):
"""Добавление товара с парсингом параметров и изображением"""
cursor = conn.cursor()
product_data = parse_product_data(product_text)
@@ -70,8 +70,8 @@ def add_product(conn, product_text, category_id, image_path=None, page_number=1)
INSERT INTO products (
name, full_name, description, category_id,
diameter, wall_thickness, length, color,
application_type, stiffness_class, image_path, page_number
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
application_type, stiffness_class, image_path
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (
product_data['short_name'],
product_data['full_name'],
@@ -83,8 +83,7 @@ def add_product(conn, product_text, category_id, image_path=None, page_number=1)
product_data['color'],
product_data['application_type'],
product_data['stiffness_class'],
image_path,
page_number
image_path
))
product_id = cursor.lastrowid
@@ -122,10 +121,9 @@ def get_categories_by_page(conn, page_number=1, items_per_page=9):
cursor.execute('''
SELECT * FROM categories
WHERE page_number = ?
ORDER BY id
LIMIT ? OFFSET ?
''', (page_number, items_per_page, offset))
''', (items_per_page, offset))
return cursor.fetchall()
@@ -137,17 +135,16 @@ def get_products_by_page(conn, page_number=1, items_per_page=9, category_id=None
if category_id:
cursor.execute('''
SELECT * FROM products
WHERE page_number = ? AND category_id = ?
WHERE category_id = ?
ORDER BY id
LIMIT ? OFFSET ?
''', (page_number, category_id, items_per_page, offset))
''', (category_id, items_per_page, offset))
else:
cursor.execute('''
SELECT * FROM products
WHERE page_number = ?
ORDER BY id
LIMIT ? OFFSET ?
''', (page_number, items_per_page, offset))
''', (items_per_page, offset))
return cursor.fetchall()
-4
View File
@@ -13,7 +13,6 @@ def init_database(db_name='pipe_store.db'):
description TEXT,
parent_id INTEGER,
image_path TEXT,
page_number INTEGER DEFAULT 1, -- Новое поле: номер страницы для пагинации
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES categories (id)
)
@@ -33,7 +32,6 @@ def init_database(db_name='pipe_store.db'):
application_type TEXT, -- внутренняя/наружная
stiffness_class TEXT, -- SN4, SN2 и т.д.
image_path TEXT,
page_number INTEGER DEFAULT 1, -- Новое поле: номер страницы для пагинации
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES categories (id)
)
@@ -63,8 +61,6 @@ def init_database(db_name='pipe_store.db'):
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_diameter ON products(diameter)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_page ON products(page_number)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_categories_page ON categories(page_number)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)')
conn.commit()
+23 -36
View File
@@ -19,44 +19,35 @@ def init_tables(db_name='pipe_store.db'):
log.info("Начинаем инициализацию базы категорий...")
# Добавляем категории с распределением по страницам
# Страница 1
main_category_id = add_category(
conn,
"Трубы ПВХ",
"Трубы ПВХ для канализационных систем",
image_path="/images/categories/pvc_pipes_main.jpg",
page_number=1
image_path="/images/categories/pvc_pipes_main.jpg"
)
# Страница 1
internal_category_id = add_category(
conn,
"Для внутренней канализации",
"Трубы для внутренней канализационной системы",
main_category_id,
image_path="/images/categories/internal_pipes.jpg",
page_number=1
image_path="/images/categories/internal_pipes.jpg"
)
# Страница 1
external_category_id = add_category(
conn,
"Для наружной канализации",
"Трубы для наружной канализационной системы",
main_category_id,
image_path="/images/categories/external_pipes.jpg",
page_number=1
image_path="/images/categories/external_pipes.jpg"
)
# Дополнительные категории для демонстрации пагинации (страница 2)
add_category(
conn,
"Фитинги для ПВХ труб",
"Соединительные элементы для ПВХ труб",
main_category_id,
image_path="/images/categories/fittings.jpg",
page_number=2
image_path="/images/categories/fittings.jpg"
)
add_category(
@@ -64,8 +55,7 @@ def init_tables(db_name='pipe_store.db'):
"Колена и отводы",
"Угловые соединения для ПВХ труб",
main_category_id,
image_path="/images/categories/elbows.jpg",
page_number=2
image_path="/images/categories/elbows.jpg"
)
log.info("Категории успешно созданы")
@@ -79,43 +69,40 @@ def init_tables(db_name='pipe_store.db'):
log.info("Фильтры успешно добавлены")
# Данные продуктов с распределением по страницам
# Данные продуктов
products_data = [
# Страница 1 - внутренние трубы
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х500", "image": "/images/products/internal_110_500.jpg", "page": 1},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х1000", "image": "/images/products/internal_110_1000.jpg", "page": 1},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х1500", "image": "/images/products/internal_110_1500.jpg", "page": 1},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х2000", "image": "/images/products/internal_110_2000.jpg", "page": 1},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х3000", "image": "/images/products/internal_110_3000.jpg", "page": 1},
# Внутренние трубы
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х500", "image": "/images/products/internal_110_500.jpg"},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х1000", "image": "/images/products/internal_110_1000.jpg"},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х1500", "image": "/images/products/internal_110_1500.jpg"},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х2000", "image": "/images/products/internal_110_2000.jpg"},
{"text": "Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), с внутренней структурной стенкой толщиной 2,2 мм 110х2,2х3000", "image": "/images/products/internal_110_3000.jpg"},
# Страница 1 - наружные трубы
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х500", "image": "/images/products/external_110_sn4_500.jpg", "page": 1},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х1000", "image": "/images/products/external_110_sn4_1000.jpg", "page": 1},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х2000", "image": "/images/products/external_110_sn4_2000.jpg", "page": 1},
# Страница 2 - оставшиеся наружные трубы
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х3000", "image": "/images/products/external_110_sn4_3000.jpg", "page": 2},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х4000", "image": "/images/products/external_110_sn4_4000.jpg", "page": 2},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х1000", "image": "/images/products/external_160_sn2_1000.jpg", "page": 2},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х2000", "image": "/images/products/external_160_sn2_2000.jpg", "page": 2},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х3000", "image": "/images/products/external_160_sn2_3000.jpg", "page": 2},
# Наружные трубы
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х500", "image": "/images/products/external_110_sn4_500.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х1000", "image": "/images/products/external_110_sn4_1000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х2000", "image": "/images/products/external_110_sn4_2000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х3000", "image": "/images/products/external_110_sn4_3000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN4 110х3,2х4000", "image": "/images/products/external_110_sn4_4000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х1000", "image": "/images/products/external_160_sn2_1000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х2000", "image": "/images/products/external_160_sn2_2000.jpg"},
{"text": "Труба ПВХ для НАРУЖНОЙ канализации (цвет оранжево-коричневый), с внутренней структурной стенкой, класс жесткости SN2 160х3,6х3000", "image": "/images/products/external_160_sn2_3000.jpg"},
]
added_products = 0
for product_info in products_data:
product_text = product_info["text"]
image_path = product_info["image"]
page_number = product_info["page"]
if "ВНУТРЕННЕЙ" in product_text:
category_id = internal_category_id
else:
category_id = external_category_id
product_id = add_product(conn, product_text, category_id, image_path, page_number)
product_id = add_product(conn, product_text, category_id, image_path)
if product_id:
added_products += 1
log.info(f"Добавлен товар: {product_text[:50]}... (страница {page_number})")
log.info(f"Добавлен товар: {product_text[:50]}...")
else:
log.error(f"Ошибка при добавлении товара: {product_text}")
+23
View File
@@ -0,0 +1,23 @@
import sqlite3
from module.category import Category
def GetAllCategories(db_name: str = 'pipe_store.db', parent_id: int = 1) -> list[Category]:
conn = sqlite3.connect(db_name)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
categories = []
cursor.execute("SELECT id, name, description, image_path FROM categories WHERE parent_id = ?", [parent_id])
for row in cursor.fetchall():
category = Category(
id = row["id"],
name = row["name"],
description= row["description"],
image_path= row["image_path"],
)
categories.append(category.model_dump())
conn.close()
return categories
+11
View File
@@ -0,0 +1,11 @@
import sqlite3
from module.product import Product
def get_products(db_name: str = 'pipe_store.db', parent_id: int = 1) -> List[Product]:
conn = sqlite3.connect(db_name)
conn.row_factory = sqlite3.Row
transaction = conn.cursor()
products = []
transaction.execute("SELECT ... FROM products")