← スキル一覧に戻る

engenharia-de-dados-e-supabase-o-arquivista
by otavio0machado
⭐ 0🍴 0📅 2026年1月22日
SKILL.md
name: Engenharia de Dados e Supabase (O Arquivista) description: Otimização e padronização da interação com o banco de dados Supabase e engenharia de dados.
Skill: Engenharia de Dados e Supabase ("O Arquivista")
Esta skill organiza a camada de dados do Biodiagnóstico, promovendo o padrão Repository para desacoplar a lógica de negócios das chamadas diretas ao Supabase. Isso facilita manutenção, testes e futuras migrações.
🎯 Objetivos
- Centralizar queries SQL/Supabase em classes de Repositório.
- Eliminar duplicidade de código de acesso a dados nas páginas.
- Garantir validação de dados com Pydantic antes da persistência.
- Sincronização em Tempo Real: Usar canais de broadcast do Supabase para refletir mudanças instantaneamente na UI Reflex.
- Versionamento de Schema: Uso obrigatório de migrações para qualquer alteração de DDL.
- Fornecer snippets para operações complexas (Upsert, Joins).
📂 Estrutura Recomendada
biodiagnostico_app/repositories/: Classes de acesso a dados.user_repository.pyexam_repository.pybase_repository.py: Classe base com métodos comuns (CRUD).
biodiagnostico_app/schemas/: Modelos Pydantic para validação (se não usar apenas SQLModel do Reflex).
🛠️ O Padrão Repository
Ao invés de chamar supabase.table("users").insert(...) diretamente no State, use:
# No State
from ..repositories.user_repository import UserRepository
def save_user(self):
UserRepository.create(self.user_data)
📝 Receitas e Templates
Base Repository (Template)
Use este template para criar repositórios tipados:
# repositories/base_repository.py
from typing import Generic, TypeVar, List, Optional
import reflex as rx
T = TypeVar("T")
class BaseRepository(Generic[T]):
def __init__(self, table_name: str):
self.table = table_name
def get_client(self):
# Assumindo que o client está acessível via state ou config global
# Ajuste conforme sua implementação de client singleton
return rx.get_app().state_manager.get_state(rx.State).supabase_client
def get_all(self) -> List[T]:
response = self.get_client().table(self.table).select("*").execute()
return response.data
def create(self, data: dict) -> T:
response = self.get_client().table(self.table).insert(data).execute()
return response.data[0]
Validação com Pydantic
Antes de salvar, valide:
from pydantic import BaseModel, EmailStr
class UserCreate(BaseModel):
name: str
email: EmailStr
role: str = "user"
# No uso:
try:
valid_data = UserCreate(**raw_data)
repo.create(valid_data.dict())
except ValueError as e:
print(f"Dados inválidos: {e}")
🛠️ Ferramentas do Arquivista (Scripts)
A pasta scripts/ contém seus "ajudantes" automatizados para manter o banco de dados saudável. Execute-os sempre que precisar de uma faxina ou mudança:
limpar_duplicatas.py: (O Faxineiro) Remove registros idênticos que foram salvos por erro.snapshot_seguranca.py: (O Backup) Cria uma cópia de segurança dos dados de CQ antes de você fazer grandes alterações.verificar_integridade.py: (O Alerta) Identifica exames que estão sem informações obrigatórias.importador_excel.py: (O Tradutor) Use para subir dados de planilhas externas para dentro do sistema.ajustar_horarios.py: (O Relojoeiro) Mantém todas as datas dos exames sincronizadas e padronizadas.
🚨 Guardrails do Arquivista
- Nunca chame
supabase.tablediretamente dentro de umrenderou componente UI. Use sempre viaState. - Real-time Caution: Ao usar
rx.event_source, garanta que o canal seja fechado ao sair da página para evitar vazamento de memória. - Migrações Primeiro: Nunca altere o banco via Dashboard do Supabase em produção. Crie um arquivo SQL em
supabase/migrations/. - Evite
SELECT *em tabelas gigantes. Selecione apenas as colunas necessárias (select("id, name")). - Trate erros de conexão/timeout. O Repositório deve lançar exceções de domínio, não exceções brutas da lib client.
- Rotina de Limpeza: É recomendável rodar o
verificar_integridade.pytoda segunda-feira para garantir que os dados do laboratório estão corretos.
スコア
総合スコア
50/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です