diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-02-22 10:34:25 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-02-25 10:40:16 +0100 |
commit | df1ab6c67de7591f849b14b8bdd94aadfc8fe961 (patch) | |
tree | ebf729871717a6a427ef26d481eed19919eb0cc3 | |
parent | 88abd90bc6d30c67d7fba883322ed89a13ee81cb (diff) |
Add release stores in database
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | migrations/2021-02-22-092534_add-release-stores/down.sql | 1 | ||||
-rw-r--r-- | migrations/2021-02-22-092534_add-release-stores/up.sql | 1 | ||||
-rw-r--r-- | src/db/models/mod.rs | 3 | ||||
-rw-r--r-- | src/db/models/release_store.rs | 53 | ||||
-rw-r--r-- | src/db/models/releases.rs | 5 | ||||
-rw-r--r-- | src/schema.rs | 10 |
6 files changed, 73 insertions, 0 deletions
diff --git a/migrations/2021-02-22-092534_add-release-stores/down.sql b/migrations/2021-02-22-092534_add-release-stores/down.sql new file mode 100644 index 0000000..eb8f949 --- /dev/null +++ b/migrations/2021-02-22-092534_add-release-stores/down.sql @@ -0,0 +1 @@ +-- This file should undo anything in `up.sql`
DROP TABLE release_stores;
ALTER TABLE
releases
DROP COLUMN
release_store_id;
\ No newline at end of file diff --git a/migrations/2021-02-22-092534_add-release-stores/up.sql b/migrations/2021-02-22-092534_add-release-stores/up.sql new file mode 100644 index 0000000..fcdceb8 --- /dev/null +++ b/migrations/2021-02-22-092534_add-release-stores/up.sql @@ -0,0 +1 @@ +-- Your SQL goes here
CREATE TABLE release_stores (
id SERIAL PRIMARY KEY NOT NULL,
store_name VARCHAR(255) NOT NULL UNIQUE
);
ALTER TABLE
releases
ADD COLUMN
release_store_id INTEGER REFERENCES release_stores(id) NOT NULL;
\ No newline at end of file diff --git a/src/db/models/mod.rs b/src/db/models/mod.rs index 93540a2..d127b92 100644 --- a/src/db/models/mod.rs +++ b/src/db/models/mod.rs @@ -35,5 +35,8 @@ pub use package::*; mod releases; pub use releases::*; +mod release_store; +pub use release_store::*; + mod submit; pub use submit::*; diff --git a/src/db/models/release_store.rs b/src/db/models/release_store.rs new file mode 100644 index 0000000..68e54a9 --- /dev/null +++ b/src/db/models/release_store.rs @@ -0,0 +1,53 @@ +// +// Copyright (c) 2020-2021 science+computing ag and other contributors +// +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ +// +// SPDX-License-Identifier: EPL-2.0 +// + +use anyhow::Error; +use anyhow::Result; +use diesel::ExpressionMethods; +use diesel::PgConnection; +use diesel::QueryDsl; +use diesel::RunQueryDsl; + +use crate::schema::release_stores; +use crate::schema; + +#[derive(Debug, Identifiable, Queryable)] +#[table_name = "release_stores"] +pub struct ReleaseStore { + pub id: i32, + pub store_name: String, +} + +#[derive(Insertable)] +#[table_name = "release_stores"] +struct NewReleaseStore<'a> { + pub store_name : &'a str, +} + +impl ReleaseStore { + pub fn create( + database_connection: &PgConnection, + name: &str, + ) -> Result<ReleaseStore> { + let new_relstore = NewReleaseStore { + store_name: name, + }; + + diesel::insert_into(schema::release_stores::table) + .values(&new_relstore) + .execute(database_connection)?; + + schema::release_stores::table + .filter(schema::release_stores::store_name.eq(name)) + .first::<ReleaseStore>(database_connection) + .map_err(Error::from) + } +} + diff --git a/src/db/models/releases.rs b/src/db/models/releases.rs index 0947bd9..9136fee 100644 --- a/src/db/models/releases.rs +++ b/src/db/models/releases.rs @@ -15,15 +15,18 @@ use diesel::prelude::*; use diesel::PgConnection; use crate::db::models::Artifact; +use crate::db::models::ReleaseStore; use crate::schema::releases; use crate::schema::releases::*; #[derive(Debug, Identifiable, Queryable, Associations)] #[belongs_to(Artifact)] +#[belongs_to(ReleaseStore)] pub struct Release { pub id: i32, pub artifact_id: i32, pub release_date: NaiveDateTime, + pub release_store_id: i32, } #[derive(Insertable)] @@ -31,6 +34,7 @@ pub struct Release { struct NewRelease<'a> { pub artifact_id: i32, pub release_date: &'a NaiveDateTime, + pub release_store_id: i32, } impl Release { @@ -38,6 +42,7 @@ impl Release { database_connection: &PgConnection, art: &Artifact, date: &'a NaiveDateTime, + store: &'a ReleaseStore, ) -> Result<Release> { let new_rel = NewRelease { artifact_id: art.id, diff --git a/src/schema.rs b/src/schema.rs index d888dcd..2bcb927 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -82,10 +82,18 @@ table! { } table! { + release_stores (id) { + id -> Int4, + store_name -> Varchar, + } +} + +table! { releases (id) { id -> Int4, artifact_id -> Int4, release_date -> Timestamptz, + release_store_id -> Int4, } } @@ -120,6 +128,7 @@ joinable!(jobs -> images (image_id)); joinable!(jobs -> packages (package_id)); joinable!(jobs -> submits (submit_id)); joinable!(releases -> artifacts (artifact_id)); +joinable!(releases -> release_stores (release_store_id)); joinable!(submit_envs -> envvars (env_id)); joinable!(submit_envs -> submits (submit_id)); joinable!(submits -> githashes (repo_hash_id)); @@ -137,6 +146,7 @@ allow_tables_to_appear_in_same_query!( job_output_artifacts, jobs, packages, + release_stores, releases, submit_envs, submits, |