habulaj commited on
Commit
c314dfe
·
verified ·
1 Parent(s): a0c6b50

Update routes/users.py

Browse files
Files changed (1) hide show
  1. 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) -> List[Dict[str, Any]]:
68
- """Obtém os usuários mais recentes da plataforma, com filtro opcional por nome"""
69
  try:
70
- query = f"{SUPABASE_URL}/rest/v1/User?select=name&order=created_at.desc&limit={limit}"
 
 
 
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
- return users_data
 
 
 
 
 
 
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, com suporte a busca por nome
 
104
  """
105
  try:
106
  user_id = await verify_admin_token(user_token)
107
- users = await get_recent_users(limit, search)
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))