habulaj commited on
Commit
e4dfc42
·
verified ·
1 Parent(s): 20fcacc

Update routes/approvals.py

Browse files
Files changed (1) hide show
  1. routes/approvals.py +59 -9
routes/approvals.py CHANGED
@@ -64,9 +64,9 @@ async def verify_admin_token(user_token: str) -> str:
64
  return user_id
65
 
66
  async def get_users_pending_approval() -> Dict[str, Any]:
67
- """Obtém todos os usuários que ainda não foram aprovados mas completaram o onboarding"""
68
  try:
69
- query = (
70
  f"{SUPABASE_URL}/rest/v1/User"
71
  "?select=id,name,avatar,role,blurhash"
72
  "&approved_account=eq.false"
@@ -79,16 +79,66 @@ async def get_users_pending_approval() -> Dict[str, Any]:
79
  headers["Accept"] = "application/json; charset=utf-8"
80
 
81
  async with aiohttp.ClientSession() as session:
82
- async with session.get(query, headers=headers) as response:
 
83
  if response.status != 200:
84
- logger.error(f"❌ Erro ao buscar usuários pendentes de aprovação: {response.status}")
85
- raise HTTPException(status_code=500, detail="Erro ao consultar o Supabase")
86
-
87
  users = await response.json()
88
- return {"users": users, "count": len(users)}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
  except Exception as e:
91
- logger.error(f"❌ Erro ao buscar usuários pendentes: {str(e)}")
92
  raise HTTPException(status_code=500, detail="Erro interno do servidor")
93
 
94
  @router.get("/admin/pending-approvals")
@@ -97,7 +147,7 @@ async def pending_approvals_endpoint(
97
  ):
98
  """
99
  Endpoint para listar usuários que ainda não foram aprovados,
100
- mas finalizaram o onboarding e o Stripe.
101
  """
102
  try:
103
  await verify_admin_token(user_token)
 
64
  return user_id
65
 
66
  async def get_users_pending_approval() -> Dict[str, Any]:
67
+ """Obtém todos os usuários que ainda não foram aprovados e suas respostas de onboarding"""
68
  try:
69
+ query_users = (
70
  f"{SUPABASE_URL}/rest/v1/User"
71
  "?select=id,name,avatar,role,blurhash"
72
  "&approved_account=eq.false"
 
79
  headers["Accept"] = "application/json; charset=utf-8"
80
 
81
  async with aiohttp.ClientSession() as session:
82
+ # Busca os usuários pendentes
83
+ async with session.get(query_users, headers=headers) as response:
84
  if response.status != 200:
85
+ logger.error(f"❌ Erro ao buscar usuários pendentes: {response.status}")
86
+ raise HTTPException(status_code=500, detail="Erro ao consultar usuários")
87
+
88
  users = await response.json()
89
+
90
+ # Se nenhum usuário, retornar vazio
91
+ if not users:
92
+ return {"users": [], "count": 0}
93
+
94
+ user_ids = [f"id=eq.{user['id']}" for user in users]
95
+ user_ids_query = ",".join(user_ids)
96
+
97
+ # Busca as respostas desses usuários
98
+ query_answers = (
99
+ f"{SUPABASE_URL}/rest/v1/User answers"
100
+ f"?select=user_id,question_id,answers"
101
+ f"&or=({user_ids_query})"
102
+ )
103
+
104
+ async with session.get(query_answers, headers=headers) as response:
105
+ if response.status != 200:
106
+ logger.warning("⚠️ Erro ao buscar respostas de usuários")
107
+ user_answers = []
108
+ else:
109
+ user_answers = await response.json()
110
+
111
+ # Busca as perguntas
112
+ query_questions = f"{SUPABASE_URL}/rest/v1/Onboarding?select=id,title"
113
+ async with session.get(query_questions, headers=headers) as response:
114
+ if response.status != 200:
115
+ logger.warning("⚠️ Erro ao buscar perguntas")
116
+ questions = []
117
+ else:
118
+ questions = await response.json()
119
+
120
+ # Mapeia perguntas por ID
121
+ question_map = {q["id"]: q["title"] for q in questions}
122
+
123
+ # Agrupa respostas por usuário
124
+ from collections import defaultdict
125
+ grouped_answers = defaultdict(list)
126
+
127
+ for answer in user_answers:
128
+ title = question_map.get(answer["question_id"], "Pergunta desconhecida")
129
+ grouped_answers[answer["user_id"]].append({
130
+ "question": title,
131
+ "answer": answer.get("answers", [])
132
+ })
133
+
134
+ # Enriquecer usuários com respostas
135
+ for user in users:
136
+ user["answers"] = grouped_answers.get(user["id"], [])
137
+
138
+ return {"users": users, "count": len(users)}
139
 
140
  except Exception as e:
141
+ logger.error(f"❌ Erro ao buscar usuários e respostas: {str(e)}")
142
  raise HTTPException(status_code=500, detail="Erro interno do servidor")
143
 
144
  @router.get("/admin/pending-approvals")
 
147
  ):
148
  """
149
  Endpoint para listar usuários que ainda não foram aprovados,
150
+ com respostas das perguntas de onboarding.
151
  """
152
  try:
153
  await verify_admin_token(user_token)