refactor: rebrand project to HartOMat

This commit is contained in:
2026-04-06 12:45:47 +02:00
parent fa7093307a
commit b795f0e6d6
95 changed files with 608 additions and 497 deletions
+2 -2
View File
@@ -1014,9 +1014,9 @@ async def get_dashboard_stats(
if isinstance(entry, dict) and entry.get("material"):
all_mat_names.add(entry["material"])
# Library materials (name starts with SCHAEFFLER_)
# Library materials (name starts with HARTOMAT_)
lib_count_result = await db.execute(
select(func.count(Material.id)).where(Material.name.like("SCHAEFFLER_%"))
select(func.count(Material.id)).where(Material.name.like("HARTOMAT_%"))
)
library_material_count = lib_count_result.scalar() or 0
+1 -1
View File
@@ -89,7 +89,7 @@ async def get_material_pbr_map(db: AsyncSession = Depends(get_db)):
}
# Also index by aliases so frontend can look up by raw Excel names
# (e.g. "Steel--Stahl" → same PBR as "SCHAEFFLER_010101_Steel-Bare")
# (e.g. "Steel--Stahl" → same PBR as "HARTOMAT_010101_Steel-Bare")
# Bypass RLS — this is public data and aliases may have NULL tenant_id
if pbr_map:
await db.execute(text("SET LOCAL app.current_tenant_id = 'bypass'"))
+14 -14
View File
@@ -23,7 +23,7 @@ class MaterialOut(BaseModel):
name: str
description: str | None
source: str
schaeffler_code: int | None = None
hartomat_code: int | None = None
created_by_name: str | None = None
aliases: list[str] = []
created_at: datetime
@@ -42,7 +42,7 @@ class MaterialCreate(BaseModel):
name: str
description: str | None = None
source: str = "manual"
schaeffler_code: int | None = None
hartomat_code: int | None = None
class MaterialUpdate(BaseModel):
@@ -64,7 +64,7 @@ def _to_out(mat: Material) -> MaterialOut:
name=mat.name,
description=mat.description,
source=mat.source,
schaeffler_code=mat.schaeffler_code,
hartomat_code=mat.hartomat_code,
created_by_name=creator_name,
aliases=alias_names,
created_at=mat.created_at,
@@ -94,9 +94,9 @@ async def get_next_code(
range_end = prefix_int + 99
result = await db.execute(
select(func.max(Material.schaeffler_code)).where(
Material.schaeffler_code >= range_start,
Material.schaeffler_code <= range_end,
select(func.max(Material.hartomat_code)).where(
Material.hartomat_code >= range_start,
Material.hartomat_code <= range_end,
)
)
max_code = result.scalar_one_or_none()
@@ -113,16 +113,16 @@ async def get_next_code(
}
@router.post("/seed-schaeffler")
async def seed_schaeffler_materials(
@router.post("/seed-hartomat")
async def seed_hartomat_materials(
user: User = Depends(require_admin_or_pm),
db: AsyncSession = Depends(get_db),
):
"""Bulk-create the 35 standard Schaeffler materials. Skips existing by name."""
from app.data.schaeffler_materials import SCHAEFFLER_MATERIALS
"""Bulk-create the 35 standard HartOMat materials. Skips existing by name."""
from app.data.hartomat_materials import HARTOMAT_MATERIALS
inserted = 0
for mat_data in SCHAEFFLER_MATERIALS:
for mat_data in HARTOMAT_MATERIALS:
existing = await db.execute(
select(Material).where(Material.name == mat_data["name"])
)
@@ -132,14 +132,14 @@ async def seed_schaeffler_materials(
name=mat_data["name"],
description=mat_data["description"],
source=mat_data["source"],
schaeffler_code=mat_data["schaeffler_code"],
hartomat_code=mat_data["hartomat_code"],
created_by=user.id,
)
db.add(mat)
inserted += 1
await db.commit()
return {"inserted": inserted, "total": len(SCHAEFFLER_MATERIALS)}
return {"inserted": inserted, "total": len(HARTOMAT_MATERIALS)}
@router.post("/seed-aliases")
@@ -273,7 +273,7 @@ async def create_material(
name=body.name,
description=body.description,
source=body.source,
schaeffler_code=body.schaeffler_code,
hartomat_code=body.hartomat_code,
created_by=user.id,
)
db.add(mat)
+2 -2
View File
@@ -475,8 +475,8 @@ async def scale_workers(
compose_file = os.path.join(compose_dir, "docker-compose.yml")
# Derive project name from compose dir on host (directory name = project name).
# Inside the container the compose file is at /compose, but the host project
# dir name determines the container naming prefix (e.g. "schaefflerautomat").
compose_project = os.environ.get("COMPOSE_PROJECT_NAME", "schaefflerautomat")
# dir name determines the container naming prefix (e.g. "hartomat").
compose_project = os.environ.get("COMPOSE_PROJECT_NAME", "hartomat")
def _scale() -> subprocess.CompletedProcess:
return subprocess.run(