diff --git a/sql/project/get_with_id.sql b/sql/project/get_with_id.sql new file mode 100644 index 0000000..4081e3e --- /dev/null +++ b/sql/project/get_with_id.sql @@ -0,0 +1,19 @@ +SELECT + id, + title, + description, + realtor_id, + media as "media: _", + project_condition as "project_condition: _", + project_type as "project_type: _", + project_state as "project_state: _", + country, + city, + district, + admin_tag, + floors, + finish_date, + order_index, + time_created, + last_updated +FROM project WHERE id = $1; diff --git a/sql/project/insert.sql b/sql/project/insert.sql new file mode 100644 index 0000000..882fa5f --- /dev/null +++ b/sql/project/insert.sql @@ -0,0 +1,38 @@ +INSERT INTO project ( + id, + title, + description, + realtor_id, + media, + project_condition, + project_type, + project_state, + country, + city, + district, + admin_tag, + floors, + finish_date, + order_index, + time_created, + last_updated +) VALUES ( + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $16 +) RETURNING + id, + title, + description, + realtor_id, + media as "media: _", + project_condition as "project_condition: _", + project_type as "project_type: _", + project_state as "project_state: _", + country, + city, + district, + admin_tag, + floors, + finish_date, + order_index, + time_created, + last_updated; \ No newline at end of file diff --git a/sql/project/update.sql b/sql/project/update.sql new file mode 100644 index 0000000..0471a3a --- /dev/null +++ b/sql/project/update.sql @@ -0,0 +1,35 @@ +UPDATE project SET + title = $2, + description = $3, + realtor_id = $4, + media = $5, + project_condition = $6, + project_type = $7, + project_state = $8, + country = $9, + city = $10, + district = $11, + admin_tag = $12, + floors = $13, + finish_date = $14, + order_index = $15, + last_updated = $16 +WHERE id = $1 +RETURNING + id, + title, + description, + realtor_id, + media as "media: _", + project_condition as "project_condition: _", + project_type as "project_type: _", + project_state as "project_state: _", + country, + city, + district, + admin_tag, + floors, + finish_date, + order_index, + time_created, + last_updated; \ No newline at end of file diff --git a/src/dao/project.rs b/src/dao/project.rs index 8b13789..fc34d22 100644 --- a/src/dao/project.rs +++ b/src/dao/project.rs @@ -1 +1,62 @@ +use realtor_lp_types::domain::project::Project; +use sqlx::PgPool; +use uuid::Uuid; +pub async fn insert_project(conn: &PgPool, project: Project) -> Result { + sqlx::query_file_as!( + Project, + "sql/project/insert.sql", + project.id, + project.title, + project.description, + project.realtor_id, + project.media as _, + project.project_condition as _, + project.project_type as _, + project.project_state as _, + project.country, + project.city, + project.district, + project.admin_tag, + project.floors, + project.finish_date, + project.order_index, + project.time_created + ) + .fetch_one(conn) + .await +} + +pub async fn get_project_with_id( + conn: &PgPool, + project_id: &Uuid, +) -> Result, sqlx::Error> { + sqlx::query_file_as!(Project, "sql/project/get_with_id.sql", project_id) + .fetch_optional(conn) + .await +} + +pub async fn update_project(conn: &PgPool, project: Project) -> Result { + sqlx::query_file_as!( + Project, + "sql/project/update.sql", + project.id, + project.title, + project.description, + project.realtor_id, + project.media as _, + project.project_condition as _, + project.project_type as _, + project.project_state as _, + project.country, + project.city, + project.district, + project.admin_tag, + project.floors, + project.finish_date, + project.order_index, + project.last_updated + ) + .fetch_one(conn) + .await +}