From 22e54f212cdbebbcbc6a34cd872f515367e15169 Mon Sep 17 00:00:00 2001 From: Schubert Ferenc Date: Fri, 3 Jul 2026 18:48:40 +0200 Subject: [PATCH] fix(knowledge): fix manufacturer seed logging --- backend/hermes/app/knowledge_seed.py | 79 ++++++++++++++++++---------- 1 file changed, 50 insertions(+), 29 deletions(-) diff --git a/backend/hermes/app/knowledge_seed.py b/backend/hermes/app/knowledge_seed.py index 31eed13..39faa5f 100644 --- a/backend/hermes/app/knowledge_seed.py +++ b/backend/hermes/app/knowledge_seed.py @@ -1,14 +1,13 @@ import logging +from sqlalchemy import select from sqlalchemy.orm import Session from app.models.knowledge import KnowledgeManufacturer -from app.repositories.knowledge_repository import KnowledgeRepository -from app.services.knowledge_service import unique_slug logger = logging.getLogger(__name__) -STANDARD_MANUFACTURERS = [ +DEFAULT_MANUFACTURERS = [ "Stabo", "President", "Albrecht", @@ -22,35 +21,57 @@ STANDARD_MANUFACTURERS = [ ] -def seed_knowledge_manufacturers(db: Session) -> None: - created = 0 +def _slugify(value: str) -> str: + normalized = value.strip().lower() + normalized = normalized.replace("&", "und") + normalized = normalized.replace("ß", "ss") + normalized = normalized.replace("ö", "oe") + normalized = normalized.replace("ä", "ae") + normalized = normalized.replace("ü", "ue") - for name in STANDARD_MANUFACTURERS: - manufacturer = KnowledgeRepository.get_manufacturer_by_name(db, name) - if manufacturer is not None: - changed = False - if not manufacturer.slug: - manufacturer.slug = unique_slug( - db, - manufacturer.name, - lambda session, value: KnowledgeRepository.get_manufacturer_by_slug( - session, - value, - manufacturer.id, - ) is not None, - ) - changed = True - if changed: - db.add(manufacturer) + parts = [] + current = [] + + for char in normalized: + if char.isalnum(): + current.append(char) + elif current: + parts.append("".join(current)) + current = [] + + if current: + parts.append("".join(current)) + + return "-".join(parts) + + +def seed_knowledge_manufacturers(db: Session) -> None: + created_count = 0 + + existing = { + manufacturer.name.lower(): manufacturer + for manufacturer in db.scalars(select(KnowledgeManufacturer)).all() + } + + for name in DEFAULT_MANUFACTURERS: + existing_manufacturer = existing.get(name.lower()) + + if existing_manufacturer: + if not existing_manufacturer.slug: + existing_manufacturer.slug = _slugify(name) continue - slug = unique_slug( - db, - name, - lambda session, value: KnowledgeRepository.get_manufacturer_by_slug(session, value) is not None, + manufacturer = KnowledgeManufacturer( + name=name, + slug=_slugify(name), + notes="Systemseitig initial angelegt", ) - db.add(KnowledgeManufacturer(name=name, slug=slug, website="", notes="")) - created += 1 + db.add(manufacturer) + created_count += 1 db.commit() - logger.info("knowledge.manufacturers.seeded", extra={"created": created}) + + logger.info( + "knowledge.manufacturers.seeded", + extra={"manufacturer_seed_created_count": created_count}, + )