habulaj commited on
Commit
8ef85b9
·
verified ·
1 Parent(s): 226db43

Update routes/stylist.py

Browse files
Files changed (1) hide show
  1. routes/stylist.py +46 -7
routes/stylist.py CHANGED
@@ -380,6 +380,44 @@ def get_monthly_likes(user_id: str) -> Dict[str, Any]:
380
  # Calcular data de início (6 meses atrás)
381
  start_date = (now_ny - relativedelta(months=6)).strftime('%Y-%m-%d')
382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
  try:
384
  # Primeiro, obter todos os feed_items do usuário
385
  feeds_url = f"{SUPABASE_URL}/rest/v1/Feeds?user_id=eq.{user_id}"
@@ -403,14 +441,15 @@ def get_monthly_likes(user_id: str) -> Dict[str, Any]:
403
 
404
  # Contar likes por mês
405
  for like in likes:
406
- # Converter a data para o fuso horário de NY
407
  like_date_str = like.get("created_at")
408
- like_date = datetime.fromisoformat(like_date_str.replace('Z', '+00:00')).astimezone(ny_timezone)
409
-
410
- month_key = f"{like_date.year}-{like_date.month}"
411
- if month_key in monthly_data:
412
- monthly_data[month_key]["likes_count"] += 1
413
- total_likes_last_6_months += 1
 
414
 
415
  # Convertendo para lista e ordenando por mês (do mais recente para o mais antigo)
416
  result = list(monthly_data.values())
 
380
  # Calcular data de início (6 meses atrás)
381
  start_date = (now_ny - relativedelta(months=6)).strftime('%Y-%m-%d')
382
 
383
+ def parse_datetime_safely(date_str: str) -> datetime:
384
+ """Parse datetime string safely, handling microseconds overflow"""
385
+ try:
386
+ # Remove 'Z' e substitui por '+00:00' se necessário
387
+ if date_str.endswith('Z'):
388
+ date_str = date_str.replace('Z', '+00:00')
389
+
390
+ # Verificar se há microssegundos com mais de 6 dígitos
391
+ if '.' in date_str and ('+' in date_str or '-' in date_str.split('T')[1]):
392
+ # Separar a parte dos microssegundos
393
+ parts = date_str.split('.')
394
+ if len(parts) == 2:
395
+ base_part = parts[0]
396
+ microsec_and_tz = parts[1]
397
+
398
+ # Encontrar onde termina os microssegundos (início do timezone)
399
+ tz_start_idx = -1
400
+ for i, char in enumerate(microsec_and_tz):
401
+ if char in ['+', '-']:
402
+ tz_start_idx = i
403
+ break
404
+
405
+ if tz_start_idx > 0:
406
+ microsec_part = microsec_and_tz[:tz_start_idx]
407
+ tz_part = microsec_and_tz[tz_start_idx:]
408
+
409
+ # Limitar microssegundos a 6 dígitos
410
+ if len(microsec_part) > 6:
411
+ microsec_part = microsec_part[:6]
412
+
413
+ date_str = f"{base_part}.{microsec_part}{tz_part}"
414
+
415
+ return datetime.fromisoformat(date_str)
416
+ except ValueError as e:
417
+ logger.warning(f"⚠️ Error parsing date '{date_str}': {str(e)}")
418
+ # Retornar data atual como fallback
419
+ return datetime.now(pytz.UTC)
420
+
421
  try:
422
  # Primeiro, obter todos os feed_items do usuário
423
  feeds_url = f"{SUPABASE_URL}/rest/v1/Feeds?user_id=eq.{user_id}"
 
441
 
442
  # Contar likes por mês
443
  for like in likes:
444
+ # Converter a data para o fuso horário de NY usando o parse seguro
445
  like_date_str = like.get("created_at")
446
+ if like_date_str:
447
+ like_date = parse_datetime_safely(like_date_str).astimezone(ny_timezone)
448
+
449
+ month_key = f"{like_date.year}-{like_date.month}"
450
+ if month_key in monthly_data:
451
+ monthly_data[month_key]["likes_count"] += 1
452
+ total_likes_last_6_months += 1
453
 
454
  # Convertendo para lista e ordenando por mês (do mais recente para o mais antigo)
455
  result = list(monthly_data.values())