import datetime from pydantic import BaseModel class Profile(BaseModel): profile_id: str | None crm_id: str | None email: str first_name: str | None last_name: str | None phone_number: str | None country_code: str | None city: str | None region: str | None address: str | None zip_code: str | None date_of_birth: datetime.date | None birthday: str | None deleted: bool deleted_at: datetime.datetime | None class Subscription(BaseModel): created_at: datetime.datetime artist_name: str class ExportRecord(BaseModel): export_date: datetime.datetime | None business_reason: str | None recipient_email: str | None recipient_name: str | None export_type: str | None exported_by: str | None fan_first_name: str | None fan_last_name: str | None fan_email: str | None source: str class DsarResult(BaseModel): profile: Profile | None subscriptions: list[Subscription] exports: list[ExportRecord] export_warnings: list[str] = [] class CcpaRow(BaseModel): email: str requested_date: datetime.date class CcpaUploadResult(BaseModel): inserted_count: int updated_count: int skipped_count: int errors: list[str] class BulkDeleteResult(BaseModel): inserted_count: int errors: list[str] class FileUploadFilterOption(BaseModel): vendor_id: str label_name: str global_participant_id: str | None virtual_participant_id: str | None artist_name: str mailing_list_id: str mailing_list_name: str type: str class FileUploadResult(BaseModel): success: bool campaign_id: str | None rows_uploaded: int errors: list[str] class FailureBreakdown(BaseModel): reason: str count: int class UploadStatusResult(BaseModel): processed_count: int failures: list[FailureBreakdown] class CampaignStats(BaseModel): artist_name: str file_source_description: str file_name: str fan_count: int