Add OpenAPI import backend

This commit is contained in:
github-ops
2026-06-23 21:03:03 +00:00
parent 87cdb95b80
commit a8aa3248c9
34 changed files with 2569 additions and 27 deletions
@@ -0,0 +1,107 @@
use super::*;
impl PostgresRegistry {
pub async fn create_import_job(
&self,
request: CreateImportJobRequest<'_>,
) -> Result<(), RegistryError> {
sqlx::query(
"insert into import_jobs (
id,
workspace_id,
kind,
source_format,
source_version,
status,
preview_payload,
created_operation_ids,
error_text,
created_at,
expires_at,
finished_at
) values (
$1, $2, $3, $4, $5, $6, $7, '[]'::jsonb, null, $8::timestamptz, $9::timestamptz, null
)",
)
.bind(request.id.as_str())
.bind(request.workspace_id.as_str())
.bind(serialize_enum_text(&request.kind, "kind")?)
.bind(request.source_format)
.bind(request.source_version)
.bind(serialize_enum_text(&request.status, "status")?)
.bind(request.preview_payload)
.bind(request.created_at)
.bind(request.expires_at)
.execute(&self.pool)
.await?;
Ok(())
}
pub async fn get_import_job(
&self,
workspace_id: &WorkspaceId,
job_id: &ImportJobId,
) -> Result<Option<ImportJob>, RegistryError> {
let row = sqlx::query(
"select
id,
workspace_id,
kind,
source_format,
source_version,
status,
preview_payload,
created_operation_ids,
error_text,
created_at,
expires_at,
finished_at
from import_jobs
where id = $1 and workspace_id = $2",
)
.bind(job_id.as_str())
.bind(workspace_id.as_str())
.fetch_optional(&self.pool)
.await?;
row.as_ref().map(map_import_job).transpose()
}
pub async fn finish_import_job(
&self,
request: FinishImportJobRequest<'_>,
) -> Result<(), RegistryError> {
let result = sqlx::query(
"update import_jobs
set status = $2,
created_operation_ids = $3,
error_text = $4,
finished_at = $5::timestamptz
where id = $1",
)
.bind(request.id.as_str())
.bind(serialize_enum_text(&request.status, "status")?)
.bind(request.created_operation_ids)
.bind(request.error_text)
.bind(request.finished_at)
.execute(&self.pool)
.await?;
if result.rows_affected() == 0 {
return Err(RegistryError::ImportJobNotFound {
job_id: request.id.as_str().to_owned(),
});
}
Ok(())
}
pub async fn delete_expired_import_jobs(&self) -> Result<u64, RegistryError> {
let result = sqlx::query("delete from import_jobs where expires_at < now()")
.execute(&self.pool)
.await?;
Ok(result.rows_affected())
}
}