-- Criação do namespace (schema)
CREATE USER xpto_store IDENTIFIED BY xpto_store_password;
GRANT CONNECT, RESOURCE TO xpto_store;
ALTER USER xpto_store QUOTA UNLIMITED ON DATA;

-- Tabela de Categorias
CREATE TABLE xpto_store.xpto_categorias (
    id_categoria     NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nome             VARCHAR2(100),
    descricao        VARCHAR2(400),
    vetor_nome_descricao VECTOR(384)
);

-- Tabela de Produtos
CREATE TABLE xpto_store.xpto_produtos (
    id_produto       NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nome             VARCHAR2(100),
    descricao        VARCHAR2(400),
    preco            NUMBER(10,2),
    estoque          NUMBER,
    id_categoria     NUMBER,
    vetor_descricao  VECTOR(384),
    CONSTRAINT fk_categoria
      FOREIGN KEY (id_categoria)
      REFERENCES xpto_store.xpto_categorias(id_categoria)
);

-- Tabela de Clientes
CREATE TABLE xpto_store.xpto_clientes (
    id_cliente       NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nome             VARCHAR2(100),
    email            VARCHAR2(100),
    telefone         VARCHAR2(20),
    uf               CHAR(2),
    vetor_nome_email VECTOR(384)
);

-- Tabela de Vendas
CREATE TABLE xpto_store.xpto_vendas (
    id_venda         NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_produto       NUMBER,
    id_cliente       NUMBER,
    data_venda       DATE DEFAULT SYSDATE,
    quantidade       NUMBER,
    preco_unitario   NUMBER(10,2),
    CONSTRAINT fk_produto
      FOREIGN KEY (id_produto)
      REFERENCES xpto_store.xpto_produtos(id_produto),
    CONSTRAINT fk_cliente
      FOREIGN KEY (id_cliente)
      REFERENCES xpto_store.xpto_clientes(id_cliente)
);
