CREATE TABLE maintainers (
    id uuid DEFAULT gen_random_uuid() PRIMARY KEY,

    name text NOT NULL,
    email text NOT NULL,

    UNIQUE (name, email)
);

CREATE TYPE package_type AS ENUM ('deb',  'dsc', 'udeb');

-- Table containing information about a package
CREATE TABLE packages (
    id uuid DEFAULT gen_random_uuid() PRIMARY KEY,

    name text NOT NULL,
    type package_type NOT NULL,
    version text NOT NULL,
    -- This is just text, as there's no guarantee the source is present on this
    -- repository.
    source text,
    section text,
    priority text,
    -- NOTE: could this be better than just text?
    architecture text NOT NULL,
    essential boolean DEFAULT false,
    installed_size integer,
    maintainer_id uuid REFERENCES maintainers (id) NOT NULL,
    description text NOT NULL,
    homepage text,

    -- NOTE: I don't think this is enough because architecture can be a wildcard
    UNIQUE (name, version, architecture)
);