summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-01-15 23:16:18 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-01-15 23:16:18 +0100
commit4cf5a22ad1b0f5bf8f4e2c06c689ad40230e4387 (patch)
treeb5b5ee7f0da306c86cf255a3bb61a7c55ccb43de /src/db
parent4ef85ea2d5584d673b5abc6723b6a8b3db8a48d3 (diff)
parent8c94e002e0ec2ea46d37e8ddf9a678fffe645d62 (diff)
Merge branch 'released-artifacts'
Diffstat (limited to 'src/db')
-rw-r--r--src/db/models/artifact.rs10
-rw-r--r--src/db/models/mod.rs3
-rw-r--r--src/db/models/releases.rs44
3 files changed, 53 insertions, 4 deletions
diff --git a/src/db/models/artifact.rs b/src/db/models/artifact.rs
index 01de301..01ac4c7 100644
--- a/src/db/models/artifact.rs
+++ b/src/db/models/artifact.rs
@@ -15,6 +15,7 @@ use anyhow::anyhow;
use anyhow::Error;
use anyhow::Context;
use anyhow::Result;
+use chrono::NaiveDateTime;
use diesel::PgConnection;
use diesel::prelude::*;
@@ -27,7 +28,6 @@ use crate::schema::artifacts;
pub struct Artifact {
pub id: i32,
pub path: String,
- pub released: bool,
pub job_id: i32,
}
@@ -35,7 +35,6 @@ pub struct Artifact {
#[table_name="artifacts"]
struct NewArtifact<'a> {
pub path: &'a str,
- pub released: bool,
pub job_id: i32,
}
@@ -44,13 +43,16 @@ impl Artifact {
PathBuf::from(&self.path)
}
- pub fn create(database_connection: &PgConnection, art_path: &ArtifactPath, art_released: bool, job: &Job) -> Result<Artifact> {
+ pub fn released(self, database_connection: &PgConnection, release_date: &NaiveDateTime) -> Result<crate::db::models::Release> {
+ crate::db::models::Release::create(database_connection, &self, release_date)
+ }
+
+ pub fn create(database_connection: &PgConnection, art_path: &ArtifactPath, job: &Job) -> Result<Artifact> {
let path_str = art_path.to_str()
.ok_or_else(|| anyhow!("Path is not valid UTF-8: {}", art_path.display()))
.context("Writing artifact to database")?;
let new_art = NewArtifact {
path: path_str,
- released: art_released,
job_id: job.id,
};
diff --git a/src/db/models/mod.rs b/src/db/models/mod.rs
index cd7aa72..77ebc51 100644
--- a/src/db/models/mod.rs
+++ b/src/db/models/mod.rs
@@ -32,6 +32,9 @@ pub use githash::*;
mod package;
pub use package::*;
+mod releases;
+pub use releases::*;
+
mod submit;
pub use submit::*;
diff --git a/src/db/models/releases.rs b/src/db/models/releases.rs
new file mode 100644
index 0000000..1975d2c
--- /dev/null
+++ b/src/db/models/releases.rs
@@ -0,0 +1,44 @@
+use anyhow::Error;
+use anyhow::Result;
+use chrono::NaiveDateTime;
+use diesel::PgConnection;
+use diesel::prelude::*;
+
+use crate::db::models::Artifact;
+use crate::schema::releases::*;
+use crate::schema::releases;
+
+#[derive(Debug, Identifiable, Queryable, Associations)]
+#[belongs_to(Artifact)]
+pub struct Release {
+ pub id: i32,
+ pub artifact_id: i32,
+ pub release_date: NaiveDateTime,
+}
+
+#[derive(Insertable)]
+#[table_name="releases"]
+struct NewRelease<'a> {
+ pub artifact_id: i32,
+ pub release_date: &'a NaiveDateTime,
+}
+
+impl Release {
+ pub fn create<'a>(database_connection: &PgConnection, art: &Artifact, date: &'a NaiveDateTime) -> Result<Release> {
+ let new_rel = NewRelease {
+ artifact_id: art.id,
+ release_date: date,
+ };
+
+ diesel::insert_into(releases::table)
+ .values(&new_rel)
+ .execute(database_connection)?;
+
+ dsl::releases
+ .filter(artifact_id.eq(art.id).and(release_date.eq(date)))
+ .first::<Release>(database_connection)
+ .map_err(Error::from)
+ }
+}
+
+