Skip to content

Commit 1648b9d

Browse files
committed
Create diagram.py
1 parent 25e775c commit 1648b9d

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

diagram.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Install Erdantic if you haven't already
2+
# pip install erdantic
3+
4+
from erdantic import Diagram
5+
from pydantic import BaseModel
6+
from typing import Optional, List
7+
8+
# -----------------------------
9+
# Define Pydantic models
10+
# -----------------------------
11+
12+
class UserProfile(BaseModel):
13+
id: str
14+
email: str
15+
nome_completo: str
16+
perfil: str
17+
telefone: Optional[str] = None
18+
criado_em: Optional[str] = None
19+
atualizado_em: Optional[str] = None
20+
21+
class CandidateProfile(BaseModel):
22+
id: str
23+
id_utilizador: str # FK → UserProfile.id
24+
curriculo_url: Optional[str] = None
25+
competencias: Optional[str] = None
26+
anos_experiencia: Optional[str] = None
27+
formacao: Optional[str] = None
28+
salario_minimo_desejado: Optional[str] = None
29+
salario_maximo_desejado: Optional[str] = None
30+
localizacoes_preferidas: Optional[str] = None
31+
linkedin_url: Optional[str] = None
32+
github_url: Optional[str] = None
33+
portfolio_url: Optional[str] = None
34+
35+
class CompanyProfile(BaseModel):
36+
id: str
37+
id_utilizador: str # FK → UserProfile.id
38+
nome_empresa: str
39+
descricao_empresa: Optional[str] = None
40+
sector_atividade: Optional[str] = None
41+
dimensao_empresa: Optional[str] = None
42+
numero_contribuinte: Optional[str] = None
43+
morada_faturacao: Optional[str] = None
44+
cidade_faturacao: Optional[str] = None
45+
pais_faturacao: Optional[str] = None
46+
stripe_customer_id: Optional[str] = None
47+
48+
class Job(BaseModel):
49+
id: str
50+
id_empresa: str # FK → CompanyProfile.id
51+
titulo: str
52+
descricao: Optional[str] = None
53+
salario_minimo: Optional[str] = None
54+
salario_maximo: Optional[str] = None
55+
localizacao: Optional[str] = None
56+
tipo_contrato: Optional[str] = None
57+
estado: Optional[str] = None
58+
experiencia_requerida: Optional[str] = None
59+
categoria: Optional[str] = None
60+
61+
class JobApplication(BaseModel):
62+
id: str
63+
id_oferta: str # FK → Job.id
64+
id_candidato: str # FK → CandidateProfile.id
65+
carta_apresentacao_url: Optional[str] = None
66+
curriculo_url: Optional[str] = None
67+
estado: Optional[str] = None
68+
69+
class PaymentHistory(BaseModel):
70+
id: str
71+
id_empresa: str # FK → CompanyProfile.id
72+
stripe_payment_intent_id: Optional[str] = None
73+
valor: Optional[str] = None
74+
moeda: Optional[str] = None
75+
estado: Optional[str] = None
76+
metodo_pagamento: Optional[str] = None
77+
iva_percentual: Optional[str] = None
78+
valor_com_iva: Optional[str] = None
79+
80+
# -----------------------------
81+
# Generate ERD diagram
82+
# -----------------------------
83+
diagram = Diagram(
84+
[UserProfile, CandidateProfile, CompanyProfile, Job, JobApplication, PaymentHistory],
85+
show_relationships=True # Shows FK connections
86+
)
87+
88+
# Save output in your repo (docs folder)
89+
diagram.to_png("./docs/ERD_PortalEmprego.png")
90+
print("ERD saved to ./docs/ERD_PortalEmprego.png")

0 commit comments

Comments
 (0)