Update routes/stylist.py
Browse files- 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 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
|
|
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())
|