diff --git a/services/api-server/src/api_server/html5.py b/services/api-server/src/api_server/html5.py index 3fe1ed1..941dfdc 100644 --- a/services/api-server/src/api_server/html5.py +++ b/services/api-server/src/api_server/html5.py @@ -10,9 +10,6 @@ from sir import NodeKind, SirSnapshot def render_html5_index(projects: Iterable[object]) -> str: project_list = list(projects) - project_rows = "\n".join(_project_row(project) for project in project_list) - if not project_rows: - project_rows = 'Проекты пока не настроены' return _page( "SFERA HTML5", f""" @@ -33,12 +30,13 @@ def render_html5_index(projects: Iterable[object]) -> str:

Проекты

API docs + {render_html5_project_create_form()}
- {project_rows} + {render_html5_project_rows(project_list)}
ПроектСтатусSnapshot
@@ -47,6 +45,31 @@ def render_html5_index(projects: Iterable[object]) -> str: ) +def render_html5_project_create_form() -> str: + return """ +
+ + + +
+ """ + + +def render_html5_project_rows(projects: Iterable[object]) -> str: + project_rows = "\n".join(_project_row(project) for project in projects) + if not project_rows: + return 'Проекты пока не настроены' + return project_rows + + def render_html5_editor( *, project_id: str, diff --git a/services/api-server/src/api_server/main.py b/services/api-server/src/api_server/main.py index 3c82d87..e8e2033 100644 --- a/services/api-server/src/api_server/main.py +++ b/services/api-server/src/api_server/main.py @@ -39,6 +39,7 @@ from api_server.html5 import ( render_html5_editor, render_html5_index, render_html5_project_setup, + render_html5_project_rows, render_html5_setup_summary, render_html5_source, render_html5_status, @@ -1584,6 +1585,19 @@ async def html5_index() -> Response: ) +@app.post("/html5/projects") +async def html5_create_project(request: Request) -> Response: + form = await _html5_form_data(request) + project_id = _form_value(form, "project_id") + if not project_id: + raise HTTPException(status_code=400, detail="project_id is required.") + await create_project(ProjectCreateRequest(project_id=project_id, name=_form_value(form, "name"))) + return Response( + render_html5_project_rows(_project_summaries()), + media_type="text/html; charset=utf-8", + ) + + @app.get("/html5/projects/{project_id}/editor") async def html5_project_editor(project_id: str, q: str = "") -> Response: try: diff --git a/services/api-server/tests/test_api.py b/services/api-server/tests/test_api.py index 05cf519..a109423 100644 --- a/services/api-server/tests/test_api.py +++ b/services/api-server/tests/test_api.py @@ -142,6 +142,29 @@ def test_html5_server_rendered_project_editor(tmp_path: Path): assert "