task.model.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. export type TaskStatus = 'pending' | 'uploading' | 'analyzing' | 'searching' | 'processing' | 'exporting' | 'completed' | 'failed';
  2. export type TaskStepId = 'upload' | 'analyze' | 'rules' | 'search' | 'recommend' | 'export';
  3. export interface TaskStep {
  4. id: TaskStepId;
  5. label: string;
  6. status: 'pending' | 'running' | 'done' | 'error';
  7. progress: number;
  8. detail?: string;
  9. }
  10. export interface BriefRequirement {
  11. label: string;
  12. value: string;
  13. confidence: number;
  14. }
  15. export interface SearchCriteria {
  16. platforms: string[];
  17. keywords: string[];
  18. fanRange: { min: number; max: number };
  19. budgetRange: { min: number; max: number };
  20. region?: string;
  21. gender?: string;
  22. contentTags?: string[];
  23. excludeTags?: string[];
  24. }
  25. export interface CandidateCreator {
  26. id: string;
  27. platform: string;
  28. platformUserId: string;
  29. displayName: string;
  30. profileUrl: string;
  31. location: string;
  32. fansCount: number;
  33. contentTags: string[];
  34. personaTags: string[];
  35. gender?: string;
  36. likedCollectCount?: number;
  37. contentType?: string;
  38. city?: string;
  39. geoLocation?: string;
  40. xiaohongshuUrl?: string;
  41. cooperationMethod?: string;
  42. imagePrice: number;
  43. videoPrice: number;
  44. minPrice: number;
  45. cooperationStatus: string;
  46. sourceProvider: string;
  47. sourceConfidence: number;
  48. score?: number;
  49. styleMatch?: number;
  50. recommendStatus?: '强推荐' | '备选' | '需复核' | '已剔除';
  51. recommendReason?: string;
  52. riskNote?: string;
  53. }
  54. export interface TaskResult {
  55. taskId: string;
  56. status: TaskStatus;
  57. steps: TaskStep[];
  58. requirements?: BriefRequirement[];
  59. searchCriteria?: SearchCriteria;
  60. candidates?: CandidateCreator[];
  61. totalPool?: number;
  62. candidateCount?: number;
  63. strongCount?: number;
  64. backupCount?: number;
  65. exportUrl?: string;
  66. error?: string;
  67. createdAt: string;
  68. updatedAt: string;
  69. }
  70. export interface UploadBriefResponse {
  71. taskId: string;
  72. fileName: string;
  73. message: string;
  74. localCreatorCount?: number;
  75. }
  76. export interface TaskProgressEvent {
  77. taskId: string;
  78. step: TaskStepId;
  79. status: 'running' | 'done' | 'error';
  80. progress: number;
  81. detail?: string;
  82. data?: unknown;
  83. }