84 lines
5.4 KiB
Markdown
84 lines
5.4 KiB
Markdown
---
|
|
domain: client
|
|
last_rule_review_commit: 1f1527d7c6b8f115ba12c951c9919d779f071b23
|
|
last_rule_updated_at: 2026-06-01
|
|
---
|
|
|
|
# client
|
|
|
|
## 목적 / 책임
|
|
|
|
ALT의 Flutter client surface를 담당한다. web/mobile/desktop targets, application shell, routing, feature presentation, socket integration adapters, optional external push integrations, and client-side tests belong here.
|
|
|
|
## 포함 경로
|
|
|
|
- `apps/client/lib/main.dart` - Flutter app bootstrap
|
|
- `apps/client/lib/src/app/` - app shell, theme, router
|
|
- `apps/client/lib/src/contracts/` - client-side contract parser helpers
|
|
- `apps/client/lib/src/features/` - feature presentation code
|
|
- `apps/client/lib/src/generated/` - generated Dart protobuf outputs consumed by the client
|
|
- `apps/client/lib/src/integrations/` - client-side external integration adapters
|
|
- `apps/client/android/`, `apps/client/ios/`, `apps/client/linux/`, `apps/client/macos/`, `apps/client/windows/`, `apps/client/web/` - Flutter platform targets and web assets
|
|
- `apps/client/assets/` - client asset bundle inputs
|
|
- `apps/client/tool/` - client-local tooling such as Dart protoc plugin wrapper
|
|
- `apps/client/integration_test/` - Flutter integration tests
|
|
- `apps/client/test/` - Flutter widget/unit tests
|
|
- `apps/client/test_runtime/` - runtime smoke test helpers
|
|
- `apps/client/analysis_options.yaml` - Dart analyzer configuration
|
|
- `apps/client/pubspec.yaml` - Flutter package dependencies
|
|
|
|
## 제외 경로
|
|
|
|
- `services/api/` - socket server runtime
|
|
- `packages/contracts/` - schema source for generated contracts
|
|
- `packages/domain/` - Go domain models
|
|
|
|
## 주요 구성 요소
|
|
|
|
- `AltClientApp` - Material app shell using Riverpod
|
|
- `AltClientBootstrapOptions` - boot options for fullscreen mode and optional push initialization
|
|
- `AltWorkbenchShell` - top titlebar, right-side activity rail, center content switching, and right Agent dock scaffold
|
|
- `appRouterProvider` - `go_router` configuration
|
|
- `DashboardScreen` - initial responsive dashboard surface
|
|
- `altParserMap` - generated ALT protobuf message parser registration for Dart clients
|
|
- `AltSocketClient` - proto-socket client wrapper for ALT request/response flows
|
|
- `AltSocketEndpoint` - local/default socket endpoint value object
|
|
- `SocketConnectionController` - Riverpod connection state controller for socket lifecycle
|
|
- `MattermostPushHostIntegration` - optional external push integration boundary
|
|
- `MattermostPushClient` and `MattermostPushPluginClient` - host-facing push abstraction and production plugin adapter
|
|
- `MattermostAuthService` - optional Mattermost auth and FCM token registration service
|
|
- `bootstrapAltClient` - app bootstrap and platform integration startup
|
|
|
|
## 유지할 패턴
|
|
|
|
- Keep app-level shell and router under `lib/src/app`.
|
|
- Put user-facing screens under the `lib/src/features/feature-name/presentation` pattern.
|
|
- Put socket and other external adapters under `lib/src/integrations`.
|
|
- Keep the workbench shell as product skeleton and composition boundary. Real quant operation surfaces are mounted after API/worker/domain headless paths are stable.
|
|
- Use sibling `agent_shell` for the common chat/agent UI only; keep ALT-specific market/backtest/portfolio logic in ALT client features or backend domains.
|
|
- Treat files under `lib/src/generated` as generated outputs; update them through codegen.
|
|
- Use Material 3 components and responsive navigation patterns.
|
|
- Test user-visible app shell behavior through Flutter tests.
|
|
- Use `services/api` as the only ALT-owned runtime endpoint. Do not connect directly to worker runtime surfaces from client code.
|
|
- Keep operator shell bootstrapping separable from optional push/Firebase/Mattermost setup so core operator UI can start without external push readiness.
|
|
- Keep endpoint defaults in `AltSocketEndpoint` or provider/config boundaries; presentation widgets should consume state, not hard-code runtime endpoints.
|
|
- Keep Mattermost/Firebase/platform-channel behavior under `lib/src/integrations` and out of dashboard presentation widgets.
|
|
- Keep production access to `NexoMessagingPlugin.instance` behind `MattermostPushPluginClient`; tests and host orchestration should depend on `MattermostPushClient`.
|
|
|
|
## 다른 도메인과의 경계
|
|
|
|
- **api**: client connects to API through integration adapters; server lifecycle and server-side socket parsing stay in `services/api`.
|
|
- **contracts**: client consumes generated/mapped contracts and owns Dart parser helpers; protobuf source stays in `packages/contracts`.
|
|
- **agent-shell**: common agent shell widget/message model only. ALT-specific quant workflow logic stays in ALT-owned client/core domains.
|
|
- **operations**: `bin/test`, `bin/lint`, and `bin/build` run client checks from the workspace root.
|
|
- **worker**: client never connects to worker directly; worker state reaches client only through API contracts.
|
|
|
|
## 금지 사항
|
|
|
|
- Do not place backend service code or Go module files under `apps/client`.
|
|
- Do not hand-edit Flutter generated platform files or registrants unless a platform integration explicitly requires it.
|
|
- Do not hand-edit generated protobuf Dart outputs.
|
|
- Do not hard-code production endpoint assumptions in presentation widgets.
|
|
- Do not put ALT-specific quant domain logic into `agent_shell`.
|
|
- Do not add direct worker, database, Redis, or ALT-owned non-API runtime connections to Flutter client code.
|
|
- Do not make push notification or Mattermost availability a prerequisite for the base operator shell unless a dedicated push Milestone explicitly changes that boundary.
|