package usecase import ( "context" ) type CopyDraftSummary struct { ID string PersonaID string ContentPlanID string CopyMissionID string ScanPostID string FormulaID string DraftType string SortOrder int Text string TopicTag string Angle string Hook string Rationale string ReferenceNotes string Sources []string AiScore int FormulaScore int BrandFitScore int RiskScore int SimilarityScore int EngagementPotential int FreshnessScore int ReviewSuggestion string Status string PublishQueueID string PublishedMediaID string PublishedPermalink string PublishedAt int64 CreateAt int64 } type MarkPublishedRequest struct { TenantID string OwnerUID string PersonaID string DraftID string MediaID string Permalink string } type MarkScheduledRequest struct { TenantID string OwnerUID string PersonaID string DraftID string QueueID string } type CreateRequest struct { TenantID string OwnerUID string PersonaID string ContentPlanID string CopyMissionID string ScanPostID string FormulaID string DraftType string SortOrder int Text string TopicTag string Angle string Hook string Rationale string ReferenceNotes string Sources []string AiScore int FormulaScore int BrandFitScore int RiskScore int SimilarityScore int EngagementPotential int FreshnessScore int ReviewSuggestion string } type CreateManyRequest struct { TenantID string OwnerUID string PersonaID string Drafts []CreateRequest } type CopyDraftPatch struct { Text *string TopicTag *string Hook *string Angle *string Rationale *string Status *string } type UpdateRequest struct { TenantID string OwnerUID string PersonaID string DraftID string Patch CopyDraftPatch } type InboxListRequest struct { TenantID string OwnerUID string PersonaID string Status string RangeStart int64 RangeEnd int64 Page int PageSize int } type InboxListResult struct { Items []CopyDraftSummary Total int64 } type DeleteMissionMatrixDraftsRequest struct { TenantID string OwnerUID string PersonaID string MissionID string DraftIDs []string } type UseCase interface { Create(ctx context.Context, req CreateRequest) (*CopyDraftSummary, error) CreateMany(ctx context.Context, req CreateManyRequest) ([]CopyDraftSummary, error) ReplaceMissionMatrix(ctx context.Context, tenantID, ownerUID, personaID, missionID string, drafts []CreateRequest) ([]CopyDraftSummary, error) Get(ctx context.Context, tenantID, ownerUID, personaID, draftID string) (*CopyDraftSummary, error) Update(ctx context.Context, req UpdateRequest) (*CopyDraftSummary, error) MarkPublished(ctx context.Context, req MarkPublishedRequest) (*CopyDraftSummary, error) MarkScheduled(ctx context.Context, req MarkScheduledRequest) (*CopyDraftSummary, error) List(ctx context.Context, tenantID, ownerUID, personaID string, limit int) ([]CopyDraftSummary, error) ListInbox(ctx context.Context, req InboxListRequest) (*InboxListResult, error) PruneIdleDrafts(ctx context.Context, tenantID, ownerUID, personaID string, keep int) (int64, error) ListByMission(ctx context.Context, tenantID, ownerUID, personaID, missionID string, limit int) ([]CopyDraftSummary, error) Delete(ctx context.Context, tenantID, ownerUID, personaID, draftID string) error DeleteMissionMatrixDrafts(ctx context.Context, req DeleteMissionMatrixDraftsRequest) (int, error) ClearByMission(ctx context.Context, tenantID, ownerUID, personaID, missionID string) error }