diff --git a/src/routes.rs b/src/routes.rs index e10e0b9..9c0d4bd 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -249,6 +249,7 @@ pub async fn get_object( #[serde(untagged)] pub enum InEntry { Entry(Entry), + EntryList(Vec), Invariant(InvariantEntry), Address { entity: InAddress }, } @@ -298,8 +299,19 @@ pub async fn put_object( .insert_entry(entry.clone()) .map_err(ErrorInternalServerError)?, ), - entry.entity, + Some(entry.entity), )), + InEntry::EntryList(entries) => { + connection + .transaction::<_, anyhow::Error, _>(|| { + for entry in entries { + connection.insert_entry(entry)?; + } + Ok(()) + }) + .map_err(ErrorInternalServerError)?; + Ok((None, None)) + } InEntry::Invariant(in_entry) => { let invariant = Entry::try_from(&InvariantEntry { attribute: in_entry.attribute, @@ -313,7 +325,7 @@ pub async fn put_object( .insert_entry(invariant.clone()) .map_err(ErrorInternalServerError)?, ), - invariant.entity, + Some(invariant.entity), )) } InEntry::Address { entity: in_address } => { @@ -370,7 +382,7 @@ pub async fn put_object( }) .map_err(ErrorInternalServerError)?; - Ok((None, address)) + Ok((None, Some(address))) } } } @@ -421,7 +433,7 @@ pub async fn put_object( let _ = upend_insert_val!(&connection, address, "LBL", filename); } - Ok((None, address)) + Ok((None, Some(address))) } else { Err(anyhow!("Multipart contains no fields.")) } @@ -429,7 +441,7 @@ pub async fn put_object( } .map_err(ErrorInternalServerError)?; - Ok(HttpResponse::Ok().json([entry_address, Some(entity_address)])) + Ok(HttpResponse::Ok().json([entry_address, entity_address])) } #[put("/api/obj/{address}/{attribute}")]