mirror of
https://github.com/trailbaseio/trailbase.git
synced 2026-02-21 01:39:29 -06:00
Add limit to bulk record creations.
This commit is contained in:
@@ -35,26 +35,30 @@ fn extract_record(value: serde_json::Value) -> Result<JsonRow, RecordError> {
|
||||
|
||||
#[inline]
|
||||
fn extract_records(value: serde_json::Value) -> Result<Vec<JsonRow>, RecordError> {
|
||||
return Ok(match value {
|
||||
serde_json::Value::Object(record) => vec![record],
|
||||
return match value {
|
||||
serde_json::Value::Object(record) => Ok(vec![record]),
|
||||
serde_json::Value::Array(records) => {
|
||||
let mut record_rows = Vec::<JsonRow>::with_capacity(records.len());
|
||||
for record in records {
|
||||
let serde_json::Value::Object(record) = record else {
|
||||
return Err(RecordError::BadRequest(
|
||||
"Expected record or array of records",
|
||||
));
|
||||
};
|
||||
record_rows.push(record);
|
||||
if records.len() > 1024 {
|
||||
return Err(RecordError::BadRequest("Bulk creation exceeds limit: 1024"));
|
||||
}
|
||||
record_rows
|
||||
|
||||
records
|
||||
.into_iter()
|
||||
.map(|record| {
|
||||
let serde_json::Value::Object(record) = record else {
|
||||
return Err(RecordError::BadRequest(
|
||||
"Expected record or array of records",
|
||||
));
|
||||
};
|
||||
|
||||
Ok(record)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
_ => {
|
||||
return Err(RecordError::BadRequest(
|
||||
"Expected record or array of records",
|
||||
));
|
||||
}
|
||||
});
|
||||
_ => Err(RecordError::BadRequest(
|
||||
"Expected record or array of records",
|
||||
)),
|
||||
};
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
||||
@@ -243,20 +243,18 @@ impl Params {
|
||||
metadata: &TableMetadata,
|
||||
multipart_files: Vec<FileUploadInput>,
|
||||
) -> Result<(), ParamsError> {
|
||||
let mut files: Vec<(String, FileUpload, Vec<u8>)> = vec![];
|
||||
for file in multipart_files {
|
||||
let (col_name, metadata, content) = file.consume()?;
|
||||
match col_name {
|
||||
None => {
|
||||
return Err(ParamsError::Column(
|
||||
let files: Vec<(String, FileUpload, Vec<u8>)> = multipart_files
|
||||
.into_iter()
|
||||
.map(|file| {
|
||||
let (col_name, metadata, content) = file.consume()?;
|
||||
return match col_name {
|
||||
Some(col_name) => Ok((col_name, metadata, content)),
|
||||
None => Err(ParamsError::Column(
|
||||
"Multipart form upload missing name property",
|
||||
));
|
||||
}
|
||||
Some(col_name) => {
|
||||
files.push((col_name, metadata, content));
|
||||
}
|
||||
}
|
||||
}
|
||||
)),
|
||||
};
|
||||
})
|
||||
.collect::<Result<_, ParamsError>>()?;
|
||||
|
||||
// Validate and organize by type;
|
||||
let mut uploaded_files = HashSet::<&'static str>::new();
|
||||
|
||||
Reference in New Issue
Block a user