Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions agent_api_rest/src/library/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ pub mod error;
pub mod templates;

use agent_library::state::LibraryState;
use axum::{routing::get, Router};
use axum::{
routing::{get, post},
Router,
};

use crate::{
library::templates::{get_template, get_templates, patch_template, post_templates},
library::templates::{get_template, get_templates, patch_template, post_templates, require_pin_code},
API_VERSION,
};

Expand All @@ -15,7 +18,8 @@ pub fn router(library_state: LibraryState) -> Router {
API_VERSION,
Router::new()
.route("/templates", get(get_templates).post(post_templates))
.route("/templates/{template_id}", get(get_template).patch(patch_template)),
.route("/templates/{template_id}", get(get_template).patch(patch_template))
.route("/templates/require-pin-code", post(require_pin_code)),
)
.with_state(library_state)
}
27 changes: 27 additions & 0 deletions agent_api_rest/src/library/templates/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub struct PostTemplatesEndpointRequest {
pub holder_type: Option<HolderType>,
pub tags: Vec<String>,
pub status: Status,
pub require_pin_code: Option<bool>,
pub visibility: Visibility,
pub description: Option<String>,
pub r#type: Vec<String>,
Expand All @@ -40,6 +41,7 @@ pub(crate) async fn post_templates(
holder_type,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand All @@ -57,6 +59,7 @@ pub(crate) async fn post_templates(
holder_type,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand Down Expand Up @@ -205,6 +208,30 @@ pub(crate) async fn patch_template(
Ok(StatusCode::NO_CONTENT.into_response())
}

#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RequirePinCodeRequest {
pub template_id: String,
pub require_pin_code: bool,
}

#[axum_macros::debug_handler]
pub(crate) async fn require_pin_code(
State(state): State<LibraryState>,
Json(RequirePinCodeRequest {
template_id,
require_pin_code,
}): Json<RequirePinCodeRequest>,
) -> Result<Response, ApiError> {
let command = TemplateCommand::RequirePinCode {
template_id: template_id.clone(),
require_pin_code,
};
command_handler(&template_id, &state.command.template, command).await?;

Ok(StatusCode::NO_CONTENT.into_response())
}

#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetTemplatesEndpointRequest {
Expand Down
38 changes: 38 additions & 0 deletions agent_library/src/template/aggregate.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::pin::Pin;

use async_trait::async_trait;
use cqrs_es::Aggregate;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -70,6 +72,7 @@ pub struct Template {
pub modified_at: Option<String>,
pub tags: Vec<String>,
pub status: Status,
pub require_pin_code: Option<bool>,
pub visibility: Visibility,
pub description: Option<String>,
pub r#type: Vec<String>,
Expand Down Expand Up @@ -107,6 +110,7 @@ impl Aggregate for Template {
holder_type,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand All @@ -127,6 +131,7 @@ impl Aggregate for Template {
modified_at,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand Down Expand Up @@ -277,6 +282,21 @@ impl Aggregate for Template {
modified_at,
}])
}
RequirePinCode {
template_id,
require_pin_code,
} => {
#[cfg(not(test))]
let modified_at = chrono::Utc::now().to_rfc3339();
#[cfg(test)]
let modified_at = test_utils::modified_at();

Ok(vec![PinCodeRequired {
template_id,
require_pin_code,
modified_at,
}])
}
}
}

Expand All @@ -296,6 +316,7 @@ impl Aggregate for Template {
modified_at,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand All @@ -310,6 +331,7 @@ impl Aggregate for Template {
self.modified_at.replace(modified_at);
self.tags = tags;
self.status = status;
self.require_pin_code = require_pin_code;
self.visibility = visibility;
self.description = description;
self.r#type = r#type;
Expand Down Expand Up @@ -403,6 +425,14 @@ impl Aggregate for Template {
self.schema = Some(schema);
self.modified_at.replace(modified_at);
}
PinCodeRequired {
template_id: _,
require_pin_code,
modified_at,
} => {
self.require_pin_code = Some(require_pin_code);
self.modified_at.replace(modified_at);
}
}
}
}
Expand All @@ -429,6 +459,7 @@ pub mod document_tests {
modified_at: String,
tags: Vec<String>,
status: Status,
require_pin_code: Option<bool>,
visibility: Visibility,
description: Option<String>,
r#type: Vec<String>,
Expand All @@ -445,6 +476,7 @@ pub mod document_tests {
holder_type: holder_type.clone(),
tags: tags.clone(),
status: status.clone(),
require_pin_code: require_pin_code.clone(),
visibility: visibility.clone(),
description: description.clone(),
r#type: r#type.clone(),
Expand All @@ -460,6 +492,7 @@ pub mod document_tests {
modified_at,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand Down Expand Up @@ -521,6 +554,11 @@ pub mod test_utils {
Status::Draft
}

#[fixture]
pub fn require_pin_code() -> Option<bool> {
Some(true)
}

#[fixture]
pub fn visibility() -> Visibility {
Visibility::Private
Expand Down
5 changes: 5 additions & 0 deletions agent_library/src/template/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pub enum TemplateCommand {
holder_type: Option<HolderType>,
tags: Vec<String>,
status: Status,
require_pin_code: Option<bool>,
visibility: Visibility,
description: Option<String>,
r#type: Vec<String>,
Expand Down Expand Up @@ -62,4 +63,8 @@ pub enum TemplateCommand {
template_id: String,
schema: serde_json::Value,
},
RequirePinCode {
template_id: String,
require_pin_code: bool,
},
}
6 changes: 6 additions & 0 deletions agent_library/src/template/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub enum TemplateEvent {
modified_at: String,
tags: Vec<String>,
status: Status,
require_pin_code: Option<bool>,
visibility: Visibility,
description: Option<String>,
r#type: Vec<String>,
Expand Down Expand Up @@ -76,6 +77,11 @@ pub enum TemplateEvent {
schema: serde_json::Value,
modified_at: String,
},
PinCodeRequired {
template_id: String,
require_pin_code: bool,
modified_at: String,
},
}

impl DomainEvent for TemplateEvent {
Expand Down
10 changes: 10 additions & 0 deletions agent_library/src/template/views/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ impl View<Template> for Template {
modified_at,
tags,
status,
require_pin_code,
visibility,
description,
r#type,
Expand All @@ -35,6 +36,7 @@ impl View<Template> for Template {
self.modified_at.replace(modified_at.clone());
self.tags.clone_from(tags);
self.status.clone_from(status);
self.require_pin_code.clone_from(require_pin_code);
self.visibility.clone_from(visibility);
self.description.clone_from(description);
self.r#type.clone_from(r#type);
Expand Down Expand Up @@ -128,6 +130,14 @@ impl View<Template> for Template {
self.schema.replace(schema.clone());
self.modified_at.replace(modified_at.clone());
}
PinCodeRequired {
template_id: _,
require_pin_code,
modified_at,
} => {
self.require_pin_code.replace(require_pin_code.clone());
self.modified_at.replace(modified_at.clone());
}
}
}
}
Loading