diff options
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/models/artifact.rs | 10 | ||||
-rw-r--r-- | src/db/models/mod.rs | 3 | ||||
-rw-r--r-- | src/db/models/releases.rs | 44 |
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) + } +} + + |