a8177c1268
- domain: ClassificationJob entity with AssetClassification enum (scenic, product, person, animal, food, tech, sport, music, other) - ports: ClassificationJobRepository interface - application: SubmitClassificationJobUseCase - adapters: InMemoryClassificationJobRepository - worker: classify_asset task with mock classification logic - tests: full classification pipeline test - all 8 integration tests passing
27 lines
851 B
Python
27 lines
851 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from packages.domain import ClassificationJob
|
|
from packages.ports.classification_job_repository import ClassificationJobRepository
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class SubmitClassificationJobCommand:
|
|
workspace_id: str
|
|
project_id: str
|
|
asset_id: str
|
|
|
|
|
|
class SubmitClassificationJobUseCase:
|
|
def __init__(self, classification_job_repository: ClassificationJobRepository):
|
|
self.classification_job_repository = classification_job_repository
|
|
|
|
def execute(self, command: SubmitClassificationJobCommand) -> ClassificationJob:
|
|
job = ClassificationJob.create(
|
|
workspace_id=command.workspace_id,
|
|
project_id=command.project_id,
|
|
asset_id=command.asset_id,
|
|
)
|
|
return self.classification_job_repository.create(job)
|