oto/agent-ops/rules/project/domain/command/rules.md

49 lines
2.1 KiB
Markdown

# command
## 목적 / 책임
외부 시스템(Git, Jenkins, FTP, Slack, iOS 빌드 등)과의 실제 연동을 구현하는 커맨드 계층과, 커맨드 파라미터 데이터 모델을 담당한다.
## 포함 경로
- `lib/oto/commands/` — 커맨드 구현체 (카테고리별 하위 폴더)
- `lib/oto/data/` — 커맨드 파라미터 데이터 모델 (`*_data.dart`, `*.g.dart`)
## 제외 경로
- `lib/oto/pipeline/` — 실행 흐름 제어 (커맨드 dispatch 이전)
- `lib/oto/core/` — 태그 치환, 데이터 합성 (커맨드 실행 이전)
## 주요 구성 요소
- `Command` (`command.dart`) — 커맨드 베이스 클래스, `CommandType` enum
- `CommandRegistry` (`command_registry.dart`) — CommandType → Command 매핑 등록소
- `DataParam` (`base_data.dart`) — 모든 커맨드 파라미터의 베이스
- `DataCommand` (`command_data.dart`) — 모든 커맨드에 전달되는 통합 컨테이너
커맨드 카테고리:
- `build/` — iOS/Flutter/Dart/MSBuild/.NET 빌드
- `file/` — 파일 복사·삭제·이름 변경·압축
- `git/` — Git, GitHub 연동
- `ftp/` — FTP 업로드·다운로드
- `notification/` — Slack, Mattermost 알림
- `jenkins/` — Jenkins API 연동
- `aws/`, `docker/`, `gradle/`, `proto/`, `jira/`, `infra/`, `shell/`, `web/`, `process/`, `util/`
## 유지할 패턴
- 새 커맨드는 반드시 `Command` 상속 후 `CommandRegistry`에 등록
- 파라미터 모델은 `DataParam` 상속 + `@JsonSerializable`
- `*.g.dart``dart run build_runner build`로 생성 (필요 시 직접 수정 가능)
- `getWorkspace()`: workspace 필드 → `property['workspace']``commonData.workspace` 순으로 resolve
## 다른 도메인과의 경계
- **pipeline**: `Command.execute(DataCommand)`를 호출하는 시점이 경계. 커맨드는 흐름을 모른다
- **core**: 태그 치환은 core가 완료한 후 DataCommand가 커맨드에 전달됨
## 금지 사항
- 커맨드에서 다른 커맨드를 직접 인스턴스화하거나 호출하지 않는다
- 흐름 제어(if/loop) 로직을 커맨드 내부에 넣지 않는다
- `CommandRegistry` 외 장소에서 CommandType 매핑을 추가하지 않는다