- Dodanie parent_id do tabeli categories - Model Category z relacją parent/subcategories - 4 główne grupy: Usługi, Budownictwo, Handel, Produkcja - Skrypt assign_category_parents.py do przypisania podkategorii - Migracja 030_add_category_hierarchy.sql Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
113 lines
3.5 KiB
Python
113 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Skrypt do przypisania istniejących kategorii do głównych grup.
|
|
Uruchom po migracji 030_add_category_hierarchy.sql
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Add parent directory to path
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from database import SessionLocal, Category
|
|
|
|
# Mapowanie kategorii do głównych grup
|
|
# Klucz: slug głównej grupy, wartość: lista slugów podkategorii
|
|
CATEGORY_MAPPING = {
|
|
'uslugi': [
|
|
'it-technologie',
|
|
'it-telekomunikacja',
|
|
'marketing',
|
|
'uslugi-prawne',
|
|
'ksiegowosc-finanse',
|
|
'uslugi-biznesowe',
|
|
'bezpieczenstwo-ochrona',
|
|
'media',
|
|
],
|
|
'budownictwo-grupa': [
|
|
'budownictwo',
|
|
'hvac-instalacje',
|
|
'architektura-projektowanie',
|
|
'energia-oze',
|
|
'nieruchomosci',
|
|
],
|
|
'handel': [
|
|
'handel-hurtownie',
|
|
'motoryzacja',
|
|
'hotelarstwo',
|
|
],
|
|
'produkcja-grupa': [
|
|
'produkcja',
|
|
'rolnictwo',
|
|
'inne',
|
|
],
|
|
}
|
|
|
|
|
|
def main():
|
|
db = SessionLocal()
|
|
try:
|
|
# Znajdź lub utwórz główne kategorie
|
|
main_categories = {}
|
|
|
|
for main_slug, subcategory_slugs in CATEGORY_MAPPING.items():
|
|
main_cat = db.query(Category).filter(Category.slug == main_slug).first()
|
|
|
|
if not main_cat:
|
|
print(f"[!] Główna kategoria '{main_slug}' nie istnieje - tworzę...")
|
|
# Utwórz główną kategorię
|
|
name_map = {
|
|
'uslugi': 'Usługi',
|
|
'budownictwo-grupa': 'Budownictwo',
|
|
'handel': 'Handel',
|
|
'produkcja-grupa': 'Produkcja',
|
|
}
|
|
main_cat = Category(
|
|
name=name_map.get(main_slug, main_slug),
|
|
slug=main_slug,
|
|
description=f'Główna kategoria: {name_map.get(main_slug, main_slug)}',
|
|
parent_id=None,
|
|
display_order=list(CATEGORY_MAPPING.keys()).index(main_slug) + 1
|
|
)
|
|
db.add(main_cat)
|
|
db.flush() # Get ID
|
|
|
|
main_categories[main_slug] = main_cat
|
|
print(f"[✓] Główna kategoria: {main_cat.name} (ID: {main_cat.id})")
|
|
|
|
# Przypisz podkategorie
|
|
for sub_slug in subcategory_slugs:
|
|
sub_cat = db.query(Category).filter(Category.slug == sub_slug).first()
|
|
if sub_cat:
|
|
if sub_cat.parent_id != main_cat.id:
|
|
sub_cat.parent_id = main_cat.id
|
|
print(f" → {sub_cat.name} przypisana do {main_cat.name}")
|
|
else:
|
|
print(f" ✓ {sub_cat.name} już przypisana")
|
|
else:
|
|
print(f" [!] Kategoria '{sub_slug}' nie istnieje - pomijam")
|
|
|
|
db.commit()
|
|
print("\n[✓] Przypisanie kategorii zakończone!")
|
|
|
|
# Pokaż podsumowanie
|
|
print("\n=== PODSUMOWANIE ===")
|
|
for main_slug, main_cat in main_categories.items():
|
|
subcats = db.query(Category).filter(Category.parent_id == main_cat.id).all()
|
|
print(f"\n{main_cat.name} ({len(subcats)} podkategorii):")
|
|
for sub in subcats:
|
|
company_count = len(sub.companies) if sub.companies else 0
|
|
print(f" - {sub.name}: {company_count} firm")
|
|
|
|
except Exception as e:
|
|
print(f"[!] Błąd: {e}")
|
|
db.rollback()
|
|
raise
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|