nordabiz/scripts/assign_category_parents.py
Maciej Pienczyn 4b38f8953c feat(categories): Hierarchiczna struktura kategorii
- 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>
2026-01-28 20:51:15 +01:00

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()