"""Title value object. This module defines the Title value object for blog post titles with validation for minimum and maximum length constraints. """ from dataclasses import dataclass from app.domain.value_objects.base import ValueObject @dataclass(frozen=True, slots=True) class Title(ValueObject[str]): """Blog post title value object. Wraps and validates blog post titles ensuring they meet length requirements and are not empty. Attributes: value: The title string value. MIN_LENGTH: Minimum allowed title length (3 characters). MAX_LENGTH: Maximum allowed title length (200 characters). Raises: ValueError: If title is empty, too short, or too long. Example: >>> title = Title("My Blog Post") >>> print(title.value) """ MIN_LENGTH: int = 3 MAX_LENGTH: int = 200 def _validate(self) -> None: """Validate title string. Checks that title is a non-empty string within length bounds. Raises: ValueError: If title fails validation criteria. """ if not isinstance(self.value, str): raise ValueError("Title must be a string") if len(self.value) < self.MIN_LENGTH: raise ValueError(f"Title must be at least {self.MIN_LENGTH} characters") if len(self.value) > self.MAX_LENGTH: raise ValueError(f"Title must be at most {self.MAX_LENGTH} characters") if not self.value.strip(): raise ValueError("Title cannot be empty or whitespace")