diff --git a/bruno/project/Delete Project.bru b/bruno/project/Delete Project.bru index 930d813..26df51f 100644 --- a/bruno/project/Delete Project.bru +++ b/bruno/project/Delete Project.bru @@ -1,7 +1,7 @@ meta { name: Delete Project type: http - seq: 4 + seq: 5 } delete { diff --git a/bruno/project/Update Project.bru b/bruno/project/Update Project.bru new file mode 100644 index 0000000..b710625 --- /dev/null +++ b/bruno/project/Update Project.bru @@ -0,0 +1,22 @@ +meta { + name: Update Project + type: http + seq: 4 +} + +put { + url: {{api_base}}/project + body: json + auth: inherit +} + +body:json { + { + "id": "{{project_to_change}}", + "name": "ThisProjectHasBeenChanged!" + } +} + +vars:pre-request { + project_to_change: 77d0394b-6d61-44a9-97a8-35caa101dc0e +} diff --git a/crates/backend/src/controller/class.rs b/crates/backend/src/controller/class.rs index e3e3498..999afac 100644 --- a/crates/backend/src/controller/class.rs +++ b/crates/backend/src/controller/class.rs @@ -1,9 +1,10 @@ -use actix_web::{Responder, delete, get, post}; +use actix_web::{Responder, delete, get, post, put}; pub fn setup(cfg: &mut actix_web::web::ServiceConfig) { cfg.service(get_classes) .service(get_class) .service(create_class) + .service(update_class) .service(delete_class); } @@ -22,6 +23,11 @@ async fn create_class() -> impl Responder { "" } +#[put("")] +async fn update_class() -> impl Responder { + "" +} + #[delete("/{id}")] async fn delete_class() -> impl Responder { "" diff --git a/crates/backend/src/controller/group.rs b/crates/backend/src/controller/group.rs index 648788e..74f46d7 100644 --- a/crates/backend/src/controller/group.rs +++ b/crates/backend/src/controller/group.rs @@ -1,9 +1,10 @@ -use actix_web::{Responder, delete, get, post}; +use actix_web::{Responder, delete, get, post, put}; pub fn setup(cfg: &mut actix_web::web::ServiceConfig) { cfg.service(get_groups) .service(get_groups_for_project) .service(create_group) + .service(update_group) .service(delete_group); } @@ -22,6 +23,11 @@ async fn create_group() -> impl Responder { "" } +#[put("")] +async fn update_group() -> impl Responder { + "" +} + #[delete("/{id}")] async fn delete_group() -> impl Responder { "" diff --git a/crates/backend/src/controller/project.rs b/crates/backend/src/controller/project.rs index c4c8ccf..35e017b 100644 --- a/crates/backend/src/controller/project.rs +++ b/crates/backend/src/controller/project.rs @@ -1,11 +1,13 @@ -use actix_web::{Result, delete, get, post, web}; -use log::debug; +use actix_web::{Result, delete, get, post, put, web}; use sea_orm::prelude::Uuid; use serde::Deserialize; +use crate::dto::project::UpdateProject; + use crate::db::Database; use crate::error::ApiError; +// Maybe move this here into the corresponding DTO file #[derive(Deserialize)] struct CreateProject { name: String, @@ -15,6 +17,7 @@ pub fn setup(cfg: &mut actix_web::web::ServiceConfig) { cfg.service(get_project) .service(get_projects) .service(create_project) + .service(update_project) .service(delete_project); } @@ -49,6 +52,18 @@ async fn create_project( Ok(web::Json(result)) } +#[put("")] +async fn update_project( + db: web::Data, + update_project_struct: web::Json, +) -> Result, ApiError> { + let updated_project = db + .update_project(update_project_struct.into_inner()) + .await?; + + Ok(web::Json(updated_project)) +} + #[delete("/{id}")] async fn delete_project( db: web::Data, diff --git a/crates/backend/src/controller/template.rs b/crates/backend/src/controller/template.rs index fa62dab..3d927f5 100644 --- a/crates/backend/src/controller/template.rs +++ b/crates/backend/src/controller/template.rs @@ -1,9 +1,10 @@ -use actix_web::{Responder, delete, get, post}; +use actix_web::{Responder, delete, get, post, put}; pub fn setup(cfg: &mut actix_web::web::ServiceConfig) { cfg.service(get_templates) .service(get_template) .service(create_template) + .service(update_template) .service(delete_template); } @@ -22,6 +23,11 @@ async fn create_template() -> impl Responder { "" } +#[put("")] +async fn update_template() -> impl Responder { + "" +} + #[delete("/{id}")] async fn delete_template() -> impl Responder { "" diff --git a/crates/backend/src/controller/user.rs b/crates/backend/src/controller/user.rs index 3063bfa..480a0de 100644 --- a/crates/backend/src/controller/user.rs +++ b/crates/backend/src/controller/user.rs @@ -1,4 +1,4 @@ -use actix_web::{Responder, delete, get, post}; +use actix_web::{Responder, delete, get, post, put}; pub fn setup(cfg: &mut actix_web::web::ServiceConfig) { cfg.service(get_users) @@ -22,6 +22,11 @@ async fn create_user() -> impl Responder { "" } +#[put("")] +async fn update_user() -> impl Responder { + "" +} + #[delete("/{id}")] async fn delete_user() -> impl Responder { "" diff --git a/crates/backend/src/db/group.rs b/crates/backend/src/db/group.rs index 0019a00..83983bf 100644 --- a/crates/backend/src/db/group.rs +++ b/crates/backend/src/db/group.rs @@ -1,3 +1,7 @@ -fn add_user_to_group() {} +use super::Database; -fn create_group() {} +impl Database { + async fn add_user_to_group(&self) {} + + async fn create_group(&self) {} +} diff --git a/crates/backend/src/db/project.rs b/crates/backend/src/db/project.rs index 2ddfdf5..aa355f4 100644 --- a/crates/backend/src/db/project.rs +++ b/crates/backend/src/db/project.rs @@ -2,8 +2,10 @@ use super::Database; use crate::error::ApiError; use log::debug; +use crate::dto::project::UpdateProject; + use entity::project; -use sea_orm::ActiveValue::{NotSet, Set}; +use sea_orm::ActiveValue::{NotSet, Set, Unchanged}; use sea_orm::prelude::Uuid; use sea_orm::{ActiveModelTrait, DeleteResult, EntityTrait}; @@ -40,6 +42,19 @@ impl Database { Ok(project) } + pub async fn update_project(&self, project: UpdateProject) -> Result { + debug!("Updating project with id: {}", &project.id); + + let active_model = project::ActiveModel { + id: Unchanged(project.id), + name: Set(project.name), + }; + + let project = active_model.update(&self.conn).await?; + + Ok(project) + } + pub async fn delete_project(&self, id: &Uuid) -> Result { debug!("Deleting project with id: {}", id); diff --git a/crates/backend/src/dto.rs b/crates/backend/src/dto.rs new file mode 100644 index 0000000..36df406 --- /dev/null +++ b/crates/backend/src/dto.rs @@ -0,0 +1 @@ +pub mod project; diff --git a/crates/backend/src/dto/project.rs b/crates/backend/src/dto/project.rs new file mode 100644 index 0000000..e9fedc9 --- /dev/null +++ b/crates/backend/src/dto/project.rs @@ -0,0 +1,8 @@ +use sea_orm::prelude::Uuid; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct UpdateProject { + pub id: Uuid, + pub name: String, +} diff --git a/crates/backend/src/main.rs b/crates/backend/src/main.rs index 2601185..cd67abb 100644 --- a/crates/backend/src/main.rs +++ b/crates/backend/src/main.rs @@ -7,6 +7,7 @@ use log::debug; mod controller; mod db; +mod dto; mod error; #[actix_web::main]