CREATE TABLE IF NOT EXISTS Users(
    ID SERIAL PRIMARY KEY,
    username VARCHAR(32) UNIQUE,
    password CHAR(60), -- hashed with salt using bcrypt
    groups INT[] -- IDs of groups user is a member of
);

CREATE TABLE IF NOT EXISTS Groups (
    ID SERIAL PRIMARY KEY,
    name VARCHAR(64) UNIQUE,
    admin_id INT,
    password VARCHAR(64) -- password is required to join a group. Set by admin
);

CREATE TABLE IF NOT EXISTS Abstract_products (
    ID SERIAL PRIMARY KEY,
    group_id INT, -- Abstract products are tied to a group of users they were created by
    local_id INT,
    barcode CHAR(13), -- EAN13
    name VARCHAR(128),
    net_weight REAL,
    image_filename CHAR(32), -- generated by taking md5 hash of an image
    category INT, -- link to a category id
    unit INT -- link to a unit id, not stored in database due to locale nature, using predefined order instead: kg = 0, g, l, ml, pc.
);

CREATE TABLE IF NOT EXISTS Categories (
    ID SERIAL PRIMARY KEY,
    group_id INT,
    local_id INT,
    name VARCHAR(64)
);

CREATE TABLE IF NOT EXISTS Products (
    ID SERIAL PRIMARY KEY,
    group_id INT,
    local_id INT,
    abstract_product_id INT,
    amount INT,
    date_of_production DATE,
    expiry_date DATE
);