habulaj commited on
Commit
1aea8cd
·
verified ·
1 Parent(s): 3da8a04

Update routes/users.py

Browse files
Files changed (1) hide show
  1. routes/users.py +76 -0
routes/users.py CHANGED
@@ -129,6 +129,82 @@ async def get_recent_users_endpoint(
129
  logger.error(f"❌ Erro ao obter usuários: {str(e)}")
130
  raise HTTPException(status_code=500, detail=str(e))
131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  @router.get("/admin/user")
133
  async def get_user_name(
134
  user_id: str = Query(..., description="ID do usuário"),
 
129
  logger.error(f"❌ Erro ao obter usuários: {str(e)}")
130
  raise HTTPException(status_code=500, detail=str(e))
131
 
132
+ @router.post("/admin/update-user")
133
+ async def update_user(
134
+ request: Dict[str, Any],
135
+ user_token: str = Header(None, alias="User-key")
136
+ ):
137
+ """
138
+ Endpoint para atualizar informações de um usuário específico.
139
+ Atualmente suporta atualização de name e fee.
140
+ """
141
+ try:
142
+ # Verificar se o usuário é um administrador
143
+ admin_id = await verify_admin_token(user_token)
144
+
145
+ # Validar os parâmetros da requisição
146
+ user_id = request.get("user_id")
147
+ name = request.get("name")
148
+ fee = request.get("fee")
149
+
150
+ if not user_id:
151
+ raise HTTPException(status_code=400, detail="ID do usuário é obrigatório")
152
+
153
+ if name is None and fee is None:
154
+ raise HTTPException(status_code=400, detail="Pelo menos um campo para atualização (name ou fee) deve ser fornecido")
155
+
156
+ # Verificar se o usuário existe
157
+ user_query = f"{SUPABASE_URL}/rest/v1/User?select=name,fee&id=eq.{user_id}"
158
+
159
+ async with aiohttp.ClientSession() as session:
160
+ async with session.get(user_query, headers=SUPABASE_HEADERS) as response:
161
+ if response.status != 200:
162
+ logger.error(f"❌ Erro ao verificar usuário: {response.status}")
163
+ raise HTTPException(status_code=response.status, detail="Erro ao consultar usuário")
164
+
165
+ user_data = await response.json()
166
+
167
+ if not user_data:
168
+ raise HTTPException(status_code=404, detail="Usuário não encontrado")
169
+
170
+ current_user = user_data[0]
171
+
172
+ # Preparar os campos para atualização, apenas se forem diferentes
173
+ update_fields = {}
174
+
175
+ if name is not None and name != current_user.get("name"):
176
+ update_fields["name"] = name
177
+
178
+ if fee is not None and isinstance(fee, int) and fee != current_user.get("fee"):
179
+ update_fields["fee"] = fee
180
+
181
+ # Se não há campos para atualizar, retornar sem modificar
182
+ if not update_fields:
183
+ return {"message": "Nenhuma alteração necessária", "user_id": user_id}
184
+
185
+ # Atualizar o usuário no Supabase
186
+ update_url = f"{SUPABASE_URL}/rest/v1/User?id=eq.{user_id}"
187
+
188
+ async with session.patch(update_url, json=update_fields, headers=SUPABASE_HEADERS) as update_response:
189
+ if update_response.status != 204:
190
+ logger.error(f"❌ Erro ao atualizar usuário: {update_response.status}")
191
+ raise HTTPException(status_code=update_response.status, detail="Erro ao atualizar usuário")
192
+
193
+ # Retornar resultado da operação
194
+ return {
195
+ "message": "Usuário atualizado com sucesso",
196
+ "user_id": user_id,
197
+ "updated_fields": update_fields,
198
+ "updated_by": admin_id
199
+ }
200
+
201
+ except HTTPException as he:
202
+ raise he
203
+
204
+ except Exception as e:
205
+ logger.error(f"❌ Erro ao atualizar usuário: {str(e)}")
206
+ raise HTTPException(status_code=500, detail="Erro interno do servidor")
207
+
208
  @router.get("/admin/user")
209
  async def get_user_name(
210
  user_id: str = Query(..., description="ID do usuário"),