Update routes/users.py
Browse files- 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"),
|