AGENT SKILL

50-contract-codegen

暂无简介

适用职业律师与法务
License 许可
MIT
所属仓库
devwinsoft/devian
最近更新
2026-04-12
Stars
★ 0
Forks
0

02 资源文件 1

03 SKILL.md 正文

50-contract-codegen

Status: ACTIVE
AppliesTo: v10
SSOT: skills/devian/10-module/03-ssot/SKILL.md

Purpose

DATA(DomainType=DATA)에서 사용하는 contracts JSON 입력 규약을 정의한다.

이 문서는 “contracts 입력 포맷과 경로”만 규정한다. 생성 코드의 네임스페이스/타입/시그니처는 런타임/제너레이터 코드를 정답으로 본다.


Inputs

입력은 {buildInputJson}의 domains 섹션이 정본이다.

  • domains[{DomainKey}].contractDir
  • domains[{DomainKey}].contractFiles (예: ["*.json"])

Contract Spec JSON

Contract spec는 enums와 classes로 구성된다.

Enum

{
  "name": "USER_TYPE",
  "doc": "optional doc",
  "values": [
    { "name": "GUEST", "value": 0 },
    { "name": "MEMBER", "value": 1 }
  ]
}

Class

{
  "name": "UserProfile",
  "doc": "optional doc",
  "fields": [
    { "name": "id", "type": "int" },
    { "name": "name", "type": "string" },
    { "name": "userType", "type": "enum:USER_TYPE" }
  ]
}

Root

{
  "enums": [ /* ... */ ],
  "classes": [ /* ... */ ]
}

지원 타입 문자열(예: int64, string, 배열 등)과 타입 매핑의 정답은 Reference를 따른다.


Outputs & Paths

경로 규약은 SSOT를 따른다.

Contract는 Domain 단위로 Table과 함께 단일 파일에 통합 생성된다.

  • staging: {tempDir}/{DomainKey}/cs/Generated/{DomainKey}.g.cs, {tempDir}/{DomainKey}/ts/Generated/{DomainKey}.g.ts
  • final: {csConfig.generateDir}/Devian.Domain.{DomainKey}/Generated/{DomainKey}.g.cs, {tsConfig.generateDir}/devian-domain-{domainkey}/Generated/{DomainKey}.g.ts

Domain 모듈 의존성 (Hard Rule)

C# DATA Domain 모듈 의존성:

  • Devian.Domain.{DomainKey}.csproj는 ..\Devian\Devian.csproj만 ProjectReference 한다.
  • Common 모듈을 포함한 모든 Domain 모듈이 동일한 규칙을 따른다.

TS DATA Domain 패키지 의존성:

  • @devian/module-{domainkey}는 @devian/core만 의존한다.

Failure Rules (MUST)

  • JSON 파싱 실패 → 빌드 실패
  • enum/class 이름 중복 등 명백한 충돌 → 빌드 실패

Naming Rules (Hard Rule)

Enum Naming

  • enum 타입명은 대문자 SNAKE_CASE를 사용한다.
  • enum 멤버명도 대문자 SNAKE_CASE를 사용한다.
  • 예:
    • Good: MISSION_TYPE, USER_TYPE, APP_OPEN
    • Bad: MissionType, UserType, AppOpen

Field Naming (Hard Rule)

Contract JSON의 field name을 C#/TS 프로퍼티 이름으로 그대로 사용한다. 변환하지 않는다.

위치 이름 예시
Contract JSON field name 그대로 id, userType
C# 프로퍼티 그대로 id, userType
TS 프로퍼티 그대로 id, userType

Reference

  • Policy SSOT: skills/devian/10-module/03-ssot/SKILL.md
  • 동작 정본: 런타임/제너레이터 코드

04 同仓库更多 Skills