本卡屬 FR-192(母卡 FR-192 母案(同清單上一張)),卡 I-1,批 2。只改 jedi-python-package。依賴:無。
主系統的回饋功能整組在 jedi-issue 套件裡。本卡讓它認得「這筆是 Agent 來的」:回饋表加「來源」「來源編號」兩欄;建回饋與改回饋多收一個「既有附件參照清單」參數(附件已經存在 Agent、主系統只有一列參照,不能再走上傳);改刪的歸屬檢查加一條例外(Agent 本機管理員送的,由持「檢視全部回饋」的人代管);多一支查詢「某台 Agent 送出的全部回饋」給主系統回拉用;清單與明細吐來源兩欄、可篩選。版號 1.5.0 → 1.6.0。
extend:FeedbackService.add_feedback/update_feedback 加 attached_file_uids/source/source_ref(有參照時走 IssueUploadFilesRepoImpl.add_issue_file_mapping 不走 upload_attachment);_assert_owner 加一條例外;entity/DTO/serializer 各加兩欄;query entity 加 source 篩選;新 list_by_source
repo:~/Projects/Jedicogy/module/jedi-python-package
改既有:jedi-issue/jedi_issue/app/feedback/service/feedback_service.py 175(_assert_owner)、243(add)、294(update)
改既有:jedi-issue/jedi_issue/app/feedback/service/feedback_issue_service.py(create_issue 傳參照)
改既有:jedi-issue/jedi_issue/app/feedback/dto/feedback_issue_dto.py
改既有:jedi-issue/jedi_issue/domain/feedback/entities/feedback_issue_entity.py
改既有:jedi-issue/jedi_issue/domain/feedback/entities/feedback_issue_query_entity.py
改既有:jedi-issue/jedi_issue/domain/feedback/service/feedback_issue_domain_service.py
改既有:jedi-issue/jedi_issue/infra/feedback/models/feedback_issue.py
改既有:jedi-issue/jedi_issue/infra/feedback/repository/(list_by_source)
改既有:jedi-issue/jedi_issue/api/serializers/feedback.py(source/source_ref 進 FeedbackResponse;FeedbackQueryRequest 加 source)
改既有:jedi-issue/jedi_issue/api/routes/feedback_route.py(post/put 不動簽名,只傳 source 預設 web)
改既有:jedi-issue/pyproject.toml
新開:jedi-issue/jedi_issue/migrations/006-feedback-issues-source.sql
jedi_issue/migrations/006-feedback-issues-source.sql:ALTER TABLE public.feedback_issues ADD COLUMN IF NOT EXISTS source VARCHAR(20) NOT NULL DEFAULT 'web', ADD COLUMN IF NOT EXISTS source_ref VARCHAR(50);索引 (source, source_ref);COMMENT;照 003~005 的寫法。source、source_ref;query entity 的 source 進篩選(它是搜尋條件,放 filters 內即可)。feedback_service.add_feedback(..., attached_file_uids=None, source="web", source_ref=None):有 attached_file_uids 時 create_issue 傳 files=None,建完逐 uid IssueUploadFilesRepoImpl().add_issue_file_mapping(issue_uid, file_uid);外部整合(GitLab/GitHub)附件傳 None。update_feedback 同樣加 attached_file_uids。FeedbackIssueEntity 建時帶兩欄。_assert_owner(feedback_issue, user_login_name, *, has_capability=None, read_all_capability=None):既有判斷前加——source == "agent" and created_user == "local-admin" and has_capability and has_capability(read_all_capability) → 放行。route 層 put/delete 把 has_capability/rt.config.feedback_read_all_capability 傳進來(FeedbacksRoute.post 已有同樣傳法)。feedback_issue_domain_service.list_by_source(source, source_ref) → repo 新查詢,回該來源編號的全部 FeedbackIssueEntity(含 issue 關聯)。api/serializers/feedback.py:FeedbackResponse 加 source、source_ref;FeedbackQueryRequest 加 source。route 的 post/put 簽名不動(web 來的 source 走預設)。pyproject.toml 1.6.0;README 更新回饋段(提一句來源欄)。不發版。套件 tests 綠;新 tests:add_feedback(attached_file_uids=[x]) 不呼叫 upload 直接掛 mapping;source 預設 web;_assert_owner 對 source=agent, created_user=local-admin 持 read_all 者放行、不持者 403(突變:把例外拿掉要紅);list_by_source('agent', uid) 只回該 Agent 的;DEV 套 006 後 \d public.feedback_issues 有 source/source_ref 與索引;既有回饋 source 全為 web
~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-192-2611-agent-console-feedback/design.md §3 決策定案、§5 詳細設計(本卡那節)、§6 拆卡表本卡那列、§8 風險;討論稿 discussion.md §4 只在想知道「為什麼這樣裁」時看~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-192-2611-agent-console-feedback/prototype/index.html(純畫面,只取結構與資訊順序;文案依 i18n 重寫)