From 283b3965dbc3c928cdc218112bfc1daeeb057487 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?= <git@matousvolf.cz>
Date: Sat, 17 Aug 2024 00:23:05 +0200
Subject: [PATCH] feat: add a project model

---
 .../2024-08-16-221326_create_projects/down.sql  |  2 ++
 .../2024-08-16-221326_create_projects/up.sql    |  6 ++++++
 src/models/mod.rs                               |  1 +
 src/models/project.rs                           | 17 +++++++++++++++++
 src/schema/mod.rs                               |  8 ++++++++
 5 files changed, 34 insertions(+)
 create mode 100644 migrations/2024-08-16-221326_create_projects/down.sql
 create mode 100644 migrations/2024-08-16-221326_create_projects/up.sql
 create mode 100644 src/models/mod.rs
 create mode 100644 src/models/project.rs
 create mode 100644 src/schema/mod.rs

diff --git a/migrations/2024-08-16-221326_create_projects/down.sql b/migrations/2024-08-16-221326_create_projects/down.sql
new file mode 100644
index 0000000..1884a8f
--- /dev/null
+++ b/migrations/2024-08-16-221326_create_projects/down.sql
@@ -0,0 +1,2 @@
+-- This file should undo anything in `up.sql`
+DROP TABLE IF EXISTS "projects";
diff --git a/migrations/2024-08-16-221326_create_projects/up.sql b/migrations/2024-08-16-221326_create_projects/up.sql
new file mode 100644
index 0000000..1bddc94
--- /dev/null
+++ b/migrations/2024-08-16-221326_create_projects/up.sql
@@ -0,0 +1,6 @@
+-- Your SQL goes here
+CREATE TABLE "projects"(
+	"id" SERIAL NOT NULL PRIMARY KEY,
+	"title" TEXT NOT NULL
+);
+
diff --git a/src/models/mod.rs b/src/models/mod.rs
new file mode 100644
index 0000000..dfc721a
--- /dev/null
+++ b/src/models/mod.rs
@@ -0,0 +1 @@
+pub(crate) mod project;
diff --git a/src/models/project.rs b/src/models/project.rs
new file mode 100644
index 0000000..8bed447
--- /dev/null
+++ b/src/models/project.rs
@@ -0,0 +1,17 @@
+use crate::schema::projects;
+use diesel::prelude::*;
+use serde::{Deserialize, Serialize};
+
+#[derive(Queryable, Selectable, Serialize, Deserialize)]
+#[diesel(table_name = crate::schema::projects)]
+#[diesel(check_for_backend(diesel::pg::Pg))]
+pub struct Project {
+    pub(crate) id: i32,
+    pub(crate) title: String,
+}
+
+#[derive(Insertable, Serialize, Deserialize)]
+#[diesel(table_name = projects)]
+pub struct NewProject<'a> {
+    pub title: &'a str,
+}
diff --git a/src/schema/mod.rs b/src/schema/mod.rs
new file mode 100644
index 0000000..6ad8716
--- /dev/null
+++ b/src/schema/mod.rs
@@ -0,0 +1,8 @@
+// @generated automatically by Diesel CLI.
+
+diesel::table! {
+    projects (id) {
+        id -> Int4,
+        title -> Text,
+    }
+}