From df1ab6c67de7591f849b14b8bdd94aadfc8fe961 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 22 Feb 2021 10:34:25 +0100 Subject: Add release stores in database Signed-off-by: Matthias Beyer --- src/db/models/mod.rs | 3 +++ src/db/models/release_store.rs | 53 ++++++++++++++++++++++++++++++++++++++++++ src/db/models/releases.rs | 5 ++++ 3 files changed, 61 insertions(+) create mode 100644 src/db/models/release_store.rs (limited to 'src/db') 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 { + 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::(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 { let new_rel = NewRelease { artifact_id: art.id, -- cgit v1.2.3