Changed ElementCreateRequest
to optionally include a ContentUpdateStrategy
. Closes #13
This commit is contained in:
parent
6a5fce3070
commit
91142f7bfb
4 changed files with 14 additions and 7 deletions
|
@ -1,7 +1,7 @@
|
|||
use reqwest::Method;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::types::{Element, ElementContent, ElementId, PotId};
|
||||
use crate::types::{ContentUpdateStrategy, Element, ElementContent, ElementId, PotId};
|
||||
|
||||
use super::UbisyncRequest;
|
||||
|
||||
|
@ -9,6 +9,7 @@ use super::UbisyncRequest;
|
|||
pub struct ElementCreateRequest {
|
||||
pub content: ElementContent,
|
||||
pub pot: Option<PotId>,
|
||||
pub update_strategy: Option<ContentUpdateStrategy>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
|
|
|
@ -17,7 +17,6 @@ use ubisync_lib::{
|
|||
types::{AppId, ElementId},
|
||||
};
|
||||
|
||||
|
||||
pub(super) async fn get(
|
||||
Path(id): Path<ElementId>,
|
||||
app: Extension<AppId>,
|
||||
|
@ -51,7 +50,7 @@ pub(super) async fn create(
|
|||
Ok(_) => {
|
||||
warn!("Pot not found");
|
||||
return StatusCode::INTERNAL_SERVER_ERROR.into_response();
|
||||
},
|
||||
}
|
||||
Err(e) => {
|
||||
warn!("Element create request did not provide pot id, and no default pot for requesting app was found: {}", e);
|
||||
return StatusCode::INTERNAL_SERVER_ERROR.into_response();
|
||||
|
@ -59,7 +58,11 @@ pub(super) async fn create(
|
|||
},
|
||||
};
|
||||
|
||||
let element_id = s.create_element(req.content, pot_id);
|
||||
let element_id = s.create_element(
|
||||
req.content,
|
||||
pot_id,
|
||||
req.update_strategy.unwrap_or(Default::default()),
|
||||
);
|
||||
debug!("{:?}", element_id);
|
||||
match element_id {
|
||||
Ok(id) => (
|
||||
|
|
|
@ -57,10 +57,10 @@ impl ApiState {
|
|||
.map(|app_opt| app_opt.ok_or(Error::msg("Failed to find app")))?
|
||||
}
|
||||
|
||||
pub fn create_element(&self, content: ElementContent, pot: PotId) -> anyhow::Result<ElementId> {
|
||||
pub fn create_element(&self, content: ElementContent, pot: PotId, update_strategy: ContentUpdateStrategy) -> anyhow::Result<ElementId> {
|
||||
let id = ElementId::new();
|
||||
self.db()
|
||||
.add_element(id.clone(), content.clone(), ContentUpdateStrategy::Overwrite, None, false, pot.clone())?;
|
||||
.add_element(id.clone(), content.clone(), update_strategy, None, false, pot.clone())?;
|
||||
debug!("Added element {{{}}}", id.to_string());
|
||||
|
||||
self.state.send_to_peers(
|
||||
|
@ -192,7 +192,7 @@ impl ApiState {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use tracing::Level;
|
||||
use ubisync_lib::types::ElementContent;
|
||||
use ubisync_lib::types::{ContentUpdateStrategy, ElementContent};
|
||||
|
||||
use crate::state::State;
|
||||
|
||||
|
@ -224,6 +224,7 @@ mod tests {
|
|||
.create_element(
|
||||
ElementContent::Text("Test-text".to_string()),
|
||||
pot_id.clone(),
|
||||
ContentUpdateStrategy::Overwrite,
|
||||
)
|
||||
.unwrap();
|
||||
let el = state.get_element(id, app_id).unwrap();
|
||||
|
@ -259,6 +260,7 @@ mod tests {
|
|||
.create_element(
|
||||
ElementContent::Text("Test-text".to_string()),
|
||||
pot_id.clone(),
|
||||
ContentUpdateStrategy::Overwrite,
|
||||
)
|
||||
.unwrap();
|
||||
state
|
||||
|
|
|
@ -57,6 +57,7 @@ async fn two_nodes_element_creation() {
|
|||
ElementCreateRequest {
|
||||
content: test_element_content.clone(),
|
||||
pot: None,
|
||||
update_strategy: None,
|
||||
},
|
||||
(),
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue