From 8de1efcd7f911a5c443ed774f0bd64f5d579bf3e Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Sun, 27 Jun 2021 16:54:13 +0200 Subject: [PATCH] Added first draft database schema --- .../2021-06-27-131430_initial_schema/down.sql | 4 +++ .../2021-06-27-131430_initial_schema/up.sql | 34 +++++++++++++++++++ src/schema.rs | 33 ++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 migrations/2021-06-27-131430_initial_schema/down.sql create mode 100644 migrations/2021-06-27-131430_initial_schema/up.sql create mode 100644 src/schema.rs 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, +);