From dde40101bb4d919553916ef720d3843f6e9f3317 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 2 Sep 2026 19:01:56 +0900 Subject: [PATCH] =?UTF-8?q?fix(B07):=20=ED=91=9C=EC=A0=9C=EB=9E=80=20?= =?UTF-8?q?=EB=A1=9C=EA=B3=A0=C2=B7=EC=84=9C=EB=AA=85=20=EC=9B=90=EC=B2=9C?= =?UTF-8?q?=EC=9D=84=20=EA=B3=84=EC=A0=95=C2=B7=ED=9A=8C=EC=82=AC=20?= =?UTF-8?q?=EC=9E=90=EC=82=B0=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EA=B4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 서명: `projects.signature_asset_id` 대신 설계자(`designer_user_id`, 없으면 소유자) 계정의 `company_assets` SIGNATURE 자산을 따라감 (여러 벌이면 최신 1건) - 로고: 프로젝트가 고른 것 우선, 없으면 `companies.logo_asset_id` (014) 로 폴백 - `projects.signature_asset_id` 는 컬럼만 남기고 더 읽지 않음 — B01 이 항상 null 저장 Co-Authored-By: Claude Opus 5 (1M context) --- B07_DesignDetail/B07_DesignDetail_Router.py | 23 ++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/B07_DesignDetail/B07_DesignDetail_Router.py b/B07_DesignDetail/B07_DesignDetail_Router.py index 49cc9d7e..0be4acc2 100644 --- a/B07_DesignDetail/B07_DesignDetail_Router.py +++ b/B07_DesignDetail/B07_DesignDetail_Router.py @@ -120,9 +120,13 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]: 사람 배정(과업책임자·분야별책임자·설계자)은 `projects`의 FK를 따라간다. 설계자는 배정이 없으면 프로젝트 소유자로 떨어진다 — 혼자 쓰는 계정에서도 칸이 차게. - 로고·서명은 프로젝트가 회사 공유 자산(`company_assets`, 013)에서 고른 것만 싣는다 — - 안 골랐거나 자산이 지워졌으면 그림째 빠진다. 011 의 `companies.logo_path` · - `users.signature_path` 는 더 읽지 않는다. + 로고·서명은 회사 공유 자산(`company_assets`, 013)에서 오되 **원천이 다르다** + (2026-09-02 사용자 확정, B01 인계). 서명은 프로젝트가 아니라 **사람 계정**에 붙으므로 + 설계자(`designer_user_id`, 없으면 소유자) 계정의 `SIGNATURE` 자산을 따라간다. 로고는 + 프로젝트가 고른 것이 우선이고, 안 골랐으면 **회사 등록 단계에서 받은 회사 로고** + (`companies.logo_asset_id`, 014)로 떨어진다. 둘 다 없거나 자산이 지워졌으면 그림째 + 빠진다. `projects.signature_asset_id` 는 컬럼만 남기고 더 읽지 않는다(B01 이 항상 + `null` 로 저장). 011 의 `companies.logo_path` · `users.signature_path` 도 안 읽는다. 아직 못 채우는 자리와 이유: - 사업량·연도기번은 사람이 넣는 값이다(B01 프로젝트 수정 화면). 비어 있으면 빈칸. @@ -145,9 +149,18 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]: LEFT JOIN users pm ON pm.id = p.pm_user_id LEFT JOIN users lead ON lead.id = p.field_lead_user_id LEFT JOIN company_assets logo - ON logo.id = p.logo_asset_id AND logo.deleted_at IS NULL + ON logo.id = COALESCE(p.logo_asset_id, c.logo_asset_id) + AND logo.deleted_at IS NULL LEFT JOIN company_assets sig - ON sig.id = p.signature_asset_id AND sig.deleted_at IS NULL + ON sig.id = ( + SELECT s.id + FROM company_assets s + WHERE s.user_id = COALESCE(p.designer_user_id, p.user_id) + AND s.kind = 'SIGNATURE' + AND s.deleted_at IS NULL + ORDER BY s.id DESC + LIMIT 1 + ) WHERE p.id = %s AND p.deleted_at IS NULL """, (str(project_id),),