feat(modefied)
This commit is contained in:
1 parent
d705f2f9d3
commit
e3110c3897
12 files changed
+237
-63
No files matched your search
+13
-16
@@ -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()
|
||||
|
||||
|
||||
@@ -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
@@ -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}")
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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")
|
||||
Reference in new issue
Block a user