This commit introduces a comprehensive, template-based analysis orchestration system, refactoring the entire analysis generation workflow from the ground up.
Key Changes:
1. **Backend Architecture (`report-generator-service`):**
* Replaced the naive analysis workflow with a robust orchestrator based on a Directed Acyclic Graph (DAG) of module dependencies.
* Implemented a full topological sort (`petgraph`) to determine the correct execution order and detect circular dependencies.
2. **Data Models (`common-contracts`, `data-persistence-service`):**
* Introduced the concept of `AnalysisTemplateSets` to allow for multiple, independent, and configurable analysis workflows.
* Created a new `analysis_results` table to persist the output of each module for every analysis run, ensuring traceability.
* Implemented a file-free data seeding mechanism to populate default analysis templates on service startup.
3. **API Layer (`api-gateway`):**
* Added a new asynchronous endpoint (`POST /analysis-requests/{symbol}`) to trigger analysis workflows via NATS messages.
* Updated all configuration endpoints to support the new `AnalysisTemplateSets` model.
4. **Frontend UI (`/config`, `/query`):**
* Completely refactored the "Analysis Config" page into a two-level management UI for "Template Sets" and the "Modules" within them, supporting full CRUD operations.
* Updated the "Query" page to allow users to select which analysis template to use when generating a report.
This new architecture provides a powerful, flexible, and robust foundation for all future development of our intelligent analysis capabilities.
39 lines
1.8 KiB
Docker
39 lines
1.8 KiB
Docker
FROM rust:1.90-bookworm AS chef
|
|
WORKDIR /app
|
|
RUN cargo install cargo-chef
|
|
|
|
FROM chef AS planner
|
|
WORKDIR /app/services/data-persistence-service
|
|
# 仅复制必要的 Cargo 清单,避免大体积上下文
|
|
COPY services/common-contracts/Cargo.toml /app/services/common-contracts/Cargo.toml
|
|
COPY services/data-persistence-service/Cargo.toml /app/services/data-persistence-service/Cargo.toml
|
|
RUN cargo chef prepare --recipe-path recipe.json
|
|
|
|
FROM chef AS builder
|
|
ENV SQLX_OFFLINE=true
|
|
WORKDIR /app/services/data-persistence-service
|
|
COPY --from=planner /app/services/data-persistence-service/recipe.json /app/services/data-persistence-service/recipe.json
|
|
# 为了支持 path 依赖,先拷贝依赖源码再 cook
|
|
COPY services/common-contracts /app/services/common-contracts
|
|
RUN cargo chef cook --release --recipe-path /app/services/data-persistence-service/recipe.json
|
|
# 复制服务源码用于实际构建
|
|
COPY services/common-contracts /app/services/common-contracts
|
|
COPY services/data-persistence-service /app/services/data-persistence-service
|
|
## 为了在编译期通过 include_str! 嵌入根目录配置,将 /config 拷贝到 /app/config
|
|
COPY config /app/config
|
|
RUN cargo build --release --bin data-persistence-service-server
|
|
|
|
FROM debian:bookworm-slim AS runtime
|
|
WORKDIR /app
|
|
RUN groupadd --system --gid 1001 appuser && \
|
|
useradd --system --uid 1001 --gid 1001 appuser
|
|
USER appuser
|
|
COPY --from=builder /app/services/data-persistence-service/target/release/data-persistence-service-server /usr/local/bin/data-persistence-service-server
|
|
COPY services/data-persistence-service/migrations ./migrations
|
|
ENV HOST=0.0.0.0
|
|
ENV PORT=3000
|
|
## 当迁移版本发生偏差时,允许继续启动(仅容器默认;本地可覆盖)
|
|
ENV SKIP_MIGRATIONS_ON_MISMATCH=1
|
|
EXPOSE 3000
|
|
ENTRYPOINT ["/usr/local/bin/data-persistence-service-server"]
|