Update routes/users.py
Browse files- routes/users.py +24 -13
routes/users.py
CHANGED
@@ -64,13 +64,15 @@ async def verify_admin_token(user_token: str) -> str:
|
|
64 |
|
65 |
return user_id
|
66 |
|
67 |
-
async def get_recent_users(limit: int = 50, search: Optional[str] = None) ->
|
68 |
-
"""Obtém os usuários mais recentes da plataforma, com filtro opcional por nome"""
|
69 |
try:
|
70 |
-
|
|
|
|
|
|
|
71 |
|
72 |
if search:
|
73 |
-
# Escape aspas simples e adicionar operador ILIKE para busca parcial
|
74 |
search_term = search.replace("'", "''")
|
75 |
query += f"&name=ilike.*{search_term}*"
|
76 |
|
@@ -81,34 +83,43 @@ async def get_recent_users(limit: int = 50, search: Optional[str] = None) -> Lis
|
|
81 |
async with session.get(query, headers=headers) as response:
|
82 |
if response.status != 200:
|
83 |
logger.error(f"❌ Erro ao obter usuários: {response.status}")
|
84 |
-
return []
|
85 |
|
86 |
text = await response.text(encoding='utf-8')
|
87 |
import json
|
88 |
users_data = json.loads(text)
|
89 |
-
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
|
92 |
except Exception as e:
|
93 |
logger.error(f"❌ Erro ao obter usuários: {str(e)}")
|
94 |
-
return []
|
95 |
|
96 |
@router.get("/admin/users")
|
97 |
async def get_recent_users_endpoint(
|
98 |
user_token: str = Header(None, alias="User-key"),
|
99 |
limit: int = Query(50, ge=1, le=100),
|
|
|
100 |
search: Optional[str] = Query(None)
|
101 |
):
|
102 |
"""
|
103 |
-
Endpoint para obter os usuários mais recentes da plataforma,
|
|
|
104 |
"""
|
105 |
try:
|
106 |
user_id = await verify_admin_token(user_token)
|
107 |
-
|
108 |
|
109 |
return {
|
110 |
-
"users": users,
|
111 |
-
"count": len(users)
|
|
|
112 |
}
|
113 |
|
114 |
except HTTPException as he:
|
@@ -116,4 +127,4 @@ async def get_recent_users_endpoint(
|
|
116 |
|
117 |
except Exception as e:
|
118 |
logger.error(f"❌ Erro ao obter usuários: {str(e)}")
|
119 |
-
raise HTTPException(status_code=500, detail=str(e))
|
|
|
64 |
|
65 |
return user_id
|
66 |
|
67 |
+
async def get_recent_users(limit: int = 50, search: Optional[str] = None, page: int = 0) -> Dict[str, Any]:
|
68 |
+
"""Obtém os usuários mais recentes da plataforma, com filtro opcional por nome e paginação"""
|
69 |
try:
|
70 |
+
offset = page * limit
|
71 |
+
limit_plus_one = limit + 1 # Buscar 1 extra para saber se há próxima página
|
72 |
+
|
73 |
+
query = f"{SUPABASE_URL}/rest/v1/User?select=name&order=created_at.desc&limit={limit_plus_one}&offset={offset}"
|
74 |
|
75 |
if search:
|
|
|
76 |
search_term = search.replace("'", "''")
|
77 |
query += f"&name=ilike.*{search_term}*"
|
78 |
|
|
|
83 |
async with session.get(query, headers=headers) as response:
|
84 |
if response.status != 200:
|
85 |
logger.error(f"❌ Erro ao obter usuários: {response.status}")
|
86 |
+
return {"users": [], "has_next_page": False}
|
87 |
|
88 |
text = await response.text(encoding='utf-8')
|
89 |
import json
|
90 |
users_data = json.loads(text)
|
91 |
+
|
92 |
+
has_next_page = len(users_data) > limit
|
93 |
+
users = users_data[:limit] # Garante que só retorna até o limite
|
94 |
+
|
95 |
+
return {
|
96 |
+
"users": users,
|
97 |
+
"has_next_page": has_next_page
|
98 |
+
}
|
99 |
|
100 |
except Exception as e:
|
101 |
logger.error(f"❌ Erro ao obter usuários: {str(e)}")
|
102 |
+
return {"users": [], "has_next_page": False}
|
103 |
|
104 |
@router.get("/admin/users")
|
105 |
async def get_recent_users_endpoint(
|
106 |
user_token: str = Header(None, alias="User-key"),
|
107 |
limit: int = Query(50, ge=1, le=100),
|
108 |
+
page: int = Query(0, ge=0),
|
109 |
search: Optional[str] = Query(None)
|
110 |
):
|
111 |
"""
|
112 |
+
Endpoint para obter os usuários mais recentes da plataforma,
|
113 |
+
com suporte a busca por nome e paginação.
|
114 |
"""
|
115 |
try:
|
116 |
user_id = await verify_admin_token(user_token)
|
117 |
+
result = await get_recent_users(limit, search, page)
|
118 |
|
119 |
return {
|
120 |
+
"users": result["users"],
|
121 |
+
"count": len(result["users"]),
|
122 |
+
"has_next_page": result["has_next_page"]
|
123 |
}
|
124 |
|
125 |
except HTTPException as he:
|
|
|
127 |
|
128 |
except Exception as e:
|
129 |
logger.error(f"❌ Erro ao obter usuários: {str(e)}")
|
130 |
+
raise HTTPException(status_code=500, detail=str(e))
|