diff --git a/migrations/2021-06-27-131430_initial_schema/down.sql b/migrations/2021-06-27-131430_initial_schema/down.sql new file mode 100644 index 0000000..3035882 --- /dev/null +++ b/migrations/2021-06-27-131430_initial_schema/down.sql @@ -0,0 +1,4 @@ +-- This file should undo anything in `up.sql` +DROP TABLE packages; +DROP TABLE maintainers; +DROP TYPE package_type; \ No newline at end of file diff --git a/migrations/2021-06-27-131430_initial_schema/up.sql b/migrations/2021-06-27-131430_initial_schema/up.sql new file mode 100644 index 0000000..60b03f4 --- /dev/null +++ b/migrations/2021-06-27-131430_initial_schema/up.sql @@ -0,0 +1,34 @@ +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) +); \ No newline at end of file diff --git a/src/schema.rs b/src/schema.rs new file mode 100644 index 0000000..60c0838 --- /dev/null +++ b/src/schema.rs @@ -0,0 +1,33 @@ +table! { + maintainers (id) { + id -> Uuid, + name -> Text, + email -> Text, + } +} + +table! { + packages (id) { + id -> Uuid, + name -> Text, + #[sql_name = "type"] + type_ -> Package_type, + version -> Text, + source -> Nullable, + section -> Nullable, + priority -> Nullable, + architecture -> Text, + essential -> Nullable, + installed_size -> Nullable, + maintainer_id -> Uuid, + description -> Text, + homepage -> Nullable, + } +} + +joinable!(packages -> maintainers (maintainer_id)); + +allow_tables_to_appear_in_same_query!( + maintainers, + packages, +);