데이터 상품/다운링크/전달은 실제 촬영 결과물의 생성, 다운링크 계획, 처리, 카탈로그 등록, 전달, 과금을 담당하는 업무 도메인이다.
상품 원장 관리: 촬영 결과물의 수준, 포맷, 저장 위치, 무결성을 관리한다.다운링크 요청 및 계획: 상품을 어떤 세션으로 전송할지 계획한다.처리 파이프라인 운영: 파생 상품 생성과 처리 작업 이력을 관리한다.카탈로그 운영: 검색과 메타데이터 노출을 관리한다.전달 관리: 외부 목적지로의 배송과 전달 상태를 관리한다.과금 관리: 요청 또는 상품 기준 과금을 집계하고 청구 기록을 남긴다.DOWNLINK_REQUESTDOWNLINK_PLANDATA_PRODUCTPRODUCT_DERIVATIONPROCESS_JOBCATALOG_ITEMDELIVERY_ORDERBILLING_RECORDerDiagram
DOWNLINK_REQUEST {
uuid dl_req_id PK
uuid product_id FK
uuid tenant_id FK
datetime required_by_time
int priority
float volume_est_gb
string status
datetime created_at
}
DOWNLINK_PLAN {
uuid dl_plan_id PK
uuid session_id FK
uuid dl_req_id FK
float planned_rate_mbps
float planned_volume_gb
string status
datetime created_at
}
DATA_PRODUCT {
uuid product_id PK
uuid request_id FK
uuid tenant_id FK
uuid satellite_id FK
datetime sensing_time
geometry footprint_geom
string level
string processing_status
string format
string uri
string checksum
datetime created_at
}
PRODUCT_DERIVATION {
uuid derivation_id PK
uuid parent_product_id FK
uuid child_product_id FK
string derivation_type
datetime created_at
}
PROCESS_JOB {
uuid job_id PK
uuid product_id FK
string pipeline_name
string pipeline_version
string status
datetime started_at
datetime finished_at
string log_uri
}
CATALOG_ITEM {
uuid catalog_id PK
uuid product_id FK
uuid tenant_id FK
datetime indexed_at
string stac_item_uri
}
DELIVERY_ORDER {
uuid delivery_id PK
uuid product_id FK
uuid tenant_id FK
string method
string destination
string status
datetime delivered_at
}
BILLING_RECORD {
uuid billing_id PK
uuid tenant_id FK
uuid customer_id FK
uuid request_id FK
uuid product_id FK
string charge_type
float amount
string currency
datetime billed_at
}
DATA_PRODUCT ||--o{ DOWNLINK_REQUEST : requires
DOWNLINK_REQUEST ||--o{ DOWNLINK_PLAN : planned_as
DATA_PRODUCT ||--o{ PRODUCT_DERIVATION : parent
DATA_PRODUCT ||--o{ PRODUCT_DERIVATION : child
DATA_PRODUCT ||--o{ PROCESS_JOB : processed_by
DATA_PRODUCT ||--o{ CATALOG_ITEM : indexed_as
DATA_PRODUCT ||--o{ DELIVERY_ORDER : delivered_via
DATA_PRODUCT ||--o{ BILLING_RECORD : bills
DATA_PRODUCT는 촬영 요청 도메인의 IMAGING_REQUEST와 위성 도메인의 SATELLITE를 참조한다.DOWNLINK_PLAN은 궤도/지상국 운영 도메인의 CONTACT_SESSION에서 수행된다.BILLING_RECORD는 고객/계정 도메인의 TENANT, CUSTOMER와 연결된다.dl_req_id는 식별자, product_id는 대상 상품, tenant_id는 요청 테넌트, required_by_time은 필요 시점, priority는 우선순위, volume_est_gb는 예상 용량, status는 처리 상태, created_at은 생성 시각이다.dl_plan_id는 식별자, session_id는 실행 세션, dl_req_id는 요청 FK, planned_rate_mbps는 계획 전송률, planned_volume_gb는 계획 전송량, status는 상태, created_at은 생성 시각이다.product_id는 식별자, request_id는 원 요청, tenant_id는 소유 테넌트, satellite_id는 촬영 위성, sensing_time은 촬영 시각, footprint_geom은 장면 발자국, level은 처리 레벨, processing_status는 처리 상태, format은 저장 형식, uri는 저장 위치, checksum은 무결성 값, created_at은 생성 시각이다.derivation_id는 식별자, parent_product_id와 child_product_id는 상위/하위 상품, derivation_type은 파생 유형, created_at은 생성 시각이다.job_id는 식별자, product_id는 대상 상품, pipeline_name과 pipeline_version은 처리 파이프라인 정보, status는 실행 상태, started_at, finished_at은 처리 시각, log_uri는 로그 위치다.catalog_id는 식별자, product_id는 대상 상품, tenant_id는 소유 테넌트, indexed_at은 색인 시각, stac_item_uri는 STAC 메타데이터 위치다.delivery_id는 식별자, product_id는 대상 상품, tenant_id는 소유 테넌트, method는 전달 방식, destination은 전달 목적지, status는 처리 상태, delivered_at은 전달 완료 시각이다.billing_id는 식별자, tenant_id와 customer_id는 과금 주체, request_id와 product_id는 과금 대상 문맥, charge_type은 과금 유형, amount는 금액, currency는 통화, billed_at은 청구 시각이다.dl_req_id, FK는 product_id -> DATA_PRODUCT.product_id, tenant_id -> TENANT.tenant_id.product_id, tenant_id, required_by_time, priority, volume_est_gb, status, created_at은 NOT NULL 권장.(tenant_id, status, required_by_time), (product_id) 인덱스 권장.status는 requested, planned, in_progress, completed, failed.dl_plan_id, FK는 session_id -> CONTACT_SESSION.session_id, dl_req_id -> DOWNLINK_REQUEST.dl_req_id.session_id, dl_req_id, planned_rate_mbps, planned_volume_gb, status, created_at은 NOT NULL.(session_id), (dl_req_id) 유니크 검토, (status, created_at DESC) 인덱스 권장.status는 planned, reserved, executing, completed, cancelled.product_id, FK는 request_id -> IMAGING_REQUEST.request_id, tenant_id -> TENANT.tenant_id, satellite_id -> SATELLITE.satellite_id.request_id, tenant_id, satellite_id, sensing_time, level, processing_status, format, uri, created_at은 NOT NULL, footprint_geom, checksum은 nullable 가능.(tenant_id, sensing_time DESC), (request_id), (satellite_id, sensing_time DESC), uri 유니크 검토. footprint_geom에는 공간 인덱스 권장.level은 L0, L1, L2, L3. processing_status는 raw, processing, ready, failed, archived.derivation_id, FK는 parent_product_id -> DATA_PRODUCT.product_id, child_product_id -> DATA_PRODUCT.product_id.derivation_type, created_at은 NOT NULL 권장.(parent_product_id, child_product_id) 유니크, (child_product_id) 인덱스 권장.derivation_type은 orthorectified, cropped, compressed, analytics.job_id, FK는 product_id -> DATA_PRODUCT.product_id.product_id, pipeline_name, pipeline_version, status, started_at은 NOT NULL, finished_at, log_uri는 nullable 가능.(product_id, started_at DESC), (status, started_at DESC) 인덱스 권장.status는 queued, running, completed, failed, retrying.catalog_id, FK는 product_id -> DATA_PRODUCT.product_id, tenant_id -> TENANT.tenant_id.product_id, tenant_id, indexed_at, stac_item_uri는 NOT NULL 권장.(product_id) 유니크 검토, (tenant_id, indexed_at DESC) 인덱스 권장.delivery_id, FK는 product_id -> DATA_PRODUCT.product_id, tenant_id -> TENANT.tenant_id.product_id, tenant_id, method, destination, status는 NOT NULL, delivered_at은 nullable 가능.(tenant_id, status), (product_id), (delivered_at DESC) 인덱스 권장.method는 download_link, s3_push, api_push, media_export. status는 requested, preparing, delivered, failed, expired.billing_id, FK는 tenant_id -> TENANT.tenant_id, customer_id -> CUSTOMER.customer_id, request_id -> IMAGING_REQUEST.request_id, product_id -> DATA_PRODUCT.product_id.tenant_id, charge_type, amount, currency, billed_at은 NOT NULL, customer_id, request_id, product_id는 청구 모델에 따라 nullable 가능.(tenant_id, billed_at DESC), (customer_id, billed_at DESC), (request_id), (product_id) 인덱스 권장.charge_type은 tasking_fee, capture_fee, processing_fee, delivery_fee, subscription_adjustment.