OctusTech/cartalogo-api
0
1import os2from dotenv import load_dotenv3from supabase import create_client, Client4import json5 6# Carrega variáveis de ambiente7load_dotenv()8 9class DataValidator:10 def __init__(self):11 """Inicializa o validador de dados"""12 supabase_url = os.getenv('SUPABASE_URL')13 supabase_key = os.getenv('SUPABASE_KEY') # Usa a chave anon para leitura14 15 if not supabase_url or not supabase_key:16 raise ValueError("❌ Credenciais do Supabase não encontradas!")17 18 self.supabase: Client = create_client(supabase_url, supabase_key)19 print("✅ Conectado ao Supabase para validação.")20 21 def validate_piece(self, sku: str):22 """Valida os dados de uma peça específica e suas imagens"""23 print(f"\n🔍 Validando SKU: {sku}")24 25 try:26 # 1. Busca metadados da peça27 piece_response = self.supabase.table('pieces').select('*').eq('sku', sku).single().execute()28 if not piece_response.data:29 print(f"❌ Peça com SKU {sku} não encontrada na tabela 'pieces'.")30 return31 32 piece_data = piece_response.data33 print("\n--- ✅ Dados da Peça (tabela 'pieces') ---")34 print(f" - Nome: {piece_data.get('name')}")35 print(f" - Coleção: {piece_data.get('collection')}")36 print(f" - Descrição (CSV): {piece_data.get('description', '')[:100]}...")37 38 # 2. Busca imagens associadas39 images_response = self.supabase.table('piece_images').select('*').eq('sku', sku).execute()40 if not images_response.data:41 print("❌ Nenhuma imagem encontrada na tabela 'piece_images'.")42 return43 44 print(f"\n--- ✅ Imagens Associadas ({len(images_response.data)}) ---")45 46 for i, image_data in enumerate(images_response.data, 1):47 image_id = image_data.get('id')48 print(f"\n 🖼️ Imagem {i}: {image_data.get('file_name')}")49 print(f" - ID da Imagem: {image_id}")50 print(f" - URL Original: {'Sim' if image_data.get('original_url') else 'Não'}")51 print(f" - URL Thumbnail: {'Sim' if image_data.get('thumbnail_url') else 'Não'}")52 print(f" - Descrição IA: {'Sim' if image_data.get('ai_description') else 'Não'} ({len(image_data.get('ai_description', ''))} caracteres)")53 print(f" - Análise Técnica: {'Sim' if image_data.get('technical_analysis') else 'Não'}")54 print(f" - Cores Dominantes: {'Sim' if image_data.get('dominant_colors') else 'Não'}")55 print(f" - Score de Qualidade: {image_data.get('quality_score')}")56 57 # 3. Busca tags da imagem58 tags_response = self.supabase.table('image_tags').select('tag, tag_type').eq('image_id', image_id).execute()59 if tags_response.data:60 tags = [f"{t['tag']} ({t['tag_type']})" for t in tags_response.data]61 print(f" - Tags Automáticas ({len(tags)}): {', '.join(tags)}")62 else:63 print(" - Tags Automáticas: ❌ Nenhuma encontrada.")64 65 # 4. Busca características visuais66 features_response = self.supabase.table('visual_features').select('feature_type, feature_value').eq('image_id', image_id).execute()67 if features_response.data:68 features = [f"{f['feature_type']}:{f['feature_value']}" for f in features_response.data]69 print(f" - Características Visuais ({len(features)}): {', '.join(features)}")70 else:71 print(" - Características Visuais: ❌ Nenhuma encontrada.")72 73 except Exception as e:74 print(f"❌ Erro durante a validação: {e}")75 76if __name__ == "__main__":77 validator = DataValidator()78 79 # Substitua pelo SKU de uma peça que você acabou de processar80 sku_para_validar = "CO8671" 81 82 validator.validate_piece(sku_para_validar)83 