MATIH Platform is in active MVP development. Documentation reflects current implementation status.
10. Data Catalog & Governance
Asset Service

Asset Service

The Asset Service is a Java/Spring Boot 3.2 application that provides a unified, type-agnostic registry for all data platform assets. It manages the full lifecycle of assets including versioning with bundle manifests, Git-style branching, granular permission control, governance-driven approval workflows, and cross-asset cloning.


Service Architecture

PropertyValue
LanguageJava 21
FrameworkSpring Boot 3.2
Port8093
Namespacematih-data-plane
DatabasePostgreSQL
Event busKafka (matih.asset.* topics)
CacheRedis

Component Layout

+------------------------------------------------------------------+
|                        Asset Service                              |
|                                                                   |
|  +-------------------+  +--------------------+  +---------------+ |
|  | REST Controllers  |  | Version Lifecycle  |  | Event Layer   | |
|  | - AssetCtrl       |  | - State Machine    |  | - Publisher   | |
|  | - VersionCtrl     |  | - Approval Flow    |  | - Kafka       | |
|  | - PermissionCtrl  |  | - Governance       |  |   Topics      | |
|  | - CloneCtrl       |  |   Policy           |  |               | |
|  | - GovernanceCtrl  |  |                    |  |               | |
|  +-------------------+  +--------------------+  +---------------+ |
|                                                                   |
|  +-------------------+  +--------------------+  +---------------+ |
|  | Domain Services   |  | Permission Service |  | Metrics       | |
|  | - AssetService    |  | - Grant/Revoke     |  | - Prometheus  | |
|  | - VersionService  |  | - Effective Perms  |  | - Business    | |
|  | - CloneService    |  | - Transfer Owner   |  |   Counters    | |
|  | - LifecycleService|  | - RBAC Levels      |  |               | |
|  +-------------------+  +--------------------+  +---------------+ |
+------------------------------------------------------------------+

Asset Types

The Asset Service supports a polymorphic set of asset types through the AssetType enum:

TypeDescriptionSource Service
DASHBOARDBI dashboardsbi-service
QUERYSaved SQL queriesquery-engine
PIPELINEData pipelinespipeline-service
ML_MODELMachine learning modelsml-service
DATASETData quality datasetsdata-quality-service
SEMANTIC_MODELSemantic layer modelssemantic-layer
ONTOLOGYOntology definitionsontology-service
NOTEBOOKJupyter/analysis notebooksml-service
DBT_PROJECTdbt transformation projectsdbt-server
TEMPLATEReusable configuration templatesany service

Each asset has a URN (Uniform Resource Name) generated as urn:matih:{type}:{name}.


Version Lifecycle

Every asset version follows a governance-driven state machine:

                  submitForReview()
    DRAFT  ─────────────────────────>  IN_REVIEW
      ^                                  │    │
      │              reject()            │    │  approve() (threshold met)
      └──────────────────────────────────┘    │
                                              v
                  release()              APPROVED
    DRAFT  ─────────────────────────>  /     │
    APPROVED ────────────────────────>  RELEASED

                  deprecate()             │
                                          v
                                     DEPRECATED

                  retire()                │
                                          v
                                       RETIRED

Lifecycle States

StateDescriptionAllowed Transitions
DRAFTInitial state, editableIN_REVIEW, RELEASED
IN_REVIEWAwaiting approvalAPPROVED, DRAFT (rejected)
APPROVEDApproved, awaiting releaseRELEASED
RELEASEDLive in productionDEPRECATED
DEPRECATEDMarked for sunsetRETIRED
RETIREDEnd of life, read-only(terminal)

Approval Workflow

The approval process supports configurable multi-approver governance:

ConfigurationDescriptionDefault
minApproversMinimum approvals required before auto-transition to APPROVED1
separationOfDutyWhether the submitter is prevented from approving their own submissiontrue
autoReleaseOnApprovalWhether to auto-release when approval threshold is metfalse
requireApprovalForReleaseWhether versions must pass IN_REVIEW before releasetrue

Governance policies are configured per-tenant via the GovernancePolicyController.


Permission Model

The Asset Service implements a hierarchical permission model with six levels:

LevelViewExecuteEditShareCloneManage
VIEWERyes-----
EXECUTORyesyes----
EDITORyesyesyes---
COLLABORATORyesyesyesyesyes-
MANAGERyesyesyesyesyesyes
OWNERyesyesyesyesyesyes

Permission Resolution Order

  1. Ownership check -- asset owner always has OWNER-level access
  2. Explicit grant -- direct USER-type permission grants
  3. Tenant visibility -- assets with TENANT visibility grant VIEWER to all tenant members
  4. No access -- if none of the above match

Permissions support expiration (expiresAt) and soft revocation with audit trail.


Cloning

Assets can be cloned to create independent copies. The clone process:

  1. Copies the asset metadata (name, description, tags, extra metadata)
  2. Copies the latest (or specified) version's bundle manifest
  3. Records clone provenance in the asset_clones table
  4. Publishes an AssetCloned event

Cloning requires COLLABORATOR or higher permission on the source asset.


Event Publishing

The AssetEventPublisher publishes domain events to Kafka:

EventTopicDescription
AssetCreatedmatih.asset.eventsNew asset registered
AssetUpdatedmatih.asset.eventsAsset metadata modified
AssetArchivedmatih.asset.eventsAsset moved to ARCHIVED status
VersionCreatedmatih.asset.eventsNew version created
LifecycleTransitionmatih.asset.lifecycleVersion state change
AssetSharedmatih.asset.permissionsPermission granted
AssetUnsharedmatih.asset.permissionsPermission revoked
OwnershipTransferredmatih.asset.permissionsOwner changed
AssetClonedmatih.asset.eventsAsset cloned

API Endpoints

Asset CRUD

MethodPathDescription
POST/api/v1/assetsCreate a new asset
GET/api/v1/assetsList assets (filtered, paginated)
GET/api/v1/assets/searchSearch assets by name/description
GET/api/v1/assets/types/countsCount assets by type
GET/api/v1/assets/{id}Get asset details
GET/api/v1/assets/urn/{urn}Get asset by URN
PUT/api/v1/assets/{id}Update asset metadata
POST/api/v1/assets/{id}/archiveArchive an asset

Versioning

MethodPathDescription
POST/api/v1/assets/{id}/versionsCreate a new version
GET/api/v1/assets/{id}/versionsList versions (paginated)
GET/api/v1/assets/{id}/versions/{version}Get specific version
GET/api/v1/assets/{id}/versions/{version}/bundleGet bundle manifest

Lifecycle

MethodPathDescription
POST/api/v1/assets/{id}/versions/{vid}/submit-reviewSubmit for review
POST/api/v1/assets/{id}/versions/{vid}/approveApprove version
POST/api/v1/assets/{id}/versions/{vid}/rejectReject version
POST/api/v1/assets/{id}/versions/{vid}/releaseRelease version
POST/api/v1/assets/{id}/versions/{vid}/deprecateDeprecate version
POST/api/v1/assets/{id}/versions/{vid}/retireRetire version
POST/api/v1/assets/{id}/versions/{vid}/rollbackRollback to previous
GET/api/v1/assets/{id}/versions/{vid}/historyLifecycle audit trail

Permissions

MethodPathDescription
POST/api/v1/assets/{id}/permissionsGrant permission
GET/api/v1/assets/{id}/permissionsList permissions
PUT/api/v1/assets/{id}/permissions/{pid}Update permission
DELETE/api/v1/assets/{id}/permissions/{pid}Revoke permission
GET/api/v1/assets/{id}/permissions/effectiveGet effective permission
POST/api/v1/assets/{id}/transfer-ownershipTransfer ownership

Cloning

MethodPathDescription
POST/api/v1/assets/{id}/cloneClone an asset
GET/api/v1/assets/{id}/clonesList clones of an asset

Governance

MethodPathDescription
GET/api/v1/governance/policyGet tenant governance policy
PUT/api/v1/governance/policyUpdate governance policy

Deployment and Health

Health Endpoints

EndpointDescription
/actuator/healthComposite health status
/actuator/health/livenessKubernetes liveness probe
/actuator/health/readinessKubernetes readiness probe
/actuator/health/dbPostgreSQL health
/actuator/prometheusPrometheus metrics scrape endpoint

Prometheus Metrics

MetricTypeTagsDescription
matih_asset_created_totalCountertypeAssets created by asset type
matih_asset_archived_totalCounter-Assets archived
matih_asset_version_created_totalCounter-Versions created
matih_asset_lifecycle_transition_totalCounterfrom, toLifecycle state transitions
matih_asset_permission_granted_totalCounterlevelPermissions granted by level
matih_asset_clone_totalCounter-Assets cloned

Database Migrations

VersionDescription
V1Initial schema: assets, asset_versions, asset_aliases tables
V2Permissions and cloning: asset_permissions, asset_clones tables
V3Version lifecycle and governance: lifecycle state columns, version_approvals, lifecycle_audit_log, governance_policies tables

Key Source Files

ComponentLocation
Asset Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/AssetController.java
Version Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/AssetVersionController.java
Lifecycle Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/VersionLifecycleController.java
Permission Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/AssetPermissionController.java
Clone Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/AssetCloneController.java
Governance Controllerdata-plane/asset-service/src/main/java/com/matih/asset/controller/GovernancePolicyController.java
Asset Servicedata-plane/asset-service/src/main/java/com/matih/asset/service/AssetService.java
Version Lifecycle Servicedata-plane/asset-service/src/main/java/com/matih/asset/service/VersionLifecycleService.java
Permission Servicedata-plane/asset-service/src/main/java/com/matih/asset/service/AssetPermissionService.java
State Machine Configdata-plane/asset-service/src/main/java/com/matih/asset/config/VersionLifecycleStateMachineConfig.java
Security Configdata-plane/asset-service/src/main/java/com/matih/asset/config/SecurityConfig.java
Prometheus Metricsdata-plane/asset-service/src/main/java/com/matih/asset/config/AssetMetrics.java
Global Exception Handlerdata-plane/asset-service/src/main/java/com/matih/asset/exception/GlobalExceptionHandler.java
Helm Chartinfrastructure/helm/data-plane/asset-service/

Related Sections

  • Catalog Service -- Metadata discovery and search that consumes asset events
  • Governance -- Platform-wide governance policies that complement per-tenant asset governance
  • Semantic Layer -- Semantic models stored as versioned assets