Pular para o conteúdo

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ários DraftItem, cada um de um ItemType e um Side. O estado do canvas fica em vectorState (JSON) e as imagens exportadas em creationImages.
  • A sacola (Cart) agrupa rascunhos via CartItem, recebe cupom e taxas (montagem e envio) e, ao virar pedido, origina OrderItems.
  • 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 em OrderItem para que mudanças no catálogo não alterem pedidos antigos.
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 por
Nós Tecnologia · Desenvolvimento Criativo