summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-02-22 10:34:25 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-02-25 10:40:16 +0100
commitdf1ab6c67de7591f849b14b8bdd94aadfc8fe961 (patch)
treeebf729871717a6a427ef26d481eed19919eb0cc3 /src/db
parent88abd90bc6d30c67d7fba883322ed89a13ee81cb (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.rs3
-rw-r--r--src/db/models/release_store.rs53
-rw-r--r--src/db/models/releases.rs5
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,