refactor(admin): remove geoserver config

This commit is contained in:
2026-06-12 15:28:14 +08:00
parent a6e7a2e75c
commit d99f4cec6a
14 changed files with 14 additions and 420 deletions
+1 -110
View File
@@ -26,8 +26,6 @@ from app.domain.schemas.admin_metadata import (
ProjectDatabaseResponse,
ProjectDatabaseUpsertRequest,
ProjectDbRole,
ProjectGeoServerConfigResponse,
ProjectGeoServerConfigUpsertRequest,
ProjectMemberCreateRequest,
ProjectMemberResponse,
ProjectMemberUpdateRequest,
@@ -69,23 +67,6 @@ def _project_database_response(
)
def _geoserver_config_response(
record: models.ProjectGeoServerConfig,
) -> ProjectGeoServerConfigResponse:
return ProjectGeoServerConfigResponse(
id=record.id,
project_id=record.project_id,
gs_base_url=record.gs_base_url,
gs_admin_user=record.gs_admin_user,
gs_datastore_name=record.gs_datastore_name,
default_extent=record.default_extent,
srid=record.srid,
configured=True,
has_password=bool(record.gs_admin_password_encrypted),
updated_at=record.updated_at,
)
def _database_audit_payload(payload: ProjectDatabaseUpsertRequest) -> dict:
return {
"db_role": payload.db_role,
@@ -96,19 +77,6 @@ def _database_audit_payload(payload: ProjectDatabaseUpsertRequest) -> dict:
}
def _geoserver_audit_payload(
payload: ProjectGeoServerConfigUpsertRequest,
) -> dict:
return {
"gs_base_url": payload.gs_base_url,
"gs_admin_user": payload.gs_admin_user,
"gs_datastore_name": payload.gs_datastore_name,
"default_extent": payload.default_extent,
"srid": payload.srid,
"password_updated": "gs_admin_password" in payload.model_fields_set,
}
def _to_async_sqlalchemy_url(dsn: str) -> str:
parsed = make_url(dsn)
if parsed.drivername in {"postgresql", "postgres"}:
@@ -123,7 +91,7 @@ def _db_type_for_role(db_role: str) -> str:
def _status_for_config_value_error(exc: ValueError) -> int:
if "ENCRYPTION_KEY" in str(exc):
if "DATABASE_ENCRYPTION_KEY" in str(exc):
return status.HTTP_503_SERVICE_UNAVAILABLE
return status.HTTP_400_BAD_REQUEST
@@ -535,83 +503,6 @@ async def check_project_database_health(
)
@router.get(
"/projects/{project_id}/geoserver",
response_model=ProjectGeoServerConfigResponse,
)
async def get_project_geoserver_config(
project_id: UUID = Path(...),
current_user=Depends(get_current_metadata_admin),
metadata_repo: MetadataRepository = Depends(get_metadata_repository),
) -> ProjectGeoServerConfigResponse:
project = await metadata_repo.get_project_by_id(project_id)
if project is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Project not found")
record = await metadata_repo.get_geoserver_config_record(project_id)
if record is None:
return ProjectGeoServerConfigResponse(
id=None,
project_id=project_id,
gs_base_url=None,
gs_admin_user=None,
gs_datastore_name="ds_postgis",
default_extent=None,
srid=4326,
configured=False,
has_password=False,
updated_at=None,
)
return _geoserver_config_response(record)
@router.put(
"/projects/{project_id}/geoserver",
response_model=ProjectGeoServerConfigResponse,
)
async def upsert_project_geoserver_config(
payload: ProjectGeoServerConfigUpsertRequest,
project_id: UUID = Path(...),
current_user=Depends(get_current_metadata_admin),
metadata_repo: MetadataRepository = Depends(get_metadata_repository),
) -> ProjectGeoServerConfigResponse:
project = await metadata_repo.get_project_by_id(project_id)
if project is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Project not found")
try:
record = await metadata_repo.upsert_geoserver_config(
project_id,
gs_base_url=payload.gs_base_url,
gs_admin_user=payload.gs_admin_user,
gs_admin_password=payload.gs_admin_password,
password_update_requested="gs_admin_password" in payload.model_fields_set,
gs_datastore_name=payload.gs_datastore_name,
default_extent=payload.default_extent,
srid=payload.srid,
)
except ValueError as exc:
raise HTTPException(
status_code=_status_for_config_value_error(exc),
detail=str(exc),
) from exc
except SQLAlchemyError as exc:
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail=f"Metadata database error: {exc}",
) from exc
await log_audit_event(
action=AuditAction.CONFIG_CHANGE,
user_id=current_user.id,
project_id=project_id,
resource_type="project_geoserver",
resource_id=str(project_id),
request_data=_geoserver_audit_payload(payload),
response_status=status.HTTP_200_OK,
session=metadata_repo.session,
)
return _geoserver_config_response(record)
@router.get("/users/{user_id}", response_model=MetadataUserResponse)
async def get_metadata_user(
user_id: UUID = Path(...),