admin frontend elkezdése, járművek tisztázása, frontend fejleszts

This commit is contained in:
Roo
2026-06-15 18:52:38 +00:00
parent ef8df9608c
commit 213ba3b0f1
80 changed files with 11615 additions and 2304 deletions

View File

@@ -1,7 +1,7 @@
#/opt/docker/dev/service_finder/backend/app/api/v1/endpoints/users.py
import copy
from fastapi import APIRouter, Depends, HTTPException
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import select, or_
@@ -117,6 +117,7 @@ def _build_user_response(user: User, active_org_id: Optional[int] = None) -> dic
"active_organization_id": active_org_id,
"preferred_language": user.preferred_language or "hu",
"person": person_data,
"is_last_admin": False, # Default, will be overridden in read_users_me
}
@@ -175,7 +176,10 @@ async def read_users_me(
active_org_id = org_row[0] if org_row else None
# Check if user is the last admin in any organization
is_last_admin = await AuthService.check_is_last_admin(db, current_user.id)
response_data = _build_user_response(current_user, active_org_id)
response_data["is_last_admin"] = is_last_admin
return UserResponse.model_validate(response_data)
@@ -497,3 +501,35 @@ async def get_my_network(
level2=level2,
level3=level3
)
@router.delete("/me", status_code=200)
async def delete_my_account(
reason: Optional[str] = Query(None, description="Törlés oka (opcionális)"),
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""
Saját fiók soft-delete.
Üzleti logika:
- Anonimizálja az e-mail címet (deleted_{id}_{timestamp}_{original_email})
- is_active = False, is_deleted = True, deleted_at = timestamp
- Person rekordot NEM bántja (megőrizzük a jövőbeli újraaktiváláshoz)
- Wallet és Gamification adatokat megőrzi (inaktív user miatt freeze)
- JWT token-ek a deleted_at middleware ellenőrzés miatt automatikusan érvénytelenülnek
"""
success = await AuthService.soft_delete_user(
db=db,
user_id=current_user.id,
reason=reason or "user_requested_self_delete",
actor_id=current_user.id
)
if not success:
raise HTTPException(
status_code=400,
detail="A felhasználó már törölve van."
)
return {"status": "ok", "message": "Fiók sikeresen törölve."}