mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-06 19:42:34 +08:00
Architecture changes: - API Routes -> manager.py (thin adapter) -> services/ (business logic) -> queries/ (atomic DB ops) - Services own session lifecycle via create_session() - Queries accept Session as parameter, do single-table atomic operations New app/assets/services/ layer: - __init__.py - exports all service functions - ingest.py - ingest_file_from_path(), register_existing_asset() - asset_management.py - get_asset_detail(), update_asset_metadata(), delete_asset_reference(), set_asset_preview() - tagging.py - apply_tags(), remove_tags(), list_tags() Removed from queries/asset_info.py: - ingest_fs_asset (moved to services/ingest.py as ingest_file_from_path) - update_asset_info_full (moved to services/asset_management.py as update_asset_metadata) - create_asset_info_for_existing_asset (moved to services/ingest.py as register_existing_asset) Updated manager.py: - Now a thin adapter that transforms API schemas to/from service calls - Delegates all business logic to services layer - No longer imports sqlalchemy.orm.Session or models directly Test updates: - Fixed test_cache_state.py import of pick_best_live_path (moved to helpers.py) - Added comprehensive service layer tests (41 new tests) - All 112 query + service tests pass Amp-Thread-ID: https://ampcode.com/threads/T-019c24e2-7ae4-707f-ad19-c775ed8b82b5 Co-authored-by: Amp <amp@ampcode.com>
76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
# Re-export public API from query modules
|
|
# Pure atomic database queries only - no business logic or orchestration
|
|
|
|
from app.assets.database.queries.asset import (
|
|
asset_exists_by_hash,
|
|
get_asset_by_hash,
|
|
upsert_asset,
|
|
)
|
|
|
|
from app.assets.database.queries.asset_info import (
|
|
asset_info_exists_for_asset_id,
|
|
get_asset_info_by_id,
|
|
insert_asset_info,
|
|
get_or_create_asset_info,
|
|
update_asset_info_timestamps,
|
|
list_asset_infos_page,
|
|
fetch_asset_info_asset_and_tags,
|
|
fetch_asset_info_and_asset,
|
|
touch_asset_info_by_id,
|
|
replace_asset_info_metadata_projection,
|
|
delete_asset_info_by_id,
|
|
set_asset_info_preview,
|
|
)
|
|
|
|
from app.assets.database.queries.cache_state import (
|
|
list_cache_states_by_asset_id,
|
|
upsert_cache_state,
|
|
prune_orphaned_assets,
|
|
fast_db_consistency_pass,
|
|
)
|
|
|
|
from app.assets.database.queries.tags import (
|
|
ensure_tags_exist,
|
|
get_asset_tags,
|
|
set_asset_info_tags,
|
|
add_tags_to_asset_info,
|
|
remove_tags_from_asset_info,
|
|
add_missing_tag_for_asset_id,
|
|
remove_missing_tag_for_asset_id,
|
|
list_tags_with_usage,
|
|
)
|
|
|
|
__all__ = [
|
|
# asset.py
|
|
"asset_exists_by_hash",
|
|
"get_asset_by_hash",
|
|
"upsert_asset",
|
|
# asset_info.py
|
|
"asset_info_exists_for_asset_id",
|
|
"get_asset_info_by_id",
|
|
"insert_asset_info",
|
|
"get_or_create_asset_info",
|
|
"update_asset_info_timestamps",
|
|
"list_asset_infos_page",
|
|
"fetch_asset_info_asset_and_tags",
|
|
"fetch_asset_info_and_asset",
|
|
"touch_asset_info_by_id",
|
|
"replace_asset_info_metadata_projection",
|
|
"delete_asset_info_by_id",
|
|
"set_asset_info_preview",
|
|
# cache_state.py
|
|
"list_cache_states_by_asset_id",
|
|
"upsert_cache_state",
|
|
"prune_orphaned_assets",
|
|
"fast_db_consistency_pass",
|
|
# tags.py
|
|
"ensure_tags_exist",
|
|
"get_asset_tags",
|
|
"set_asset_info_tags",
|
|
"add_tags_to_asset_info",
|
|
"remove_tags_from_asset_info",
|
|
"add_missing_tag_for_asset_id",
|
|
"remove_missing_tag_for_asset_id",
|
|
"list_tags_with_usage",
|
|
]
|