feat: core pipeline + FastAPI API (Phases 0-6)
Implemented the full VMK Data Collector foundation and processing pipeline:

- Config, logging, exception hierarchy
- DB models (listings, raw data, images, snapshots, enrichments, custom fields)
- Alembic async migrations
- Repositories with upsert/snapshot support
- Domain entities and Pydantic schemas
- Ollama AI client with mock mode
- AI normalizer, image analyzer, enricher
- Image downloader with SHA-256 dedup
- PropertyPipeline: raw -> AI validate -> upsert/snapshot -> images -> enrich
- FastAPI app with /api/v1/ingest endpoint

Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 378290f commit 9eb6d3e5aeb7de9c6e5d02b0a1f37e6318957591
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 1 day ago
Showing 61 changed files
View
.env.example 0 → 100644
View
.gitignore 0 → 100644
View
README.md
View
alembic.ini 0 → 100644
View
alembic/README 0 → 100644
View
alembic/env.py 0 → 100644
View
alembic/script.py.mako 0 → 100644
View
alembic/versions/33cad32b9bbd_initial.py 0 → 100644
View
docker-compose.yml 0 → 100644
View
docs/ARCHITECTURE.md 0 → 100644
View
docs/IMPLEMENTATION_PLAN.md 0 → 100644
View
docs/SPECIFICATION.md 0 → 100644
View
pyproject.toml 0 → 100644
View
src/vmk_data_collector/__init__.py 0 → 100644
View
src/vmk_data_collector/api/__init__.py 0 → 100644
View
src/vmk_data_collector/api/deps.py 0 → 100644
View
src/vmk_data_collector/api/v1/__init__.py 0 → 100644
View
src/vmk_data_collector/api/v1/router_properties.py 0 → 100644
View
src/vmk_data_collector/core/__init__.py 0 → 100644
View
src/vmk_data_collector/core/config.py 0 → 100644
View
src/vmk_data_collector/core/exceptions.py 0 → 100644
View
src/vmk_data_collector/core/logging.py 0 → 100644
View
src/vmk_data_collector/db/__init__.py 0 → 100644
View
src/vmk_data_collector/db/base.py 0 → 100644
View
src/vmk_data_collector/db/engine.py 0 → 100644
View
src/vmk_data_collector/db/repositories/__init__.py 0 → 100644
View
src/vmk_data_collector/db/repositories/ai_enrichment.py 0 → 100644
View
src/vmk_data_collector/db/repositories/base.py 0 → 100644
View
src/vmk_data_collector/db/repositories/custom_field.py 0 → 100644
View
src/vmk_data_collector/db/repositories/data_source.py 0 → 100644
View
src/vmk_data_collector/db/repositories/image.py 0 → 100644
View
src/vmk_data_collector/db/repositories/property.py 0 → 100644
View
src/vmk_data_collector/db/repositories/property_type.py 0 → 100644
View
src/vmk_data_collector/db/repositories/raw_data.py 0 → 100644
View
src/vmk_data_collector/db/repositories/snapshot.py 0 → 100644
View
src/vmk_data_collector/db/seed.py 0 → 100644
View
src/vmk_data_collector/db/session.py 0 → 100644
View
src/vmk_data_collector/domain/__init__.py 0 → 100644
View
src/vmk_data_collector/domain/entities.py 0 → 100644
View
src/vmk_data_collector/domain/enums.py 0 → 100644
View
src/vmk_data_collector/main.py 0 → 100644
View
src/vmk_data_collector/models/__init__.py 0 → 100644
View
src/vmk_data_collector/models/ai_enrichment.py 0 → 100644
View
src/vmk_data_collector/models/data_source.py 0 → 100644
View
src/vmk_data_collector/models/property_custom_field.py 0 → 100644
View
src/vmk_data_collector/models/property_image.py 0 → 100644
View
src/vmk_data_collector/models/property_listing.py 0 → 100644
View
src/vmk_data_collector/models/property_snapshot.py 0 → 100644
View
src/vmk_data_collector/models/property_type.py 0 → 100644
View
src/vmk_data_collector/models/raw_parsing_data.py 0 → 100644
View
src/vmk_data_collector/schemas/__init__.py 0 → 100644
View
src/vmk_data_collector/schemas/ai_response.py 0 → 100644
View
src/vmk_data_collector/schemas/normalized.py 0 → 100644
View
src/vmk_data_collector/schemas/raw_data.py 0 → 100644
View
src/vmk_data_collector/services/__init__.py 0 → 100644
View
src/vmk_data_collector/services/ai_enricher.py 0 → 100644
View
src/vmk_data_collector/services/ai_image_analyzer.py 0 → 100644
View
src/vmk_data_collector/services/ai_normalizer.py 0 → 100644
View
src/vmk_data_collector/services/image_downloader.py 0 → 100644
View
src/vmk_data_collector/services/ollama_client.py 0 → 100644
View
src/vmk_data_collector/services/property_pipeline.py 0 → 100644