admin frontend elkezdése, járművek tisztázása, frontend fejleszts
This commit is contained in:
@@ -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."}
|
||||
|
||||
Reference in New Issue
Block a user