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 /src/db | |
parent | 88abd90bc6d30c67d7fba883322ed89a13ee81cb (diff) |
Add release stores in database
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/db')
-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 |
3 files changed, 61 insertions, 0 deletions
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, |