diff --git a/src/database.rs b/src/database.rs
index 1a90ba1..4d32204 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -2,6 +2,9 @@ pub mod interaction;
pub mod post;
pub mod user;
+pub type SurrealUserReturn = Result, surrealdb::Error>;
+pub type SurrealCountReturn = Result , surrealdb::Error>;
+
use std::{sync::LazyLock, time::Duration};
use surrealdb::{
@@ -11,7 +14,7 @@ use surrealdb::{
};
use tokio::time::sleep;
-use crate::DatabaseConfig;
+use crate::{feature::user::User, DatabaseConfig};
static DB: LazyLock> = LazyLock::new(Surreal::init);
@@ -27,6 +30,7 @@ pub async fn establish_connection() {
.unwrap();
DB.use_ns(database_config.namespace).await.unwrap();
DB.use_db(database_config.database).await.unwrap();
+ DB.query("DEFINE INDEX email ON TABLE user FIELDS email UNIQUE;").await.unwrap();
}
pub async fn is_alive() -> bool {
diff --git a/src/database/interaction.rs b/src/database/interaction.rs
index 27785c6..e52e629 100644
--- a/src/database/interaction.rs
+++ b/src/database/interaction.rs
@@ -2,3 +2,5 @@ async fn create_interaction() {}
async fn read_interaction() {}
async fn update_interaction() {}
async fn delete_interaction() {}
+async fn count_interactions_of_a_user() {}
+async fn count_interactions_of_a_post() {}
\ No newline at end of file
diff --git a/src/database/message.rs b/src/database/message.rs
new file mode 100644
index 0000000..e69de29
diff --git a/src/database/post.rs b/src/database/post.rs
index c017687..9120766 100644
--- a/src/database/post.rs
+++ b/src/database/post.rs
@@ -2,3 +2,4 @@ async fn create_post() {}
async fn read_post() {}
async fn update_post() {}
async fn delete_post() {}
+async fn count_posts_of_a_user() {}
diff --git a/src/database/user.rs b/src/database/user.rs
index 49a8bbd..0b315e6 100644
--- a/src/database/user.rs
+++ b/src/database/user.rs
@@ -1,4 +1,29 @@
-async fn create_user() {}
-async fn read_user() {}
-async fn update_user() {}
-async fn delete_user() {}
+
+use crate::feature::user::User;
+
+use super::{SurrealCountReturn, SurrealUserReturn, DB};
+
+
+pub async fn create_user(user:User) -> SurrealUserReturn {
+ DB.create("user").content(user).await
+}
+
+pub async fn read_user(email: &String) -> SurrealUserReturn{
+ DB.select(("user", email)).await
+}
+
+pub async fn update_user(target_user_email: &String, user: User) -> SurrealUserReturn{
+ DB.update(("user", target_user_email)).content(user).await
+}
+pub async fn delete_user(email: &String) -> SurrealUserReturn {
+ DB.delete(("user", email)).await
+}
+pub async fn count_users() -> SurrealCountReturn{
+ DB.query("SELECT count() FROM user GROUP BY count;").await?.take("count")
+}
+pub async fn count_male_users() -> SurrealCountReturn{
+ DB.query("SELECT count() FROM user WHERE gender = true GROUP BY count;").await?.take("count")
+}
+pub async fn count_female_users() -> SurrealCountReturn{
+ DB.query("SELECT count() FROM user WHERE gender = false GROUP BY count;").await?.take("count")
+}
\ No newline at end of file
diff --git a/src/feature.rs b/src/feature.rs
new file mode 100644
index 0000000..f1bfc73
--- /dev/null
+++ b/src/feature.rs
@@ -0,0 +1,4 @@
+pub mod user;
+pub mod message;
+pub mod post;
+pub mod interaction;
\ No newline at end of file
diff --git a/src/feature/interaction.rs b/src/feature/interaction.rs
new file mode 100644
index 0000000..700da59
--- /dev/null
+++ b/src/feature/interaction.rs
@@ -0,0 +1,16 @@
+enum InteractionType {
+ Like,
+ Dislike,
+ Heart,
+ Confetti,
+ Plus,
+ Minus,
+ Rocket,
+ Smile,
+ Laugh,
+}
+struct Interaction {
+ post_id:String,
+ user_id:String,
+ interaction_type: InteractionType,
+}
\ No newline at end of file
diff --git a/src/feature/message.rs b/src/feature/message.rs
new file mode 100644
index 0000000..3a90109
--- /dev/null
+++ b/src/feature/message.rs
@@ -0,0 +1,15 @@
+pub struct Message {
+ pub sender_email: String,
+ pub receiver_email: String,
+ pub message: String,
+}
+
+impl Message {
+ pub async fn new(sender_email: String, receiver_email: String, message: String) -> Self{
+ Message {
+ sender_email,
+ receiver_email,
+ message,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/feature/post.rs b/src/feature/post.rs
new file mode 100644
index 0000000..e69de29
diff --git a/src/feature/user.rs b/src/feature/user.rs
new file mode 100644
index 0000000..9072467
--- /dev/null
+++ b/src/feature/user.rs
@@ -0,0 +1,37 @@
+use chrono::NaiveDate;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct Contact {
+ pub email: String,
+ pub phone: String,
+ pub website: Option,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum Role {
+ User,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct User {
+ pub name: Vec,
+ pub surname: Vec,
+ pub gender: bool,
+ pub birth_date: NaiveDate,
+ pub email: String,
+ pub role: Role,
+}
+
+impl User {
+ pub async fn new(name: Vec, surname: Vec, gender: bool, birth_date: NaiveDate, email: String) -> Self {
+ Self {
+ name,
+ surname,
+ gender,
+ birth_date,
+ email,
+ role: Role::User,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index 52ea8b6..99fb3d8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,4 @@
+pub mod feature;
pub mod database;
pub mod utils;