Modelo de dados
O schema fica em packages/prisma/schema.prisma: 34 modelos e 3 enums,
com chaves cuid(). Os diagramas abaixo foram gerados a partir do schema e
mostram só os campos principais de cada entidade.
| Enum | Valores |
|---|---|
Side |
AMBOS, DIREITO, ESQUERDO |
OrderStatus |
PENDING, PAID, CONFIRMED, PROCESSING, READY, DELIVERED, CANCELLED |
ItemType |
PRODUCT, PIECE, COVERAGE |
erDiagram
Cart ||--o{ CartItem : ""
Cart ||--o{ OrderItem : ""
Coupon ||--o{ Cart : ""
Draft ||--o{ CartItem : ""
Draft ||--o{ DraftItem : ""
Order ||--o{ OrderItem : ""
Tax ||--o{ Draft : ""
User ||--o{ Order : ""
Cart }o--o{ Tax : "taxas aplicadas"
User ||..o{ Draft : "userId (sem FK)"
User ||..o{ Cart : "userId (sem FK)"
User {
String id PK
String name
String email
String role
String cpfOrCnpj
String city
String state
String career
}
Draft {
String id PK
String code UK
String userId
String customerName
String_list creationImages
String taxId
Decimal totalAmount
Json vectorState
}
DraftItem {
String id PK
ItemType itemType
Decimal price
Side side
String coverageId
String pieceId
String productId
}
Cart {
String id PK
String userId
String couponId
Decimal totalAmount
String deliveryMethodName
Decimal deliveryMethodValue
}
CartItem {
String id PK
String name
Int quantity
Decimal unitPrice
Decimal totalPrice
String draftId
}
Order {
String id PK
String code UK
OrderStatus status
String_list plantigraphyPdf
String infoLabelPdf
String orderInfoPdf
Decimal totalAmount
Decimal discountAmount
Decimal taxAmount
String deliveryCode
String deliveryLink
String pixCode
}
OrderItem {
String id PK
Int quantity
String name
String customerName
Decimal assemblyTax
Decimal totalPrice
String observations
String productDescription
String_list piecesDescription
}
Coupon {
String id PK
String code UK
String name
Decimal discount
Boolean isActive
DateTime createdAt
DateTime updatedAt
}
Tax {
String id PK
String code UK
String name
Decimal value
Boolean isActive
DateTime createdAt
DateTime updatedAt
}- Um rascunho (
Draft) tem váriosDraftItem, cada um de umItemTypee umSide. O estado do canvas fica emvectorState(JSON) e as imagens exportadas emcreationImages. - A sacola (
Cart) agrupa rascunhos viaCartItem, recebe cupom e taxas (montagem e envio) e, ao virar pedido, originaOrderItems. - O pedido (
Order) guarda os links dos PDFs de produção e os dados de envio, e denormaliza a descrição de produto, cobertura e peças emOrderItempara que mudanças no catálogo não alterem pedidos antigos.
erDiagram
Coverage ||--o{ CoverageCharacteristic : ""
CoverageName ||--o{ Coverage : ""
CoverageType ||--o{ Coverage : ""
Piece ||--o{ PieceMaterial : ""
Piece ||--o{ PieceSize : ""
PieceName ||--o{ Piece : ""
Product ||--o{ ProductCharacteristic : ""
Product ||--o{ ProductSize : ""
ProductName ||--o{ Product : ""
ProductType ||--o{ Product : ""
ProductName {
String id PK
}
ProductType {
String id PK
}
Product {
String id PK
String code UK
Boolean isActive
}
ProductCharacteristic {
String id PK
Decimal price
}
ProductSize {
String id PK
}
PieceName {
String id PK
}
Piece {
String id PK
String code UK
Boolean isActive
}
PieceMaterial {
String id PK
Decimal price
}
PieceSize {
String id PK
}
PieceSide {
String id PK
}
CoverageName {
String id PK
}
CoverageType {
String id PK
}
Coverage {
String id PK
String code UK
Boolean isActive
}
CoverageCharacteristic {
String id PK
Decimal price
}
CoverageReinforcement {
String id PK
Decimal price
}
CoverageLogoConfiguration {
String id PK
Decimal price
}
CoverageLogo {
String id PK
}Cada família do catálogo (produto, peça, cobertura) segue o mesmo padrão:
uma entidade nome (*Name), uma entidade principal com miniaturas e
informações, e entidades de variação com preço (característica, tamanho,
material, lado, reforço, configuração de logo).
erDiagram
User ||--o{ Account : ""
User ||--o{ Session : ""
User {
String id PK
String email
String role
Boolean banned
}
Session {
String id PK
String userId
String token UK
DateTime expiresAt
}
Account {
String id PK
String providerId
String userId
}
Verification {
String id PK
String identifier
DateTime expiresAt
}
Jwks {
String id PK
String publicKey
}
PasswordResetToken {
String id PK
String token UK
String userId
DateTime expiresAt
Boolean used
}Tabelas mantidas pelo Better Auth (user, sessions, account,
verification, jwks), mais o PasswordResetToken da primeira implementação de recuperação de senha,
hoje sem uso no código (só aparece em @moldape/types).
Observações de modelagem
Seção intitulada “Observações de modelagem”| Observação | Impacto |
|---|---|
Draft.userId e Cart.userId não têm chave estrangeira para User. |
Excluir um usuário não remove nem bloqueia rascunhos e sacolas; a integridade depende da aplicação. |
Order.pixCode existe, mas o pagamento real é pela InfinitePay. |
Campo legado (ver ADR-0005). |
PasswordResetToken não é mais usado; a recuperação de senha é feita pelo Better Auth (verification). |
Tabela candidata a remoção por migration. |
Exclusão lógica por isActive na maioria das entidades. |
Consultas precisam filtrar isActive = true. |

Desenvolvido e documentado porNós Tecnologia · Desenvolvimento Criativo

