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

Update routes/users.py

Browse files
Files changed (1) hide show
  1. routes/users.py +18 -6
routes/users.py CHANGED
@@ -11,9 +11,10 @@ router = APIRouter()
11
  # Configuração do Supabase
12
  SUPABASE_URL = "https://ussxqnifefkgkaumjann.supabase.co"
13
  SUPABASE_KEY = os.getenv("SUPA_KEY")
 
14
 
15
- if not SUPABASE_KEY:
16
- raise ValueError("❌ SUPA_KEY não foi definido no ambiente!")
17
 
18
  SUPABASE_HEADERS = {
19
  "apikey": SUPABASE_KEY,
@@ -21,6 +22,12 @@ SUPABASE_HEADERS = {
21
  "Content-Type": "application/json"
22
  }
23
 
 
 
 
 
 
 
24
  # Configuração do logging
25
  logging.basicConfig(level=logging.INFO)
26
  logger = logging.getLogger(__name__)
@@ -137,6 +144,7 @@ async def update_user(
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
@@ -153,7 +161,7 @@ async def update_user(
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:
@@ -182,14 +190,18 @@ async def update_user(
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",
 
11
  # Configuração do Supabase
12
  SUPABASE_URL = "https://ussxqnifefkgkaumjann.supabase.co"
13
  SUPABASE_KEY = os.getenv("SUPA_KEY")
14
+ SUPABASE_ROLE_KEY = os.getenv("SUPA_SERVICE_KEY")
15
 
16
+ if not SUPABASE_KEY or not SUPABASE_ROLE_KEY:
17
+ raise ValueError("❌ SUPA_KEY ou SUPA_SERVICE_KEY não foram definidos no ambiente!")
18
 
19
  SUPABASE_HEADERS = {
20
  "apikey": SUPABASE_KEY,
 
22
  "Content-Type": "application/json"
23
  }
24
 
25
+ SUPABASE_ROLE_HEADERS = {
26
+ "apikey": SUPABASE_ROLE_KEY,
27
+ "Authorization": f"Bearer {SUPABASE_ROLE_KEY}",
28
+ "Content-Type": "application/json"
29
+ }
30
+
31
  # Configuração do logging
32
  logging.basicConfig(level=logging.INFO)
33
  logger = logging.getLogger(__name__)
 
144
  """
145
  Endpoint para atualizar informações de um usuário específico.
146
  Atualmente suporta atualização de name e fee.
147
+ Usa a chave de serviço para bypassar RLS do Supabase.
148
  """
149
  try:
150
  # Verificar se o usuário é um administrador
 
161
  if name is None and fee is None:
162
  raise HTTPException(status_code=400, detail="Pelo menos um campo para atualização (name ou fee) deve ser fornecido")
163
 
164
+ # Verificar se o usuário existe - usando os headers normais para consulta
165
  user_query = f"{SUPABASE_URL}/rest/v1/User?select=name,fee&id=eq.{user_id}"
166
 
167
  async with aiohttp.ClientSession() as session:
 
190
  if not update_fields:
191
  return {"message": "Nenhuma alteração necessária", "user_id": user_id}
192
 
193
+ # Atualizar o usuário no Supabase usando a chave de serviço para bypassar RLS
194
  update_url = f"{SUPABASE_URL}/rest/v1/User?id=eq.{user_id}"
195
 
196
+ # Usando SUPABASE_ROLE_HEADERS para ter permissões de serviço completas
197
+ async with session.patch(update_url, json=update_fields, headers=SUPABASE_ROLE_HEADERS) as update_response:
198
  if update_response.status != 204:
199
+ logger.error(f"❌ Erro ao atualizar usuário: {update_response.status} - {await update_response.text()}")
200
  raise HTTPException(status_code=update_response.status, detail="Erro ao atualizar usuário")
201
 
202
+ # Registrar a operação bem-sucedida
203
+ logger.info(f"✅ Usuário {user_id} atualizado com sucesso por {admin_id}: {update_fields}")
204
+
205
  # Retornar resultado da operação
206
  return {
207
  "message": "Usuário atualizado com sucesso",