fix(db): Delete unused value of name
This commit is contained in:
1 parent
30c81e5aa5
commit
0a6418d84d
4 files changed
+39
-23
No files matched your search
+3
-15
@@ -63,11 +63,8 @@ def parse_product_data(product_text):
|
|||||||
else:
|
else:
|
||||||
length = 0
|
length = 0
|
||||||
|
|
||||||
short_name = f"Труба ПВХ {diameter}мм {application_type} {length}мм" if diameter else product_text[:50]
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'short_name': short_name,
|
'name': product_text,
|
||||||
'full_name': product_text,
|
|
||||||
'diameter': diameter,
|
'diameter': diameter,
|
||||||
'wall_thickness': wall_thickness,
|
'wall_thickness': wall_thickness,
|
||||||
'length': length,
|
'length': length,
|
||||||
@@ -96,14 +93,6 @@ def add_product(conn, product_text, category_id, image_path=None,
|
|||||||
application_type = application_type or product_data['application_type']
|
application_type = application_type or product_data['application_type']
|
||||||
stiffness_class = stiffness_class or product_data['stiffness_class']
|
stiffness_class = stiffness_class or product_data['stiffness_class']
|
||||||
|
|
||||||
# Формируем короткое имя
|
|
||||||
if diameter and length:
|
|
||||||
name = f"Труба ПВХ {diameter}мм {application_type} {length}мм"
|
|
||||||
elif fitting_type and diameter:
|
|
||||||
name = f"{fitting_type.capitalize()} ПВХ {diameter}мм"
|
|
||||||
else:
|
|
||||||
name = product_text[:100]
|
|
||||||
|
|
||||||
# Формируем описание
|
# Формируем описание
|
||||||
description_parts = []
|
description_parts = []
|
||||||
if fitting_type:
|
if fitting_type:
|
||||||
@@ -127,12 +116,11 @@ def add_product(conn, product_text, category_id, image_path=None,
|
|||||||
try:
|
try:
|
||||||
cursor.execute('''
|
cursor.execute('''
|
||||||
INSERT INTO products (
|
INSERT INTO products (
|
||||||
name, full_name, description, category_id,
|
name, description, category_id,
|
||||||
diameter, wall_thickness, length, color,
|
diameter, wall_thickness, length, color,
|
||||||
application_type, stiffness_class, image_path
|
application_type, stiffness_class, image_path
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
''', (
|
''', (
|
||||||
name,
|
|
||||||
product_text,
|
product_text,
|
||||||
description,
|
description,
|
||||||
category_id,
|
category_id,
|
||||||
|
|||||||
+31
-1
@@ -22,7 +22,6 @@ def init_database(db_name='pipe_store.db'):
|
|||||||
CREATE TABLE IF NOT EXISTS products (
|
CREATE TABLE IF NOT EXISTS products (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
full_name TEXT NOT NULL,
|
|
||||||
description TEXT,
|
description TEXT,
|
||||||
category_id INTEGER NOT NULL,
|
category_id INTEGER NOT NULL,
|
||||||
diameter INTEGER,
|
diameter INTEGER,
|
||||||
@@ -63,6 +62,37 @@ def init_database(db_name='pipe_store.db'):
|
|||||||
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)')
|
cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)')
|
||||||
cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)')
|
cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)')
|
||||||
|
|
||||||
|
# Миграция: переименовываем full_name → name
|
||||||
|
cursor.execute("PRAGMA table_info(products)")
|
||||||
|
columns = {row[1] for row in cursor.fetchall()}
|
||||||
|
if 'full_name' in columns and 'name' not in columns:
|
||||||
|
cursor.executescript('''
|
||||||
|
PRAGMA foreign_keys=OFF;
|
||||||
|
CREATE TABLE products_new (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
category_id INTEGER NOT NULL,
|
||||||
|
diameter INTEGER,
|
||||||
|
wall_thickness REAL,
|
||||||
|
length INTEGER,
|
||||||
|
color TEXT,
|
||||||
|
application_type TEXT,
|
||||||
|
stiffness_class TEXT,
|
||||||
|
image_path TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
FOREIGN KEY (category_id) REFERENCES categories (id)
|
||||||
|
);
|
||||||
|
INSERT INTO products_new (id, name, description, category_id, diameter, wall_thickness, length, color, application_type, stiffness_class, image_path, created_at)
|
||||||
|
SELECT id, full_name, description, category_id, diameter, wall_thickness, length, color, application_type, stiffness_class, image_path, created_at FROM products;
|
||||||
|
DROP TABLE products;
|
||||||
|
ALTER TABLE products_new RENAME TO products;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_products_diameter ON products(diameter);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_products_length ON products(length);
|
||||||
|
''')
|
||||||
|
log.info("Migrated products table: renamed 'full_name' → 'name'")
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
log.success("База данных успешно инициализирована!")
|
log.success("База данных успешно инициализирована!")
|
||||||
@@ -141,7 +141,7 @@ def get_product_by_id(product_id: int, db_name: str = 'pipe_store.db') -> Option
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT p.id, p.name, p.full_name, p.description,
|
SELECT p.id, p.name, p.description,
|
||||||
p.diameter, p.wall_thickness, p.length, p.color,
|
p.diameter, p.wall_thickness, p.length, p.color,
|
||||||
p.application_type, p.stiffness_class, p.image_path,
|
p.application_type, p.stiffness_class, p.image_path,
|
||||||
p.created_at, p.category_id
|
p.created_at, p.category_id
|
||||||
@@ -192,7 +192,6 @@ def get_product_by_id(product_id: int, db_name: str = 'pipe_store.db') -> Option
|
|||||||
return {
|
return {
|
||||||
"id": row['id'],
|
"id": row['id'],
|
||||||
"name": row['name'],
|
"name": row['name'],
|
||||||
"full_name": row['full_name'],
|
|
||||||
"description": full_description,
|
"description": full_description,
|
||||||
"price": None,
|
"price": None,
|
||||||
"categoryId": row['category_id'],
|
"categoryId": row['category_id'],
|
||||||
@@ -239,8 +238,8 @@ def generate_full_description(row: sqlite3.Row) -> str:
|
|||||||
"""Сгенерировать полное описание товара"""
|
"""Сгенерировать полное описание товара"""
|
||||||
parts = []
|
parts = []
|
||||||
|
|
||||||
if row['full_name']:
|
if row['name']:
|
||||||
parts.append(row['full_name'])
|
parts.append(row['name'])
|
||||||
|
|
||||||
if row['description']:
|
if row['description']:
|
||||||
parts.append(row['description'])
|
parts.append(row['description'])
|
||||||
@@ -264,7 +263,7 @@ def generate_full_description(row: sqlite3.Row) -> str:
|
|||||||
def get_product_list(page=1, limit=100, category_id=None):
|
def get_product_list(page=1, limit=100, category_id=None):
|
||||||
"""
|
"""
|
||||||
Получить список товаров с пагинацией (без фильтров).
|
Получить список товаров с пагинацией (без фильтров).
|
||||||
Возвращает список словарей с полями id, full_name, description.
|
Возвращает список словарей с полями id, name, description.
|
||||||
"""
|
"""
|
||||||
conn = None
|
conn = None
|
||||||
try:
|
try:
|
||||||
@@ -278,7 +277,7 @@ def get_product_list(page=1, limit=100, category_id=None):
|
|||||||
for row in rows:
|
for row in rows:
|
||||||
products.append({
|
products.append({
|
||||||
'id': row['id'],
|
'id': row['id'],
|
||||||
'full_name': row['full_name'],
|
'name': row['name'],
|
||||||
'description': row['description']
|
'description': row['description']
|
||||||
})
|
})
|
||||||
return products
|
return products
|
||||||
|
|||||||
@@ -25,5 +25,4 @@ class Product(BaseModel):
|
|||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|
||||||
class ProductDetail(Product):
|
class ProductDetail(Product):
|
||||||
full_name: Optional[str] = None
|
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[str] = None
|
||||||
Reference in new issue
Block a user