Communitygithub.com

Zoha/agent-skills

NestJS GraphQL (code-first)應用程式的架構結構與檔案放置指南。用於決定檔案歸屬、設計或審查功能優先的目錄佈局、建立新功能模組,以及理解模組如何連接以解析 GraphQL 欄位和關聯。

agent-skills 是什麼?

此技能提供了 NestJS GraphQL(code-first)應用程式的完整結構與檔案放置指南。它詳細說明了每個檔案應放置的資料夾、每個檔案應負擔的職責,以及模組之間如何連接以解析 GraphQL 欄位與關聯。技能涵蓋了基礎結構地圖、每個檔案的規則(包括模組、服務、解析器(查詢、變異、訂閱、欄位)、輸入與引數、分頁、實體(Mongoose 綱要最佳實踐)、僅限儲存庫的模型注入、模型/映射器、儲存庫、Mongoose 區分器、衍生欄位、提供器、載入器、事件、背景工作、驗證、例外、自訂標量、配置、通用建構區塊、基礎設施設定,以及命名/測試/lint 慣例。它也處理模組解析問題,例如循環依賴。此技能專注於「結構」與「模組組合」,與專注於行為規則(DI 深度、安全、效能、錯誤處理)的 `nestjs-best-practices` 技能互補。當你需要決定新檔案歸屬、設計功能優先佈局、建立新功能模組、或排查模組連接問題時,請參考此指南。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Zoha/agent-skills/tree/HEAD/skills/nestjs-graphql-structure

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

NestJS GraphQL 結構

NestJS GraphQL(code-first)應用程式中每個檔案的位置與運作方式。此技能是一份放置與結構指南:它回答了「這個檔案應該放在哪個資料夾?」、「這個檔案負責什麼?」以及「模組如何連接以解析欄位和關聯?」。它涵蓋了基礎結構地圖以及每個檔案的規則,包括模組、服務、解析器(查詢、變異、訂閱和欄位)、輸入和引數、分頁、實體(共用類型的 Mongoose 綱要最佳實踐)、僅限儲存庫的模型注入、模型/映射器、儲存庫、Mongoose 區分器、衍生欄位、提供器、載入器、事件、背景工作、驗證、例外、自訂標量、配置、通用建構區塊、基礎設施設定,以及命名/測試/lint 慣例。

此技能特意與 nestjs-best-practices 技能分開。該技能涵蓋框架行為(依賴注入深度、安全性、效能、錯誤處理、微服務、DevOps);此技能涵蓋結構和模組組合。當兩者重疊時(功能模組、循環依賴),此技能會從放置的角度進行探討,並交叉參照另一技能以獲得行為深度。

此技能涵蓋結構規則(檔案存放位置)和模組解析規則(模組在執行時期如何連接——例如循環依賴解決)。模組解析規則位於第 2 和第 3 節。

應用時機

在以下情況參考這些指南:

  • 決定新檔案應歸屬 NestJS GraphQL 程式碼庫何處時
  • 設計或審查功能優先的目錄佈局時
  • 建立新功能模組及其檔案時
  • 決定如何建模多型文件(Mongoose 區分器)並自動發布其 GraphQL 型別時
  • 決定何處可以注入 Mongoose 模型——並將資料庫存取控制在儲存庫之後時
  • 決定某個值應存入資料庫還是在讀取時衍生時
  • 找出模組如何解析位於另一個模組中的欄位或關聯時
  • 解決模組之間的連接問題時(循環依賴、缺少匯出)

按優先順序排列的規則類別

優先級類別影響前綴
1應用程式結構關鍵struct-
2模組與啟動關鍵module-
3關聯與跨模組關鍵relations-
4服務高service-
5GraphQL 解析器高resolver-
6GraphQL 型別與輸入高type-
7資料存取中高data-
8配置、通用與基礎設施中infra-
9慣例與測試中conventions-

快速參考

1. 應用程式結構(關鍵)

  • struct-auth-feature - 將驗證保留在專屬功能模組中
  • struct-canonical-layout - 標準應用程式結構
  • struct-feature-decomposition - 功能成長時將其拆分為子模組
  • struct-file-placement-table - 檔案放置表
  • struct-module-kinds - 區分領域功能與應用層級模組
  • struct-schema-artifact - 定位並制定產生的綱要成品政策

2. 模組與啟動(關鍵)

  • module-bootstrap - 保持 main.ts 與 app.module.ts 精簡
  • module-export-policy - 僅匯出功能的公開 API(其服務)
  • module-feature-module - 功能模組檔案

3. 關聯與跨模組(關鍵)

  • relations-avoid-circular - 解決循環模組依賴
  • relations-dataloader - 使用每個請求的 DataLoader 批量處理關聯
  • relations-events - 使用事件解耦模組
  • relations-field-resolvers - 使用 @ResolveField 解析關聯
  • relations-owning-module - 將關聯欄位放在擁有其資料的模組中

4. 服務(高)

  • service-background-jobs - 將佇列處理器與排程任務保留在功能中
  • service-external-providers - 將第三方客戶端保留在 providers/ 中
  • service-interfaces-tokens - 在 interfaces/ 中宣告服務合約與注入令牌
  • service-single-responsibility - 每個模組可有多個專注的服務
  • service-small-focused-methods - 保持服務方法小而專注

5. GraphQL 解析器(高)

  • resolver-computed-fields - 在型別上宣告欄位;在解析器中解析計算出的欄位
  • resolver-organization - 按角色將解析器拆分至 resolvers/ 中
  • resolver-per-type - 每個具有欄位解析器的型別一個解析器檔案
  • resolver-subscriptions - 將訂閱解析器放在 resolvers/ 中,並將 PubSub 放在 infra/ 中

6. GraphQL 型別與輸入(高)

  • type-args - 在 dto/ 中定義 @Args 類別
  • type-inputs - 在 dto/ 中定義 GraphQL 輸入
  • type-pagination - 使用共用分頁型別分頁列表查詢
  • type-polymorphic-discriminators - 將區分文件發布為介面或聯合類型
  • type-unions-interfaces - 將聯合類型和介面類型放在模組的型別中

7. 資料存取(中高)

  • data-derived-fields - 計算衍生欄位;不要儲存它們
  • data-discriminators - 使用區分器建模多型子類型
  • data-entity-mongodb - 將 MongoDB 實體放在 entities/ 中
  • data-model-injection - 僅在儲存庫中注入模型
  • data-models-mappers - 當 API 與儲存不同時,拆分 models/ 和 mappers/
  • data-mongoose-schema - 共用類型的 Mongoose 綱要最佳實踐
  • data-repository - 將資料存取保留在 repositories/ 中

8. 配置、通用與基礎設施(中)

  • infra-common-types - 將共用類型放在 common/types/ 中
  • infra-common - 將共用建構區塊放在 common/ 中
  • infra-config - 將類型化配置放在 config/ 中
  • infra-custom-scalars - 在 common/scalars/ 中實作自訂標量
  • infra-database - 將資料庫設定與遷移放在 infra/database/ 中
  • infra-directives - 將綱要指令放在 common/directives/ 中
  • infra-exceptions - 將例外放在 exceptions/ 中
  • infra-graphql - 將 GraphQL 設定放在 infra/graphql/ 中
  • infra-seeds - 將種子腳本放在 infra/database/seeds/ 中
  • infra-shared-module - 使用 SharedModule 處理橫切關注的服務

9. 慣例與測試(中)

  • conventions-barrels-aliases - 審慎使用匯出桶與路徑別名
  • conventions-cli-generator - 使用 Nest CLI 生成器,然後調整
  • conventions-constants-enums - 將常數與列舉保留在類別檔案之外
  • conventions-module-boundaries - 使用 lint 強制執行模組邊界
  • conventions-naming - 檔案與類別命名慣例
  • conventions-test-fixtures - 將測試夾具、工廠與輔助程式放在 test/ 中
  • conventions-testing - 測試檔案放置

如何使用

從基礎結構規則開始,然後閱讀您正在處理的特定檔案類型的規則。規則檔案位於 rules/ 下:

rules/struct-canonical-layout.md
rules/_sections.md

每個規則檔案包含:

  • 目的與放置(檔案存放位置及其命名方式)
  • 職責與反職責
  • 一個錯誤範例及其說明
  • 一個正確範例及其說明

完整編譯文件

如需所有規則展開在單一文件中的完整指南,請參閱 AGENTS.md。

相關技能