allow inserting multiple entries (in transaction) in /api/obj

feat/vaults
Tomáš Mládek 2022-02-12 14:55:54 +01:00
parent 038e4fd7d2
commit ebf48c0e5f
No known key found for this signature in database
GPG Key ID: 65E225C8B3E2ED8A
1 changed files with 17 additions and 5 deletions

View File

@ -249,6 +249,7 @@ pub async fn get_object(
#[serde(untagged)]
pub enum InEntry {
Entry(Entry),
EntryList(Vec<Entry>),
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}")]