From 0c78438cb167496573be0e2de2c0fcf4d1d30218 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 27 Oct 2026 20:15:06 +0900 Subject: [PATCH] =?UTF-8?q?feat(562-2):=20D03=20=EB=85=B8=EC=84=A0=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B8=20GET=20=C2=B7=20PUT=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=EC=97=90=20year=5Fstart(=EC=82=AC=EC=97=85=EC=97=B0=EB=8F=84?= =?UTF-8?q?=20=EC=8B=9C=EC=9E=91)=20=E2=80=94=20=EC=A1=B0=EA=B0=81=20?= =?UTF-8?q?=EC=97=B0=EB=8F=84=20=EA=B3=A0=EB=A6=84=20=EC=B2=98=EC=9D=8C=20?= =?UTF-8?q?=EA=B0=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- D03_PlanAnalysis/D03_PlanAnalysis_Network.py | 14 +++++++++++--- resources/tester/test_530_2_plan_analyze.py | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/D03_PlanAnalysis/D03_PlanAnalysis_Network.py b/D03_PlanAnalysis/D03_PlanAnalysis_Network.py index c7faafe1f..cce67c4a2 100644 --- a/D03_PlanAnalysis/D03_PlanAnalysis_Network.py +++ b/D03_PlanAnalysis/D03_PlanAnalysis_Network.py @@ -269,10 +269,13 @@ async def _load(connection: Any, project_id: UUID) -> tuple[dict[str, Any] | Non return legacy, legacy is not None -def _view(network: dict[str, Any] | None, legacy: bool, base: dict[str, Any]) -> dict[str, Any]: +def _view( + network: dict[str, Any] | None, legacy: bool, base: dict[str, Any], year_start: int | None +) -> dict[str, Any]: return { "status": "success", "base": base, + "year_start": year_start, "network": network, "derived": derive(network) if network else None, "legacy": legacy, @@ -284,8 +287,13 @@ async def get_plan_network(project_id: UUID) -> dict[str, Any]: base = await plan_base.load_base(project_id) async with get_db_pool().acquire() as connection: network, legacy = await _load(connection, project_id) + async with connection.cursor(aiomysql.DictCursor) as cursor: + await cursor.execute( + "SELECT project_year FROM projects WHERE id = %s", (str(project_id),) + ) + row = await cursor.fetchone() try: - return _view(network, legacy, base) + return _view(network, legacy, base, row["project_year"] if row else None) except NetworkError as error: raise HTTPException(status_code=409, detail=f"저장된 노선이 틀립니다 — {error}") from error @@ -425,4 +433,4 @@ async def put_plan_network( except Exception: await connection.rollback() raise - return {**_view(network, False, base), "derived": derived} + return {**_view(network, False, base, project["project_year"]), "derived": derived} diff --git a/resources/tester/test_530_2_plan_analyze.py b/resources/tester/test_530_2_plan_analyze.py index f5ef73635..d42ac5832 100644 --- a/resources/tester/test_530_2_plan_analyze.py +++ b/resources/tester/test_530_2_plan_analyze.py @@ -214,12 +214,13 @@ def test_get_saved_legacy_or_empty(client) -> None: client.db.answers["FROM plan_networks"] = [{"network_json": json.dumps(_network())}] got = client.get(URL).json() assert got["legacy"] is False and len(got["derived"]["pieces"]) == 3 - assert got["base"]["end"] == {"x": 90.0, "y": 180.0} + assert got["base"]["end"] == {"x": 90.0, "y": 180.0} and got["year_start"] == 2026 def test_put_stores_network_pieces_years(client) -> None: got = client.put(URL, json=_network()) assert got.status_code == 200 and got.json()["derived"]["pieces"][1]["from_m"] == 75.0 + assert got.json()["year_start"] == 2026 log = client.db.log assert log[-1][0] == "COMMIT" pieces = [a for s, a in log if s.startswith("INSERT INTO plan_route_pieces")]