refaktor címtár

This commit is contained in:
Roo
2026-07-01 19:49:58 +00:00
parent 6e627d0ebe
commit 7654913d21
198 changed files with 3485 additions and 1609 deletions

View File

@@ -17,9 +17,12 @@ from app.db.session import get_db
from app.api.deps import get_current_user
from app.schemas.organization import CorpOnboardIn, CorpOnboardResponse, OrganizationUpdate, OrganizationResponse
from app.schemas.subscription import SubscriptionTierResponse
from app.schemas.address import AddressOut
from app.services.billing_engine import upgrade_org_subscription
from app.services.address_manager import AddressManager
from app.models.marketplace.organization import Organization, OrgType, OrganizationMember, Branch, OrgUserRole, OrgRole
from app.models.identity import User, OneTimePassword
from app.models.identity.address import Address
from app.core.config import settings
from app.services.security_service import security_service
from app.models import LogSeverity
@@ -49,7 +52,7 @@ async def onboard_organization(
if org_in.country_code == "HU":
if not re.match(r"^\d{8}-\d-\d{2}$", org_in.tax_number):
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
status_code=status.HTTP_400_BAD_REQUEST,
detail=_("ORGANIZATION.ERROR.INVALID_TAX_FORMAT")
)
@@ -65,7 +68,10 @@ async def onboard_organization(
# 3. KÖTELEZŐ MEZŐ: folder_slug generálása
temp_slug = hashlib.md5(f"{org_in.tax_number}-{uuid.uuid4()}".encode()).hexdigest()[:12]
# 4. Mentés
# 4. P0 REFACTORED: Create Address record via AddressManager, then link via address_id FK
address_id = await AddressManager.create_or_update(db, None, org_in.address)
# 5. Mentés
new_org = Organization(
full_name=org_in.full_name,
name=org_in.name,
@@ -73,12 +79,7 @@ async def onboard_organization(
tax_number=org_in.tax_number,
reg_number=org_in.reg_number,
folder_slug=temp_slug,
address_zip=org_in.address_zip,
address_city=org_in.address_city,
address_street_name=org_in.address_street_name,
address_street_type=org_in.address_street_type,
address_house_number=org_in.address_house_number,
address_hrsz=org_in.address_hrsz,
address_id=address_id,
country_code=org_in.country_code,
org_type=OrgType.business,
status="pending_verification",
@@ -96,22 +97,17 @@ async def onboard_organization(
db.add(new_org)
await db.flush()
# 5. ALAPÉRTELMEZETT KÖZPONTI TELEPHELY LÉTREHOZÁSA
# 6. ALAPÉRTELMEZETT KÖZPONTI TELEPHELY LÉTREHOZÁSA (with address_id FK)
main_branch = Branch(
organization_id=new_org.id,
name=_("ORGANIZATION.BRANCH.DEFAULT_NAME"),
is_main=True,
postal_code=org_in.address_zip,
city=org_in.address_city,
street_name=org_in.address_street_name,
street_type=org_in.address_street_type,
house_number=org_in.address_house_number,
hrsz=org_in.address_hrsz,
address_id=address_id,
status="active"
)
db.add(main_branch)
# 6. TULAJDONOS RÖGZÍTÉSE
# 7. TULAJDONOS RÖGZÍTÉSE
owner_member = OrganizationMember(
organization_id=new_org.id,
user_id=current_user.id,
@@ -119,7 +115,7 @@ async def onboard_organization(
)
db.add(owner_member)
# 7. NAS Mappa létrehozása
# 8. NAS Mappa létrehozása
try:
base_path = getattr(settings, "NAS_STORAGE_PATH", "/mnt/nas/app_data")
org_path = os.path.join(base_path, "organizations", str(new_org.id))
@@ -185,6 +181,7 @@ async def get_my_organizations(
A bejelentkezett felhasználóhoz tartozó szervezetek listázása.
P0: Minden szervezethez visszaadja a valós max_vehicles és max_garages limiteket
a subscription_tier JSONB rules alapján.
P0 REFACTORED: Address adatok az address relációból (AddressOut séma).
"""
from app.models.core_logic import SubscriptionTier, OrganizationSubscription
@@ -205,7 +202,10 @@ async def get_my_organizations(
stmt = (
select(Organization)
.where(Organization.id.in_(select(subq.c.id)))
.options(selectinload(Organization.members))
.options(
selectinload(Organization.members),
selectinload(Organization.address),
)
)
result = await db.execute(stmt)
orgs = result.scalars().all()
@@ -256,13 +256,8 @@ async def get_my_organizations(
"org_type": o.org_type.value if hasattr(o.org_type, 'value') else str(o.org_type),
"visual_settings": o.visual_settings if hasattr(o, 'visual_settings') else None,
"user_role": _get_user_role(o, current_user.id),
# ── Cím adatok (Address fields) ──
"address_zip": o.address_zip,
"address_city": o.address_city,
"address_street_name": o.address_street_name,
"address_street_type": o.address_street_type,
"address_house_number": o.address_house_number,
"address_hrsz": o.address_hrsz,
# ── P0 REFACTORED: Address from relationship ──
"address": AddressOut.model_validate(o.address).model_dump() if o.address else None,
}
for o in orgs
]
@@ -704,6 +699,12 @@ async def update_organization(
"""
Szervezet adatainak részleges frissítése (általános PATCH).
Csak OWNER vagy ADMIN jogosultságú felhasználó módosíthatja.
P0 REFACTORED: Address kezelés a unified AddressIn/AddressOut séma alapján.
- Ha payload.address meg van adva, akkor:
* Ha van meglévő address_id → frissíti a system.addresses rekordot
* Ha nincs → létrehoz egy új system.addresses rekordot és beállítja az address_id FK-t
- A régi denormalizált mezők (address_zip, address_city, stb.) ELTÁVOLÍTVA.
"""
# 1. Jogosultság ellenőrzése
# Először lekérjük a szervezetet, hogy ellenőrizhessük az owner_id-t is
@@ -745,7 +746,15 @@ async def update_organization(
org.visual_settings = current_vs
del update_dict["visual_settings"]
# 4. Többi mező frissítése
# 3. P0 REFACTORED: Address FK logic via AddressManager
if "address" in update_dict:
addr_in = update_dict["address"]
org.address_id = await AddressManager.create_or_update(
db, org.address_id, addr_in
)
del update_dict["address"]
# 4. Többi mező frissítése (kivéve a régi denormalizált címmezőket)
for field, value in update_dict.items():
if hasattr(org, field) and value is not None:
setattr(org, field, value)