Lagerorte per 10-Zeichen-Code statt fortlaufender ID; iOS-Einlagern ohne Kamerazwang
Lagerort-IDs sind jetzt ein zufaelliger 10-Zeichen-Code (wie die Einzelstueck-UIDs) statt einer fortlaufenden Zahl - so kollidiert die Stammdaten-Sicherung zwischen zwei Instanzen praktisch nie mehr, und der Code ist zugleich der Inhalt des QR /l/<code>. Alle Fremdschluessel (lots, movements, items, Mindestbestaende, parent_id) ziehen mit; die Umstellung laeuft einmalig und transaktional beim Serverstart (_migrate_locations_to_code) und rollt bei Fehlern komplett zurueck. Vor dem Deploy ein DB-Backup machen. iOS-Einlagern oeffnet nicht mehr sofort die Kamera, sondern ein Formular mit Artikelsuche; die Kamera kommt erst per Button. Im Formular laesst sich der Lagerort zusaetzlich per /l/-QR scannen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,17 @@ def _orte(db):
|
||||
return keller, regal, fach
|
||||
|
||||
|
||||
def test_neuer_ort_bekommt_10_zeichen_code_als_id(db):
|
||||
ort = Location(name="Speisekammer")
|
||||
db.add(ort)
|
||||
db.commit()
|
||||
# Statt fortlaufender Zahl trägt der Lagerort einen zufälligen Code – das
|
||||
# macht Sicherung/Import zwischen zwei Instanzen konfliktfrei.
|
||||
assert isinstance(ort.id, str)
|
||||
assert len(ort.id) == 10
|
||||
assert set(ort.id) <= set("ABCDEFGHJKMNPQRSTUVWXYZ23456789")
|
||||
|
||||
|
||||
def test_umbenennen_ohne_parent_bleibt_hierarchie(db, admin):
|
||||
keller, regal, _ = _orte(db)
|
||||
out = update_location(regal.id, LocationUpdate(name="Regal links"), db=db, _=admin)
|
||||
@@ -67,5 +78,5 @@ def test_umhaengen_in_eigenen_unterort_wird_abgelehnt(db, admin):
|
||||
def test_umhaengen_auf_unbekannten_ort_ist_404(db, admin):
|
||||
_, _, fach = _orte(db)
|
||||
with pytest.raises(HTTPException) as ex:
|
||||
update_location(fach.id, LocationUpdate(parent_id=99999), db=db, _=admin)
|
||||
update_location(fach.id, LocationUpdate(parent_id="ZZZZZZZZZZ"), db=db, _=admin)
|
||||
assert ex.value.status_code == 404
|
||||
|
||||
Reference in New Issue
Block a user