CREATE TABLE customers
(
    id                 uuid                                   NOT NULL,
    email              character varying                      NOT NULL,
    first_name         character varying,
    last_name          character varying,
    billing_address_id uuid,
    password_hash      character varying,
    phone              character varying,
    has_account        boolean                  DEFAULT false NOT NULL,
    created_at         timestamp with time zone DEFAULT now() NOT NULL,
    updated_at         timestamp with time zone DEFAULT now() NOT NULL,
    deleted_at         timestamp with time zone,
    metadata           jsonb
);

CREATE TABLE customer_groups
(
    id         uuid                                   NOT NULL,
    name       character varying                      NOT NULL,
    created_at timestamp with time zone DEFAULT now() NOT NULL,
    updated_at timestamp with time zone DEFAULT now() NOT NULL,
    deleted_at timestamp with time zone,
    metadata   jsonb
);

CREATE TABLE customer_group_customers
(
    customer_group_id uuid NOT NULL,
    customer_id       uuid NOT NULL
);

------------------------------------------
------------------------------------------
------------------------------------------

CREATE TYPE user_roles AS ENUM (
    'admin',
    'member',
    'developer'
    );

CREATE TABLE users
(
    id            uuid                                   NOT NULL,
    email         character varying                      NOT NULL,
    first_name    character varying,
    last_name     character varying,
    password_hash character varying,
    api_token     character varying,
    created_at    timestamp with time zone DEFAULT now() NOT NULL,
    updated_at    timestamp with time zone DEFAULT now() NOT NULL,
    deleted_at    timestamp with time zone,
    metadata      jsonb,
    role          user_roles               DEFAULT 'member'::user_roles
);

CREATE TABLE addresses
(
    id           uuid                                   NOT NULL,
    customer_id  uuid,
    company      character varying,
    first_name   character varying,
    last_name    character varying,
    address_1    character varying,
    address_2    character varying,
    city         character varying,
    country_code character varying,
    province     character varying,
    postal_code  character varying,
    phone        character varying,
    created_at   timestamp with time zone DEFAULT now() NOT NULL,
    updated_at   timestamp with time zone DEFAULT now() NOT NULL,
    deleted_at   timestamp with time zone,
    metadata     jsonb
);
