summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-11-13 08:53:02 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-11-13 09:48:56 +0100
commitd63ed21ee075a13513cf9156da02deda43cf814f (patch)
treefbaa353af7702bd121e76925072b48fffe7096ed
parent1bc37935e960c3915fb827dc5b555068555794db (diff)
Add model definition for Endpoint
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/db/models/endpoint.rs36
-rw-r--r--src/db/models/mod.rs3
2 files changed, 39 insertions, 0 deletions
diff --git a/src/db/models/endpoint.rs b/src/db/models/endpoint.rs
new file mode 100644
index 0000000..ab30192
--- /dev/null
+++ b/src/db/models/endpoint.rs
@@ -0,0 +1,36 @@
+use anyhow::Error;
+use anyhow::Result;
+use diesel::PgConnection;
+use diesel::prelude::*;
+
+use crate::schema::endpoints::*;
+use crate::schema::endpoints;
+
+#[derive(Queryable)]
+pub struct Endpoint {
+ pub id: i32,
+ pub name: String,
+}
+
+#[derive(Insertable)]
+#[table_name="endpoints"]
+struct NewEndpoint<'a> {
+ pub name: &'a str,
+}
+
+impl Endpoint {
+ pub fn create_or_fetch(database_connection: &PgConnection, ep_name: &str) -> Result<Endpoint> {
+ let new_ep = NewEndpoint { name: ep_name };
+
+ diesel::insert_into(endpoints::table)
+ .values(&new_ep)
+ .on_conflict_do_nothing()
+ .execute(database_connection)?;
+
+ dsl::endpoints
+ .filter(name.eq(ep_name))
+ .first::<Endpoint>(database_connection)
+ .map_err(Error::from)
+ }
+}
+
diff --git a/src/db/models/mod.rs b/src/db/models/mod.rs
index c724c5c..745b71f 100644
--- a/src/db/models/mod.rs
+++ b/src/db/models/mod.rs
@@ -1,6 +1,9 @@
mod artifact;
pub use artifact::*;
+mod endpoint;
+pub use endpoint::*;
+
mod envvar;
pub use envvar::*;